aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu
diff options
context:
space:
mode:
authorShaoyun Liu <Shaoyun.Liu@amd.com>2018-07-11 22:32:55 -0400
committerOded Gabbay <oded.gabbay@gmail.com>2018-07-11 22:32:55 -0400
commit5c6dd71e597f33d517710affe3b8d8de253bc86d (patch)
tree57caaa5627f6978faf7ab1ef7a9e664ab42f244e /drivers/gpu/drm/amd/amdgpu
parente3b7a967743c2e10457442ffafcb715a41255f28 (diff)
drm/amdgpu: Call KFD reset handlers during GPU reset
Signed-off-by: Shaoyun Liu <Shaoyun.Liu@amd.com> Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com> Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c20
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_device.c5
3 files changed, 29 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
index e3ed08dca7b7..f3a3aba08c2f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
@@ -243,6 +243,26 @@ int amdgpu_amdkfd_resume(struct amdgpu_device *adev)
243 return r; 243 return r;
244} 244}
245 245
246int amdgpu_amdkfd_pre_reset(struct amdgpu_device *adev)
247{
248 int r = 0;
249
250 if (adev->kfd)
251 r = kgd2kfd->pre_reset(adev->kfd);
252
253 return r;
254}
255
256int amdgpu_amdkfd_post_reset(struct amdgpu_device *adev)
257{
258 int r = 0;
259
260 if (adev->kfd)
261 r = kgd2kfd->post_reset(adev->kfd);
262
263 return r;
264}
265
246int alloc_gtt_mem(struct kgd_dev *kgd, size_t size, 266int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
247 void **mem_obj, uint64_t *gpu_addr, 267 void **mem_obj, uint64_t *gpu_addr,
248 void **cpu_ptr) 268 void **cpu_ptr)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
index 3dc76d9b4d12..7dc551b8f682 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
@@ -126,6 +126,10 @@ struct kfd2kgd_calls *amdgpu_amdkfd_gfx_9_0_get_functions(void);
126 126
127bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid); 127bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid);
128 128
129int amdgpu_amdkfd_pre_reset(struct amdgpu_device *adev);
130
131int amdgpu_amdkfd_post_reset(struct amdgpu_device *adev);
132
129/* Shared API */ 133/* Shared API */
130int alloc_gtt_mem(struct kgd_dev *kgd, size_t size, 134int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
131 void **mem_obj, uint64_t *gpu_addr, 135 void **mem_obj, uint64_t *gpu_addr,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index ec53d8f96d06..b895584bb99f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -3307,6 +3307,9 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
3307 atomic_inc(&adev->gpu_reset_counter); 3307 atomic_inc(&adev->gpu_reset_counter);
3308 adev->in_gpu_reset = 1; 3308 adev->in_gpu_reset = 1;
3309 3309
3310 /* Block kfd */
3311 amdgpu_amdkfd_pre_reset(adev);
3312
3310 /* block TTM */ 3313 /* block TTM */
3311 resched = ttm_bo_lock_delayed_workqueue(&adev->mman.bdev); 3314 resched = ttm_bo_lock_delayed_workqueue(&adev->mman.bdev);
3312 3315
@@ -3363,6 +3366,8 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
3363 dev_info(adev->dev, "GPU reset(%d) succeeded!\n",atomic_read(&adev->gpu_reset_counter)); 3366 dev_info(adev->dev, "GPU reset(%d) succeeded!\n",atomic_read(&adev->gpu_reset_counter));
3364 } 3367 }
3365 3368
3369 /*unlock kfd */
3370 amdgpu_amdkfd_post_reset(adev);
3366 amdgpu_vf_error_trans_all(adev); 3371 amdgpu_vf_error_trans_all(adev);
3367 adev->in_gpu_reset = 0; 3372 adev->in_gpu_reset = 0;
3368 mutex_unlock(&adev->lock_reset); 3373 mutex_unlock(&adev->lock_reset);