drm/sched: Remove a hole from struct drm_sched_job
authorTvrtko Ursulin <tvrtko.ursulin@igalia.com>
Fri, 21 Feb 2025 10:50:35 +0000 (10:50 +0000)
committerPhilipp Stanner <phasta@kernel.org>
Mon, 24 Feb 2025 09:17:40 +0000 (10:17 +0100)
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@igalia.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: Danilo Krummrich <dakr@kernel.org>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Philipp Stanner <phasta@kernel.org>
Acked-by: Danilo Krummrich <dakr@kernel.org>
Acked-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Philipp Stanner <phasta@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20250221105038.79665-4-tvrtko.ursulin@igalia.com
include/drm/gpu_scheduler.h

index 6bf458dbce8433ec7b5e981eb56957a6e9169383..1c1138308e66ff212ca031990b123dd73f290729 100644 (file)
@@ -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;
+
+       /**
+        * @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,