[PATCH 3/3] drm/sched: Remove a hole from struct drm_sched_job

Christian König christian.koenig at amd.com
Tue Feb 11 08:28:07 UTC 2025


Am 06.02.25 um 17:40 schrieb Tvrtko Ursulin:
> We can re-order some struct members and take u32 credits outside of the
> pointer sandwich and also for the last_dependency member we can get away
> with an unsigned int since for dependency we use xa_limit_32b.
>
> Pahole report before:
>          /* size: 160, cachelines: 3, members: 14 */
>          /* sum members: 156, holes: 1, sum holes: 4 */
>          /* last cacheline: 32 bytes */
>
> And after:
>          /* size: 152, cachelines: 3, members: 14 */
>          /* last cacheline: 24 bytes */
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at igalia.com>
> Cc: Christian König <christian.koenig at amd.com>
> Cc: Danilo Krummrich <dakr at kernel.org>
> Cc: Matthew Brost <matthew.brost at intel.com>
> Cc: Philipp Stanner <phasta at kernel.org>
> ---
>   include/drm/gpu_scheduler.h | 38 +++++++++++++++++++------------------
>   1 file changed, 20 insertions(+), 18 deletions(-)
>
> diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h
> index a0ff08123f07..68da3dec8dba 100644
> --- a/include/drm/gpu_scheduler.h
> +++ b/include/drm/gpu_scheduler.h
> @@ -338,8 +338,14 @@ struct drm_sched_fence *to_drm_sched_fence(struct dma_fence *f);
>    * to schedule the job.
>    */
>   struct drm_sched_job {
> -	struct spsc_node		queue_node;
> -	struct list_head		list;
> +	u64				id;

Not actually part of this patch here, but I think we should remove this 
id field and rather always use the context/sequence number pair of the 
scheduler fence to identify a submission.

The patch itself is Acked-by: Christian König <christian.koenig at amd.com>.

Regards,
Christian.

> +
> +	/**
> +	 * @submit_ts:
> +	 *
> +	 * When the job was pushed into the entity queue.
> +	 */
> +	ktime_t                         submit_ts;
>   
>   	/**
>   	 * @sched:
> @@ -349,24 +355,30 @@ struct drm_sched_job {
>   	 * has finished.
>   	 */
>   	struct drm_gpu_scheduler	*sched;
> +
>   	struct drm_sched_fence		*s_fence;
> +	struct drm_sched_entity         *entity;
>   
> +	enum drm_sched_priority		s_priority;
>   	u32				credits;
> +	/** @last_dependency: tracks @dependencies as they signal */
> +	unsigned int			last_dependency;
> +	atomic_t			karma;
> +
> +	struct spsc_node		queue_node;
> +	struct list_head		list;
>   
>   	/*
>   	 * work is used only after finish_cb has been used and will not be
>   	 * accessed anymore.
>   	 */
>   	union {
> -		struct dma_fence_cb		finish_cb;
> -		struct work_struct		work;
> +		struct dma_fence_cb	finish_cb;
> +		struct work_struct	work;
>   	};
>   
> -	uint64_t			id;
> -	atomic_t			karma;
> -	enum drm_sched_priority		s_priority;
> -	struct drm_sched_entity         *entity;
>   	struct dma_fence_cb		cb;
> +
>   	/**
>   	 * @dependencies:
>   	 *
> @@ -375,16 +387,6 @@ struct drm_sched_job {
>   	 * drm_sched_job_add_implicit_dependencies().
>   	 */
>   	struct xarray			dependencies;
> -
> -	/** @last_dependency: tracks @dependencies as they signal */
> -	unsigned long			last_dependency;
> -
> -	/**
> -	 * @submit_ts:
> -	 *
> -	 * When the job was pushed into the entity queue.
> -	 */
> -	ktime_t                         submit_ts;
>   };
>   
>   static inline bool drm_sched_invalidate_job(struct drm_sched_job *s_job,



More information about the amd-gfx mailing list