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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 2 May 2025 05:59:28 +0000 (07:59 +0200)
[ Upstream commit 447fab30955cf7dba7dd563f42b67c02284860c8 ]

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>
(cherry picked from commit 8b2ae7d492675e8af8902f103364bef59382b935)
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c

index 05ebb8216a55a51cd8bddabd9cc5e6cad1c64068..3c2ac5f4e814b7fe0afbe2cd31a4fdbbea67e081 100644 (file)
@@ -1426,9 +1426,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 */
@@ -1439,9 +1441,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;