On Tue, Aug 11, 2026 at 01:23:42PM +0200, Boris Brezillon wrote:
> Avoid a workqueue roundtrip and process things immediately from
> panthor_sched_report_fw_events().
> 
> Signed-off-by: Boris Brezillon <[email protected]>

Reviewed-by: Liviu Dudau <[email protected]>

Best regards,
Liviu

> ---
>  drivers/gpu/drm/panthor/panthor_sched.c | 48 
> +++++++--------------------------
>  1 file changed, 9 insertions(+), 39 deletions(-)
> 
> diff --git a/drivers/gpu/drm/panthor/panthor_sched.c 
> b/drivers/gpu/drm/panthor/panthor_sched.c
> index 1ef9da55030c..8016b0a55173 100644
> --- a/drivers/gpu/drm/panthor/panthor_sched.c
> +++ b/drivers/gpu/drm/panthor/panthor_sched.c
> @@ -177,23 +177,6 @@ struct panthor_scheduler {
>        */
>       struct work_struct sync_upd_work;
>  
> -     /**
> -      * @fw_events_work: Work used to process FW events outside the 
> interrupt path.
> -      *
> -      * Even if the interrupt is threaded, we need any event processing
> -      * that require taking the panthor_scheduler::lock to be processed
> -      * outside the interrupt path so we don't block the tick logic when
> -      * it calls panthor_fw_{csg,wait}_wait_acks(). Since most of the
> -      * event processing requires taking this lock, we just delegate all
> -      * FW event processing to the scheduler workqueue.
> -      */
> -     struct work_struct fw_events_work;
> -
> -     /**
> -      * @fw_events: Bitmask encoding pending FW events.
> -      */
> -     atomic_t fw_events;
> -
>       /**
>        * @resched_target: When the next tick should occur.
>        *
> @@ -1971,14 +1954,17 @@ static void sched_process_global_irq_locked(struct 
> panthor_device *ptdev)
>               sched_process_idle_event_locked(ptdev);
>  }
>  
> -static void process_fw_events_work(struct work_struct *work)
> +/**
> + * panthor_sched_report_fw_events() - Report FW events to the scheduler.
> + * @ptdev: Device.
> + * @events: Bitmask of pending FW events to report.
> + */
> +void panthor_sched_report_fw_events(struct panthor_device *ptdev, u32 events)
>  {
> -     struct panthor_scheduler *sched = container_of(work, struct 
> panthor_scheduler,
> -                                                   fw_events_work);
> -     u32 events = atomic_xchg(&sched->fw_events, 0);
> -     struct panthor_device *ptdev = sched->ptdev;
> +     if (!ptdev->scheduler)
> +             return;
>  
> -     guard(spinlock)(&sched->events_lock);
> +     guard(spinlock)(&ptdev->scheduler->events_lock);
>  
>       if (events & JOB_INT_GLOBAL_IF) {
>               sched_process_global_irq_locked(ptdev);
> @@ -1993,20 +1979,6 @@ static void process_fw_events_work(struct work_struct 
> *work)
>       }
>  }
>  
> -/**
> - * panthor_sched_report_fw_events() - Report FW events to the scheduler.
> - * @ptdev: Device.
> - * @events: Bitmask of pending FW events to report.
> - */
> -void panthor_sched_report_fw_events(struct panthor_device *ptdev, u32 events)
> -{
> -     if (!ptdev->scheduler)
> -             return;
> -
> -     atomic_or(events, &ptdev->scheduler->fw_events);
> -     sched_queue_work(ptdev->scheduler, fw_events);
> -}
> -
>  static const char *fence_get_driver_name(struct dma_fence *fence)
>  {
>       return "panthor";
> @@ -4082,7 +4054,6 @@ void panthor_sched_unplug(struct panthor_device *ptdev)
>       struct panthor_scheduler *sched = ptdev->scheduler;
>  
>       disable_delayed_work_sync(&sched->tick_work);
> -     disable_work_sync(&sched->fw_events_work);
>       disable_work_sync(&sched->sync_upd_work);
>  
>       mutex_lock(&sched->lock);
> @@ -4167,7 +4138,6 @@ int panthor_sched_init(struct panthor_device *ptdev)
>       sched->tick_period = msecs_to_jiffies(10);
>       INIT_DELAYED_WORK(&sched->tick_work, tick_work);
>       INIT_WORK(&sched->sync_upd_work, sync_upd_work);
> -     INIT_WORK(&sched->fw_events_work, process_fw_events_work);
>  
>       spin_lock_init(&sched->events_lock);
>  
> 
> -- 
> 2.55.0
> 

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

Reply via email to