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 > >