drivers/gpu/drm/scheduler/sched_fence.c | 3 +-- drivers/gpu/drm/scheduler/sched_internal.h | 3 +-- drivers/gpu/drm/scheduler/sched_main.c | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-)
drm_sched_fence_alloc() takes a struct drm_sched_entity *entity but
never uses it. Its only use, fence->sched = entity->rq->sched, moved
into drm_sched_fence_init() by commit dbe48d030b28 ("drm/sched: Split
drm_sched_job_init"), which separated fence allocation in
drm_sched_job_init() from arming in drm_sched_job_arm(). The deref
belongs at arm: drm_sched_job_arm() selects the run-queue via
drm_sched_entity_select_rq(), so for an entity with more than one
scheduler, entity->rq need not yet point at the scheduler the job lands
on. Reading it at allocation time could bind the fence to the wrong
scheduler.
Drop the argument. The sole caller still passes the entity to
drm_sched_fence_init() at arm time, so behavior is unchanged. This also
removes the parameter-name mismatch between the declaration (s_entity)
and the definition (entity).
Signed-off-by: Donggeun Yoo <donggeunyoo.kernel@gmail.com>
Assisted-by: Claude:claude-fable-5
---
Targets drm-misc-next. No functional change; compile-tested with W=1.
---
drivers/gpu/drm/scheduler/sched_fence.c | 3 +--
drivers/gpu/drm/scheduler/sched_internal.h | 3 +--
drivers/gpu/drm/scheduler/sched_main.c | 2 +-
3 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/scheduler/sched_fence.c b/drivers/gpu/drm/scheduler/sched_fence.c
index 096fe28aa9c9..b7a4cb921234 100644
--- a/drivers/gpu/drm/scheduler/sched_fence.c
+++ b/drivers/gpu/drm/scheduler/sched_fence.c
@@ -205,8 +205,7 @@ struct drm_sched_fence *to_drm_sched_fence(struct dma_fence *f)
}
EXPORT_SYMBOL(to_drm_sched_fence);
-struct drm_sched_fence *drm_sched_fence_alloc(struct drm_sched_entity *entity,
- void *owner,
+struct drm_sched_fence *drm_sched_fence_alloc(void *owner,
u64 drm_client_id)
{
struct drm_sched_fence *fence = NULL;
diff --git a/drivers/gpu/drm/scheduler/sched_internal.h b/drivers/gpu/drm/scheduler/sched_internal.h
index a901801fce85..32d3ddb820be 100644
--- a/drivers/gpu/drm/scheduler/sched_internal.h
+++ b/drivers/gpu/drm/scheduler/sched_internal.h
@@ -58,8 +58,7 @@ drm_sched_rq_select_entity(struct drm_gpu_scheduler *sched,
void drm_sched_entity_select_rq(struct drm_sched_entity *entity);
struct drm_sched_job *drm_sched_entity_pop_job(struct drm_sched_entity *entity);
-struct drm_sched_fence *drm_sched_fence_alloc(struct drm_sched_entity *s_entity,
- void *owner, u64 drm_client_id);
+struct drm_sched_fence *drm_sched_fence_alloc(void *owner, u64 drm_client_id);
void drm_sched_fence_init(struct drm_sched_fence *fence,
struct drm_sched_entity *entity);
void drm_sched_fence_free(struct drm_sched_fence *fence);
diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
index 6cb6f9546493..e4835b99ca60 100644
--- a/drivers/gpu/drm/scheduler/sched_main.c
+++ b/drivers/gpu/drm/scheduler/sched_main.c
@@ -612,7 +612,7 @@ int drm_sched_job_init(struct drm_sched_job *job,
job->entity = entity;
job->credits = credits;
- job->s_fence = drm_sched_fence_alloc(entity, owner, drm_client_id);
+ job->s_fence = drm_sched_fence_alloc(owner, drm_client_id);
if (!job->s_fence)
return -ENOMEM;
--
2.53.0
On Wed, 2026-09-09 at 09:51 +0900, Donggeun Yoo wrote:
> drm_sched_fence_alloc() takes a struct drm_sched_entity *entity but
> never uses it. Its only use, fence->sched = entity->rq->sched, moved
> into drm_sched_fence_init() by commit dbe48d030b28 ("drm/sched: Split
> drm_sched_job_init"), which separated fence allocation in
> drm_sched_job_init() from arming in drm_sched_job_arm(). The deref
> belongs at arm: drm_sched_job_arm() selects the run-queue via
> drm_sched_entity_select_rq(), so for an entity with more than one
> scheduler, entity->rq need not yet point at the scheduler the job lands
> on. Reading it at allocation time could bind the fence to the wrong
> scheduler.
I think that paragraph is a bit overkill ;)
Especially the last sentence reads a bit like you're addressing a bug,
but it's just about removing an unused parameter.
I think saying "In commit dbe48d030b28 ("… … it was forgotten to remove
a now unused function argument" is enough. Who's interested in details
can then look at the commit.
>
> Drop the argument. The sole caller still passes the entity to
> drm_sched_fence_init() at arm time, so behavior is unchanged. This also
> removes the parameter-name mismatch between the declaration (s_entity)
> and the definition (entity).
This paragraph is good.
P.
© 2016 - 2026 Red Hat, Inc.