]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/panthor: Don't overrule pending immediate ticks in sched_resume_tick()
authorBoris Brezillon <boris.brezillon@collabora.com>
Thu, 25 Jun 2026 12:40:32 +0000 (14:40 +0200)
committerLiviu Dudau <liviu.dudau@arm.com>
Tue, 30 Jun 2026 14:26:55 +0000 (15:26 +0100)
We schedule immediate ticks when we need to process events on CSGs,
but those immediate ticks don't change the resched_target because we
want the other groups to stay scheduled for the remaining of the GPU
timeslot they were given. Make sure these immediate ticks don't get
overruled by a sched_queue_delayed_work() that would delay the tick
execution.

Fixes: 99820b4b7e50 ("drm/panthor: Make sure we resume the tick when new jobs are submitted")
Reported-by: sashiko-bot@kernel.org
Closes: https://sashiko.dev/#/patchset/20260625-panthor-signal-from-irq-v4-0-3d2908912afa@collabora.com?part=9
Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Karunika Choo <karunika.choo@arm.com>
Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
Link: https://patch.msgid.link/20260625-panthor-misc-fixes-v1-6-b67ed973fea6@collabora.com
drivers/gpu/drm/panthor/panthor_sched.c

index 8fd4d97b062e0e8e76b798e2724295fcb568c292..ab3e13e44a269a006fe7e68176e65ecf80480129 100644 (file)
@@ -2667,7 +2667,14 @@ static void sched_resume_tick(struct panthor_device *ptdev)
        else
                delay_jiffies = 0;
 
-       sched_queue_delayed_work(sched, tick, delay_jiffies);
+       /* We schedule immediate ticks when we need to process events on CSGs,
+        * but those don't change the resched_target because we want the other
+        * groups to stay scheduled for the remaining of the GPU timeslot they
+        * were given. Make sure those immediate ticks don't get overruled by
+        * a sched_queue_delayed_work() that would delay the tick execution.
+        */
+       if (!delayed_work_pending(&sched->tick_work))
+               sched_queue_delayed_work(sched, tick, delay_jiffies);
 }
 
 static void group_schedule_locked(struct panthor_group *group, u32 queue_mask)