[PATCH 2/2] drm/scheduler: Remove obsolete spinlock.

Andrey Grodzovsky Andrey.Grodzovsky at amd.com
Wed May 16 11:47:28 UTC 2018


So are you saying that you expect this to  be already in code for any 
usage of drm_sched_fence_create and drm_sched_entity_push_job ?

lock()

drm_sched_fence_create()

... (some code)

drm_sched_entity_push_job()

unlock()


Andrey

On 05/16/2018 07:23 AM, Christian König wrote:
> drm_sched_fence_create() assigns a sequence number to the fence it 
> creates.
>
> Now drm_sched_fence_create() is called by drm_sched_job_init() to 
> initialize the jobs we want to push on the scheduler queue.
>
> When you now call drm_sched_entity_push_job() without a protecting 
> lock it can happen that you push two (or even more) job with reversed 
> sequence numbers.
>
> Since the sequence numbers are used to determine job completion order 
> reversing them can seriously mess things up.
>
> So the spin lock should be superfluous, if it isn't we have a much 
> larger bug we need to fix.
>
> Christian.
>
> Am 16.05.2018 um 13:15 schrieb Andrey Grodzovsky:
>> Can you please elaborate more, maybe give an example - I don't 
>> understand yet the problematic scenario.
>>
>> Andrey
>>
>>
>> On 05/16/2018 02:50 AM, Christian König wrote:
>>> No, that spinlock is indeed incorrect. I
>>>
>>> See even when we protect the spsc queue with a spinlock that doesn't 
>>> make it correct. It can happen that the jobs pushed to the queue are 
>>> reversed in their sequence order and that can cause severe problems 
>>> in the memory management.
>>>
>>> Christian.
>>>
>>> Am 16.05.2018 um 05:33 schrieb Grodzovsky, Andrey:
>>>> Yeah, that what I am not sure about... It's lockless in a sense of 
>>>> single producer single consumer but not for multiple concurrent 
>>>> producers... So now I think this spinlock should stay there... It 
>>>> just looked useless to me at first sight...
>>>>
>>>> Andrey
>>>>
>>>> ________________________________________
>>>> From: Zhou, David(ChunMing)
>>>> Sent: 15 May 2018 23:04:44
>>>> To: Grodzovsky, Andrey; amd-gfx at lists.freedesktop.org; 
>>>> dri-devel at lists.freedesktop.org
>>>> Cc: Koenig, Christian
>>>> Subject: Re: [PATCH 2/2] drm/scheduler: Remove obsolete spinlock.
>>>>
>>>>
>>>>
>>>> On 2018年05月16日 03:31, Andrey Grodzovsky wrote:
>>>>> Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky at amd.com>
>>>>> ---
>>>>>    drivers/gpu/drm/scheduler/gpu_scheduler.c | 4 ----
>>>>>    include/drm/gpu_scheduler.h               | 1 -
>>>>>    2 files changed, 5 deletions(-)
>>>>>
>>>>> diff --git a/drivers/gpu/drm/scheduler/gpu_scheduler.c 
>>>>> b/drivers/gpu/drm/scheduler/gpu_scheduler.c
>>>>> index 1f1dd70..2569a63 100644
>>>>> --- a/drivers/gpu/drm/scheduler/gpu_scheduler.c
>>>>> +++ b/drivers/gpu/drm/scheduler/gpu_scheduler.c
>>>>> @@ -140,7 +140,6 @@ int drm_sched_entity_init(struct 
>>>>> drm_gpu_scheduler *sched,
>>>>>        entity->last_scheduled = NULL;
>>>>>
>>>>>        spin_lock_init(&entity->rq_lock);
>>>>> -     spin_lock_init(&entity->queue_lock);
>>>>>        spsc_queue_init(&entity->job_queue);
>>>>>
>>>>>        atomic_set(&entity->fence_seq, 0);
>>>>> @@ -424,11 +423,8 @@ void drm_sched_entity_push_job(struct 
>>>>> drm_sched_job *sched_job,
>>>>>
>>>>>        trace_drm_sched_job(sched_job, entity);
>>>>>
>>>>> -     spin_lock(&entity->queue_lock);
>>>>>        first = spsc_queue_push(&entity->job_queue, 
>>>>> &sched_job->queue_node);
>>>>>
>>>>> -     spin_unlock(&entity->queue_lock);
>>>> Is your spsc safely to be added simultaneously?
>>>>
>>>> Regards,
>>>> David Zhou
>>>>> -
>>>>>        /* first job wakes up scheduler */
>>>>>        if (first) {
>>>>>                /* Add the entity to the run queue */
>>>>> diff --git a/include/drm/gpu_scheduler.h 
>>>>> b/include/drm/gpu_scheduler.h
>>>>> index 350a62c..683eb65 100644
>>>>> --- a/include/drm/gpu_scheduler.h
>>>>> +++ b/include/drm/gpu_scheduler.h
>>>>> @@ -56,7 +56,6 @@ struct drm_sched_entity {
>>>>>        spinlock_t                      rq_lock;
>>>>>        struct drm_gpu_scheduler        *sched;
>>>>>
>>>>> -     spinlock_t                      queue_lock;
>>>>>        struct spsc_queue               job_queue;
>>>>>
>>>>>        atomic_t                        fence_seq;
>>>
>>
>> _______________________________________________
>> amd-gfx mailing list
>> amd-gfx at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
>



More information about the amd-gfx mailing list