drm/amdgpu: use a dummy owner for sysfs triggered cleaner shaders v4
authorChristian König <christian.koenig@amd.com>
Fri, 28 Mar 2025 17:58:17 +0000 (18:58 +0100)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 11 Apr 2025 20:52:33 +0000 (16:52 -0400)
Otherwise triggering sysfs multiple times without other submissions in
between only runs the shader once.

v2: add some comment
v3: re-add missing cast
v4: squash in semicolon fix

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c

index 0f84e5afd564a9a4fe311130b854d7134048b620..663830c6c73b3552076963561d47b528cf89e433 100644 (file)
@@ -1440,9 +1440,11 @@ static int amdgpu_gfx_run_cleaner_shader_job(struct amdgpu_ring *ring)
        struct amdgpu_device *adev = ring->adev;
        struct drm_gpu_scheduler *sched = &ring->sched;
        struct drm_sched_entity entity;
+       static atomic_t counter;
        struct dma_fence *f;
        struct amdgpu_job *job;
        struct amdgpu_ib *ib;
+       void *owner;
        int i, r;
 
        /* Initialize the scheduler entity */
@@ -1453,9 +1455,15 @@ static int amdgpu_gfx_run_cleaner_shader_job(struct amdgpu_ring *ring)
                goto err;
        }
 
-       r = amdgpu_job_alloc_with_ib(ring->adev, &entity, NULL,
-                                    64, 0,
-                                    &job);
+       /*
+        * Use some unique dummy value as the owner to make sure we execute
+        * the cleaner shader on each submission. The value just need to change
+        * for each submission and is otherwise meaningless.
+        */
+       owner = (void *)(unsigned long)atomic_inc_return(&counter);
+
+       r = amdgpu_job_alloc_with_ib(ring->adev, &entity, owner,
+                                    64, 0, &job);
        if (r)
                goto err;