Am 22.08.2017 um 04:37 schrieb zhoucm1:


On 2017年08月21日 20:58, Christian König wrote:
From: Christian König <christian.koe...@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.koe...@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@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx


_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to