diff options
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c | 23 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 1 |
3 files changed, 17 insertions, 9 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 66d556fc17ef..c736c30e0a0a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -1100,6 +1100,8 @@ struct amdgpu_device { struct list_head ras_list; struct ip_discovery_top *ip_top; + + struct mutex benchmark_mutex; }; static inline struct amdgpu_device *drm_to_adev(struct drm_device *ddev) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c index 49af23f0a037..9973b6266a3d 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c @@ -183,6 +183,7 @@ int amdgpu_benchmark(struct amdgpu_device *adev, int test_number) 1920 * 1200 * 4 }; + mutex_lock(&adev->benchmark_mutex); switch (test_number) { case 1: dev_info(adev->dev, @@ -192,11 +193,11 @@ int amdgpu_benchmark(struct amdgpu_device *adev, int test_number) r = amdgpu_benchmark_move(adev, 1024*1024, AMDGPU_GEM_DOMAIN_GTT, AMDGPU_GEM_DOMAIN_VRAM); if (r) - return r; + goto done; r = amdgpu_benchmark_move(adev, 1024*1024, AMDGPU_GEM_DOMAIN_VRAM, AMDGPU_GEM_DOMAIN_GTT); if (r) - return r; + goto done; break; case 2: dev_info(adev->dev, @@ -206,7 +207,7 @@ int amdgpu_benchmark(struct amdgpu_device *adev, int test_number) r = amdgpu_benchmark_move(adev, 1024*1024, AMDGPU_GEM_DOMAIN_VRAM, AMDGPU_GEM_DOMAIN_VRAM); if (r) - return r; + goto done; break; case 3: dev_info(adev->dev, @@ -218,7 +219,7 @@ int amdgpu_benchmark(struct amdgpu_device *adev, int test_number) AMDGPU_GEM_DOMAIN_GTT, AMDGPU_GEM_DOMAIN_VRAM); if (r) - return r; + goto done; } break; case 4: @@ -231,7 +232,7 @@ int amdgpu_benchmark(struct amdgpu_device *adev, int test_number) AMDGPU_GEM_DOMAIN_VRAM, AMDGPU_GEM_DOMAIN_GTT); if (r) - return r; + goto done; } break; case 5: @@ -244,7 +245,7 @@ int amdgpu_benchmark(struct amdgpu_device *adev, int test_number) AMDGPU_GEM_DOMAIN_VRAM, AMDGPU_GEM_DOMAIN_VRAM); if (r) - return r; + goto done; } break; case 6: @@ -257,7 +258,7 @@ int amdgpu_benchmark(struct amdgpu_device *adev, int test_number) AMDGPU_GEM_DOMAIN_GTT, AMDGPU_GEM_DOMAIN_VRAM); if (r) - return r; + goto done; } break; case 7: @@ -270,7 +271,7 @@ int amdgpu_benchmark(struct amdgpu_device *adev, int test_number) AMDGPU_GEM_DOMAIN_VRAM, AMDGPU_GEM_DOMAIN_GTT); if (r) - return r; + goto done; } break; case 8: @@ -283,7 +284,7 @@ int amdgpu_benchmark(struct amdgpu_device *adev, int test_number) AMDGPU_GEM_DOMAIN_VRAM, AMDGPU_GEM_DOMAIN_VRAM); if (r) - return r; + goto done; } break; @@ -292,5 +293,9 @@ int amdgpu_benchmark(struct amdgpu_device *adev, int test_number) r = -EINVAL; break; } + +done: + mutex_unlock(&adev->benchmark_mutex); + return r; } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index 0cfccea722f8..a5887754cb73 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -3548,6 +3548,7 @@ int amdgpu_device_init(struct amdgpu_device *adev, mutex_init(&adev->psp.mutex); mutex_init(&adev->notifier_lock); mutex_init(&adev->pm.stable_pstate_ctx_lock); + mutex_init(&adev->benchmark_mutex); amdgpu_device_init_apu_flags(adev); |