mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 00:22:00 +02:00
drm/panthor: Fix immediate ticking on a disabled tick
We have a few paths where we schedule the tick work immediately without
changing the resched_target. If the tick was stopped, this would lead
to a remaining_jiffies that's always > 0, and it wouldn't force a full
tick in that case. Add extra checks to cover that case properly.
v2:
- Fix typo
- Simplify the code as suggested by Steve
v3:
- Collect R-b
Fixes: de85488138 ("drm/panthor: Add the scheduler logical block")
Reviewed-by: Steven Price <steven.price@arm.com>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
Link: https://patch.msgid.link/20251128094839.3856402-6-boris.brezillon@collabora.com
Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
This commit is contained in:
parent
55429c51d5
commit
4356d21994
|
|
@ -2435,6 +2435,7 @@ static void tick_work(struct work_struct *work)
|
|||
tick_work.work);
|
||||
struct panthor_device *ptdev = sched->ptdev;
|
||||
struct panthor_sched_tick_ctx ctx;
|
||||
u64 resched_target = sched->resched_target;
|
||||
u64 remaining_jiffies = 0, resched_delay;
|
||||
u64 now = get_jiffies_64();
|
||||
int prio, ret, cookie;
|
||||
|
|
@ -2447,8 +2448,12 @@ static void tick_work(struct work_struct *work)
|
|||
if (drm_WARN_ON(&ptdev->base, ret))
|
||||
goto out_dev_exit;
|
||||
|
||||
if (time_before64(now, sched->resched_target))
|
||||
remaining_jiffies = sched->resched_target - now;
|
||||
/* If the tick is stopped, calculate when the next tick would be */
|
||||
if (resched_target == U64_MAX)
|
||||
resched_target = sched->last_tick + sched->tick_period;
|
||||
|
||||
if (time_before64(now, resched_target))
|
||||
remaining_jiffies = resched_target - now;
|
||||
|
||||
full_tick = remaining_jiffies == 0;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user