[PATCH] drm/amdgpu: discard commands of killed processes
Christian König
deathsimple at vodafone.de
Tue Aug 22 08:55:21 UTC 2017
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.
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