drm/amdgpu: add a benchmark mutex
authorAlex Deucher <alexander.deucher@amd.com>
Fri, 18 Feb 2022 22:12:11 +0000 (17:12 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 23 Feb 2022 19:02:50 +0000 (14:02 -0500)
To avoid multiple runs in parallel to avoid mixing results.

Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu.h
drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c

index 66d556fc17effb99eab35876250c8e162c1ee76c..c736c30e0a0a206799cf623fa83cf8fc104c1ee0 100644 (file)
@@ -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)
index 49af23f0a0371d9125c5e9f9a50ea026e4147072..9973b6266a3d8ab01f0ecd60f9f48cb29aa88c3b 100644 (file)
@@ -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;
 }
index 0cfccea722f8843e8b8086ea71d7fa8b97897498..a5887754cb737361787cc3d2dfbdbaced819a2b3 100644 (file)
@@ -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);