[PATCH 2/8] drm/sched: Always wake up correct scheduler in drm_sched_entity_push_job

Christian König christian.koenig at amd.com
Tue Sep 24 14:20:39 UTC 2024


Am 24.09.24 um 16:12 schrieb Tvrtko Ursulin:
>
> On 24/09/2024 14:55, Christian König wrote:
>> I've pushed the first to drm-misc-next, but that one here fails to 
>> apply cleanly.
>
> This appears due 440d52b370b0 ("drm/sched: Fix dynamic job-flow 
> control race") in drm-misc-fixes.
>
> In theory 1-3 from my series are fixes. Should they also go to 
> drm-misc-fixes? I am not too familiar with the drm-misc flow.

Ah shit, in that case you should have spitted the patches up into fixes 
and next. Going to push the first 3 to fixes.

> Or the series now needs to wait for some backmerge?

Are the remaining 3 patches independent? If not then we need to wait for 
a backmerge.

Regards,
Christian.

>
> Regards,
>
> Tvrtko
>
>> Am 24.09.24 um 12:19 schrieb Tvrtko Ursulin:
>>> From: Tvrtko Ursulin <tvrtko.ursulin at igalia.com>
>>>
>>> Since drm_sched_entity_modify_sched() can modify the entities run 
>>> queue,
>>> lets make sure to only dereference the pointer once so both adding and
>>> waking up are guaranteed to be consistent.
>>>
>>> Alternative of moving the spin_unlock to after the wake up would for 
>>> now
>>> be more problematic since the same lock is taken inside
>>> drm_sched_rq_update_fifo().
>>>
>>> v2:
>>>   * Improve commit message. (Philipp)
>>>   * Cache the scheduler pointer directly. (Christian)
>>>
>>> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at igalia.com>
>>> Fixes: b37aced31eb0 ("drm/scheduler: implement a function to modify 
>>> sched list")
>>> Cc: Christian König <christian.koenig at amd.com>
>>> Cc: Alex Deucher <alexander.deucher at amd.com>
>>> Cc: Luben Tuikov <ltuikov89 at gmail.com>
>>> Cc: Matthew Brost <matthew.brost at intel.com>
>>> Cc: David Airlie <airlied at gmail.com>
>>> Cc: Daniel Vetter <daniel at ffwll.ch>
>>> Cc: Philipp Stanner <pstanner at redhat.com>
>>> Cc: dri-devel at lists.freedesktop.org
>>> Cc: <stable at vger.kernel.org> # v5.7+
>>> Reviewed-by: Christian König <christian.koenig at amd.com>
>>> ---
>>>   drivers/gpu/drm/scheduler/sched_entity.c | 10 ++++++++--
>>>   1 file changed, 8 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/scheduler/sched_entity.c 
>>> b/drivers/gpu/drm/scheduler/sched_entity.c
>>> index 0e002c17fcb6..a75eede8bf8d 100644
>>> --- a/drivers/gpu/drm/scheduler/sched_entity.c
>>> +++ b/drivers/gpu/drm/scheduler/sched_entity.c
>>> @@ -599,6 +599,9 @@ void drm_sched_entity_push_job(struct 
>>> drm_sched_job *sched_job)
>>>       /* first job wakes up scheduler */
>>>       if (first) {
>>> +        struct drm_gpu_scheduler *sched;
>>> +        struct drm_sched_rq *rq;
>>> +
>>>           /* Add the entity to the run queue */
>>>           spin_lock(&entity->rq_lock);
>>>           if (entity->stopped) {
>>> @@ -608,13 +611,16 @@ void drm_sched_entity_push_job(struct 
>>> drm_sched_job *sched_job)
>>>               return;
>>>           }
>>> -        drm_sched_rq_add_entity(entity->rq, entity);
>>> +        rq = entity->rq;
>>> +        sched = rq->sched;
>>> +
>>> +        drm_sched_rq_add_entity(rq, entity);
>>>           spin_unlock(&entity->rq_lock);
>>>           if (drm_sched_policy == DRM_SCHED_POLICY_FIFO)
>>>               drm_sched_rq_update_fifo(entity, submit_ts);
>>> -        drm_sched_wakeup(entity->rq->sched);
>>> +        drm_sched_wakeup(sched);
>>>       }
>>>   }
>>>   EXPORT_SYMBOL(drm_sched_entity_push_job);
>>



More information about the amd-gfx mailing list