[PATCH v2 01/20] Revert "drm/sched: Remove redundant entity->rq initialization and checks"
Tvrtko Ursulin <[email protected]>
| Newsgroups | org.freedesktop.lists.dri-devel,org.freedesktop.lists.amd-gfx |
|---|---|
| Message-ID | <[email protected]> |
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