[PATCH 1/2] drm/scheduler: bind job earlier to scheduler

Nayan Deshmukh nayan26deshmukh at gmail.com
Mon Aug 6 13:17:57 UTC 2018


On Mon, Aug 6, 2018 at 6:45 PM Christian König <
ckoenig.leichtzumerken at gmail.com> wrote:

> Am 06.08.2018 um 15:11 schrieb Nayan Deshmukh:
>
> Hi Christian,
>
> On Mon, Aug 6, 2018 at 5:49 PM Christian König <
> ckoenig.leichtzumerken at gmail.com> wrote:
>
>> Update job earlier with the scheduler it is supposed to be scheduled on.
>>
>> Otherwise we could incorrectly optimize dependencies when moving an
>> entity from one scheduler to another.
>>
> I don't think change is really required, the old code should work fine.
> Read below for more comments.
>
>
>>
>> Signed-off-by: Christian König <christian.koenig at amd.com>
>> ---
>>  drivers/gpu/drm/scheduler/gpu_scheduler.c | 4 ++--
>>  drivers/gpu/drm/scheduler/sched_fence.c   | 2 +-
>>  2 files changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/scheduler/gpu_scheduler.c
>> b/drivers/gpu/drm/scheduler/gpu_scheduler.c
>> index 65078dd3c82c..029863726c99 100644
>> --- a/drivers/gpu/drm/scheduler/gpu_scheduler.c
>> +++ b/drivers/gpu/drm/scheduler/gpu_scheduler.c
>> @@ -533,8 +533,6 @@ drm_sched_entity_pop_job(struct drm_sched_entity
>> *entity)
>>         if (!sched_job)
>>                 return NULL;
>>
>> -       sched_job->sched = sched;
>> -       sched_job->s_fence->sched = sched;
>>         while ((entity->dependency = sched->ops->dependency(sched_job,
>> entity)))
>>
> The job should have the correct scheduler before the
> sched->oops->dependency() function is called for the first time. Hence I
> placed the assignment here.
>
> It might also be that I am missing some case so please let me know if such
> a case exists where this might lead to wrong optimization.
>
>
> The problem is that the scheduler fence of job A could be the dependency
> of another job B
>
> Job B then makes an incorrect optimization because it sees the wrong
> scheduler in the scheduler fence of job A.
>
> Ah..I missed this case.  This make sense now. Reviewed-by: Nayan Deshmukh <
nayan26deshmukh at gmail.com>

> Regards,
> Christian.
>
>
> Regards,
> Nayan
>
>>                 if (drm_sched_entity_add_dependency_cb(entity))
>>                         return NULL;
>> @@ -581,6 +579,8 @@ void drm_sched_entity_push_job(struct drm_sched_job
>> *sched_job,
>>                 spin_unlock(&entity->rq_lock);
>>         }
>>
>> +       sched_job->sched = entity->rq->sched;
>> +       sched_job->s_fence->sched = entity->rq->sched;
>>         trace_drm_sched_job(sched_job, entity);
>>         atomic_inc(&entity->rq->sched->num_jobs);
>>         WRITE_ONCE(entity->last_user, current->group_leader);
>> diff --git a/drivers/gpu/drm/scheduler/sched_fence.c
>> b/drivers/gpu/drm/scheduler/sched_fence.c
>> index 4029312fdd81..6dab18d288d7 100644
>> --- a/drivers/gpu/drm/scheduler/sched_fence.c
>> +++ b/drivers/gpu/drm/scheduler/sched_fence.c
>> @@ -172,7 +172,7 @@ struct drm_sched_fence *drm_sched_fence_create(struct
>> drm_sched_entity *entity,
>>                 return NULL;
>>
>>         fence->owner = owner;
>> -       fence->sched = entity->rq->sched;
>> +       fence->sched = NULL;
>>         spin_lock_init(&fence->lock);
>>
>>         seq = atomic_inc_return(&entity->fence_seq);
>> --
>> 2.14.1
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20180806/20d96050/attachment-0001.html>


More information about the dri-devel mailing list