On Mon, Oct 28, 2024 at 12:48:14PM +0100, 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.brezil...@collabora.com>

Reviewed-by: Liviu Dudau <liviu.du...@arm.com>

Best regards,
Liviu

> ---
>  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,
> -- 
> 2.46.2
> 

-- 
====================
| I would like to |
| fix the world,  |
| but they're not |
| giving me the   |
 \ source code!  /
  ---------------
    ¯\_(ツ)_/¯

Reply via email to