Skip to content

Commit 3ae80b3

Browse files
author
Philipp Stanner
committed
drm/sched: warn about drm_sched_job_init()'s partial init
drm_sched_job_init()'s name suggests that after the function succeeded, parameter "job" will be fully initialized. This is not the case; some members are only later set, notably drm_sched_job.sched by drm_sched_job_arm(). Document that drm_sched_job_init() does not set all struct members. Document the lifetime of drm_sched_job.sched. Reviewed-by: Matthew Brost <[email protected]> Signed-off-by: Philipp Stanner <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 581d1f8 commit 3ae80b3

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

drivers/gpu/drm/scheduler/sched_main.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -771,6 +771,10 @@ EXPORT_SYMBOL(drm_sched_resubmit_jobs);
771771
* Drivers must make sure drm_sched_job_cleanup() if this function returns
772772
* successfully, even when @job is aborted before drm_sched_job_arm() is called.
773773
*
774+
* Note that this function does not assign a valid value to each struct member
775+
* of struct drm_sched_job. Take a look at that struct's documentation to see
776+
* who sets which struct member with what lifetime.
777+
*
774778
* WARNING: amdgpu abuses &drm_sched.ready to signal when the hardware
775779
* has died, which can mean that there's no valid runqueue for a @entity.
776780
* This function returns -ENOENT in this case (which probably should be -EIO as

include/drm/gpu_scheduler.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,14 @@ struct drm_sched_fence *to_drm_sched_fence(struct dma_fence *f);
340340
struct drm_sched_job {
341341
struct spsc_node queue_node;
342342
struct list_head list;
343+
344+
/**
345+
* @sched:
346+
*
347+
* The scheduler this job is or will be scheduled on. Gets set by
348+
* drm_sched_job_arm(). Valid until drm_sched_backend_ops.free_job()
349+
* has finished.
350+
*/
343351
struct drm_gpu_scheduler *sched;
344352
struct drm_sched_fence *s_fence;
345353

0 commit comments

Comments
 (0)