[PATCH] drm/amdgpu: discard commands of killed processes
zhoucm1
david1.zhou at amd.com
Tue Aug 22 09:12:56 UTC 2017
On 2017年08月22日 16:55, Christian König wrote:
> Am 22.08.2017 um 04:37 schrieb zhoucm1:
>>
>>
>> On 2017年08月21日 20:58, Christian König wrote:
>>> From: Christian König <christian.koenig at amd.com>
>>>
>>> When a process is killed we shouldn't submit all waiting jobs, but
>>> instead
>>> clean up as fast as possible.
>>>
>>> Signed-off-by: Christian König <christian.koenig at amd.com>
>>> ---
>>> drivers/gpu/drm/amd/scheduler/gpu_scheduler.c | 23
>>> +++++++++++++++++++----
>>> 1 file changed, 19 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
>>> b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
>>> index 38cea6f..97c94f9 100644
>>> --- a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
>>> +++ b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
>>> @@ -205,17 +205,32 @@ void amd_sched_entity_fini(struct
>>> amd_gpu_scheduler *sched,
>>> struct amd_sched_entity *entity)
>>> {
>>> struct amd_sched_rq *rq = entity->rq;
>>> + int r;
>>> if (!amd_sched_entity_is_initialized(sched, entity))
>>> return;
>>> -
>>> /**
>>> * The client will not queue more IBs during this fini,
>>> consume existing
>>> - * queued IBs
>>> + * queued IBs or discard them on SIGKILL
>>> */
>>> - wait_event(sched->job_scheduled,
>>> amd_sched_entity_is_idle(entity));
>>> -
>>> + if ((current->flags & PF_SIGNALED) && current->exit_code ==
>>> SIGKILL)
>>> + r = -ERESTARTSYS;
>>> + else
>>> + r = wait_event_killable(sched->job_scheduled,
>>> + amd_sched_entity_is_idle(entity));
>>> amd_sched_rq_remove_entity(rq, entity);
>>> + if (r) {
>>> + struct amd_sched_job *job;
>>> +
>>> + /* Park the kernel for a moment to make sure it isn't
>>> processing
>>> + * our enity.
>>> + */
>>> + kthread_park(sched->thread);
>>> + kthread_unpark(sched->thread);
>> When entity has been removed, how does sched process entity? seems
>> not need here.
>> otherwise looks good to me.
>
> It's possible that we race here, e.g. we removed the entity but the
> scheduler is still processing one last job from that entity.
Fair, feel free to add my RB.
Regards,
David Zhou
>
> Regards,
> Christian.
>
>>
>> Regards,
>> David Zhou
>>> + while (kfifo_out(&entity->job_queue, &job, sizeof(job)))
>>> + sched->ops->free_job(job);
>>> +
>>> + }
>>> kfifo_free(&entity->job_queue);
>>> }
>>
>> _______________________________________________
>> 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