drm/amdgpu/mes: implement resuming all gangs
authorJack Xiao <Jack.Xiao@amd.com>
Fri, 27 Mar 2020 08:43:28 +0000 (16:43 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 4 May 2022 14:43:51 +0000 (10:43 -0400)
Implement resuming all gangs.

Signed-off-by: Jack Xiao <Jack.Xiao@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h

index e64f2a4b5a3b91189c35fdaf31c97dee3b587b35..b58af81f04a323fd3eaa99cdefbecfad0bfa82b1 100644 (file)
@@ -471,3 +471,28 @@ int amdgpu_mes_suspend(struct amdgpu_device *adev)
        mutex_unlock(&adev->mes.mutex);
        return 0;
 }
+
+int amdgpu_mes_resume(struct amdgpu_device *adev)
+{
+       struct idr *idp;
+       struct amdgpu_mes_process *process;
+       struct amdgpu_mes_gang *gang;
+       struct mes_resume_gang_input input;
+       int r, pasid;
+
+       mutex_lock(&adev->mes.mutex);
+
+       idp = &adev->mes.pasid_idr;
+
+       idr_for_each_entry(idp, process, pasid) {
+               list_for_each_entry(gang, &process->gang_list, list) {
+                       r = adev->mes.funcs->resume_gang(&adev->mes, &input);
+                       if (r)
+                               DRM_ERROR("failed to resume pasid %d gangid %d",
+                                        pasid, gang->gang_id);
+               }
+       }
+
+       mutex_unlock(&adev->mes.mutex);
+       return 0;
+}
index 8c26528b06ffddcf4ba93a29a9cf1dd891b2de4a..c7fddb24ce51a21da398870f57bdc3d8fd86e7cf 100644 (file)
@@ -232,5 +232,6 @@ int amdgpu_mes_add_gang(struct amdgpu_device *adev, int pasid,
 int amdgpu_mes_remove_gang(struct amdgpu_device *adev, int gang_id);
 
 int amdgpu_mes_suspend(struct amdgpu_device *adev);
+int amdgpu_mes_resume(struct amdgpu_device *adev);
 
 #endif /* __AMDGPU_MES_H__ */