On Thu, 15 May 2025 11:33:05 +0100 Ashley Smith <ashley.sm...@collabora.com> wrote:
> This fixes a bug where if we timeout after a suspend and the termination > fails, due to waiting on a fence that will never be signalled for > example, we do not resume the group correctly. The fix forces a reset > for groups that are not terminated correctly. > > Signed-off-by: Ashley Smith <ashley.sm...@collabora.com> Reviewed-by: Boris Brezillon <boris.brezil...@collabora.com> > --- > drivers/gpu/drm/panthor/panthor_sched.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/panthor/panthor_sched.c > b/drivers/gpu/drm/panthor/panthor_sched.c > index 43ee57728de5..1f4a5a103975 100644 > --- a/drivers/gpu/drm/panthor/panthor_sched.c > +++ b/drivers/gpu/drm/panthor/panthor_sched.c > @@ -2727,8 +2727,17 @@ void panthor_sched_suspend(struct panthor_device > *ptdev) > * automatically terminate all active groups, so let's > * force the state to halted here. > */ > - if (csg_slot->group->state != > PANTHOR_CS_GROUP_TERMINATED) > + if (csg_slot->group->state != > PANTHOR_CS_GROUP_TERMINATED) { > csg_slot->group->state = > PANTHOR_CS_GROUP_TERMINATED; > + > + /* Reset the queue slots manually if the > termination > + * request failed. > + */ > + for (i = 0; i queue_count; i++) { > + if (group->queues[i]) > + cs_slot_reset_locked(ptdev, > csg_id, i); > + } > + } > slot_mask &= ~BIT(csg_id); > } > } > > base-commit: 9934ab18051118385c7ea44d8e14175edbe6dc9c