On 28/10/2024 11:48, Boris Brezillon wrote: > If we don't do that, the group is considered usable by userspace, but > all further GROUP_SUBMIT will fail with -EINVAL. > > Changes in v2: > - New patch > > Fixes: de8548813824 ("drm/panthor: Add the scheduler logical block") > Signed-off-by: Boris Brezillon <boris.brezillon@xxxxxxxxxxxxx> I guess a failure to suspend is close enough to a time out. I think the only case that might actually matter is dealt with by your next patch. Reviewed-by: Steven Price <steven.price@xxxxxxx> > --- > drivers/gpu/drm/panthor/panthor_sched.c | 15 +++++++++++---- > 1 file changed, 11 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/panthor/panthor_sched.c b/drivers/gpu/drm/panthor/panthor_sched.c > index eda8fbb276b3..ef4bec7ff9c7 100644 > --- a/drivers/gpu/drm/panthor/panthor_sched.c > +++ b/drivers/gpu/drm/panthor/panthor_sched.c > @@ -602,10 +602,11 @@ struct panthor_group { > * @timedout: True when a timeout occurred on any of the queues owned by > * this group. > * > - * Timeouts can be reported by drm_sched or by the FW. In any case, any > - * timeout situation is unrecoverable, and the group becomes useless. > - * We simply wait for all references to be dropped so we can release the > - * group object. > + * Timeouts can be reported by drm_sched or by the FW. If a reset is required, > + * and the group can't be suspended, this also leads to a timeout. In any case, > + * any timeout situation is unrecoverable, and the group becomes useless. We > + * simply wait for all references to be dropped so we can release the group > + * object. > */ > bool timedout; > > @@ -2687,6 +2688,12 @@ void panthor_sched_suspend(struct panthor_device *ptdev) > csgs_upd_ctx_init(&upd_ctx); > while (slot_mask) { > u32 csg_id = ffs(slot_mask) - 1; > + struct panthor_csg_slot *csg_slot = &sched->csg_slots[csg_id]; > + > + /* We consider group suspension failures as fatal and flag the > + * group as unusable by setting timedout=true. > + */ > + csg_slot->group->timedout = true; > > csgs_upd_ctx_queue_reqs(ptdev, &upd_ctx, csg_id, > CSG_STATE_TERMINATE,