This reverts commit 2df5efb45425b48fbf5a3c1f36a686af26871009.

Signed-off-by: Tvrtko Ursulin <[email protected]>
Cc: [email protected]
Cc: Matthew Brost <[email protected]>
Cc: Danilo Krummrich <[email protected]>
Cc: Philipp Stanner <[email protected]>
Cc: Christian König <[email protected]>
---
 drivers/gpu/drm/scheduler/sched_entity.c | 11 +++++++++--
 drivers/gpu/drm/scheduler/sched_main.c   |  9 +++++++++
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/scheduler/sched_entity.c 
b/drivers/gpu/drm/scheduler/sched_entity.c
index c51101ec70c1..4ebb513255ed 100644
--- a/drivers/gpu/drm/scheduler/sched_entity.c
+++ b/drivers/gpu/drm/scheduler/sched_entity.c
@@ -129,6 +129,7 @@ int drm_sched_entity_init(struct drm_sched_entity *entity,
                return -ENOMEM;
 
        INIT_LIST_HEAD(&entity->list);
+       entity->rq = NULL;
        entity->guilty = guilty;
        entity->priority = priority;
        entity->last_user = current->group_leader;
@@ -279,6 +280,9 @@ void drm_sched_entity_kill(struct drm_sched_entity *entity)
        struct drm_sched_job *job;
        struct dma_fence *prev;
 
+       if (!entity->rq)
+               return;
+
        spin_lock(&entity->lock);
        entity->stopped = true;
        drm_sched_rq_remove_entity(entity->rq, entity);
@@ -325,11 +329,14 @@ EXPORT_SYMBOL(drm_sched_entity_kill);
  */
 long drm_sched_entity_flush(struct drm_sched_entity *entity, long timeout)
 {
-       struct drm_gpu_scheduler *sched =
-               container_of(entity->rq, typeof(*sched), rq);
+       struct drm_gpu_scheduler *sched;
        struct task_struct *last_user;
        long ret = timeout;
 
+       if (!entity->rq)
+               return 0;
+
+       sched = container_of(entity->rq, typeof(*sched), rq);
        /*
         * The client will not queue more jobs during this fini - consume
         * existing queued ones, or discard them on SIGKILL.
diff --git a/drivers/gpu/drm/scheduler/sched_main.c 
b/drivers/gpu/drm/scheduler/sched_main.c
index d2ca01b31ee4..818d3d4434b5 100644
--- a/drivers/gpu/drm/scheduler/sched_main.c
+++ b/drivers/gpu/drm/scheduler/sched_main.c
@@ -588,6 +588,15 @@ int drm_sched_job_init(struct drm_sched_job *job,
                       u32 credits, void *owner,
                       uint64_t drm_client_id)
 {
+       if (!entity->rq) {
+               /* This will most likely be followed by missing frames
+                * or worse--a blank screen--leave a trail in the
+                * logs, so this can be debugged easier.
+                */
+               dev_err(job->sched->dev, "%s: entity has no rq!\n", __func__);
+               return -ENOENT;
+       }
+
        if (unlikely(!credits)) {
                pr_err("*ERROR* %s: credits cannot be 0!\n", __func__);
                return -EINVAL;
-- 
2.54.0

Reply via email to