[PATCH] drm/amdgpu: discard commands of killed processes
zhoucm1
david1.zhou at amd.com
Tue Aug 22 02:37:37 UTC 2017
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.
Regards,
David Zhou
> + while (kfifo_out(&entity->job_queue, &job, sizeof(job)))
> + sched->ops->free_job(job);
> +
> + }
> kfifo_free(&entity->job_queue);
> }
>
More information about the amd-gfx
mailing list