[PATCH] drm/scheduler: only kill entity if last user is killed
Nayan Deshmukh
nayan26deshmukh at gmail.com
Mon Jul 30 08:48:50 UTC 2018
On Thu, Jul 26, 2018 at 5:16 PM Christian König <
ckoenig.leichtzumerken at gmail.com> wrote:
> Note which task is using the entity and only kill it if the last user of
> the entity is killed. This should prevent problems when entities are
> leaked to
> child processes.
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
> ---
> drivers/gpu/drm/scheduler/gpu_scheduler.c | 6 +++++-
> include/drm/gpu_scheduler.h | 1 +
> 2 files changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/scheduler/gpu_scheduler.c
> b/drivers/gpu/drm/scheduler/gpu_scheduler.c
> index 3f2fc5e8242a..f563e4fbb4b6 100644
> --- a/drivers/gpu/drm/scheduler/gpu_scheduler.c
> +++ b/drivers/gpu/drm/scheduler/gpu_scheduler.c
> @@ -275,6 +275,7 @@ static void drm_sched_entity_kill_jobs_cb(struct
> dma_fence *f,
> long drm_sched_entity_flush(struct drm_sched_entity *entity, long timeout)
> {
> struct drm_gpu_scheduler *sched;
> + struct task_struct *last_user;
> long ret = timeout;
>
> sched = entity->rq->sched;
> @@ -295,7 +296,9 @@ long drm_sched_entity_flush(struct drm_sched_entity
> *entity, long timeout)
>
>
> /* For killed process disable any more IBs enqueue right now */
> - if ((current->flags & PF_EXITING) && (current->exit_code ==
> SIGKILL))
> + last_user = cmpxchg(&entity->last_user, current->group_leader,
> NULL);
> + if ((!last_user || last_user == current->group_leader) &&
> + (current->flags & PF_EXITING) && (current->exit_code ==
> SIGKILL))
> drm_sched_entity_set_rq(entity, NULL);
>
> return ret;
> @@ -541,6 +544,7 @@ void drm_sched_entity_push_job(struct drm_sched_job
> *sched_job,
>
> trace_drm_sched_job(sched_job, entity);
>
> + WRITE_ONCE(entity->last_user, current->group_leader);
> first = spsc_queue_push(&entity->job_queue,
> &sched_job->queue_node);
>
> /* first job wakes up scheduler */
> diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h
> index 091b9afcd184..64016446a103 100644
> --- a/include/drm/gpu_scheduler.h
> +++ b/include/drm/gpu_scheduler.h
> @@ -85,6 +85,7 @@ struct drm_sched_entity {
> struct dma_fence_cb cb;
> atomic_t *guilty;
> struct dma_fence *last_scheduled;
> + struct task_struct *last_user;
>
Please add a line regarding this field in the kernel doc comments.
Regards,
Nayan
> };
>
> /**
> --
> 2.14.1
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20180730/e0901114/attachment.html>
More information about the dri-devel
mailing list