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>
This commit is contained in:
parent
e3b7a96774
commit
5c6dd71e59
@ -243,6 +243,26 @@ int amdgpu_amdkfd_resume(struct amdgpu_device *adev)
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int amdgpu_amdkfd_pre_reset(struct amdgpu_device *adev)
|
||||||
|
{
|
||||||
|
int r = 0;
|
||||||
|
|
||||||
|
if (adev->kfd)
|
||||||
|
r = kgd2kfd->pre_reset(adev->kfd);
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
int amdgpu_amdkfd_post_reset(struct amdgpu_device *adev)
|
||||||
|
{
|
||||||
|
int r = 0;
|
||||||
|
|
||||||
|
if (adev->kfd)
|
||||||
|
r = kgd2kfd->post_reset(adev->kfd);
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
|
int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
|
||||||
void **mem_obj, uint64_t *gpu_addr,
|
void **mem_obj, uint64_t *gpu_addr,
|
||||||
void **cpu_ptr)
|
void **cpu_ptr)
|
||||||
|
@ -126,6 +126,10 @@ struct kfd2kgd_calls *amdgpu_amdkfd_gfx_9_0_get_functions(void);
|
|||||||
|
|
||||||
bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid);
|
bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid);
|
||||||
|
|
||||||
|
int amdgpu_amdkfd_pre_reset(struct amdgpu_device *adev);
|
||||||
|
|
||||||
|
int amdgpu_amdkfd_post_reset(struct amdgpu_device *adev);
|
||||||
|
|
||||||
/* Shared API */
|
/* Shared API */
|
||||||
int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
|
int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
|
||||||
void **mem_obj, uint64_t *gpu_addr,
|
void **mem_obj, uint64_t *gpu_addr,
|
||||||
|
@ -3307,6 +3307,9 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
|
|||||||
atomic_inc(&adev->gpu_reset_counter);
|
atomic_inc(&adev->gpu_reset_counter);
|
||||||
adev->in_gpu_reset = 1;
|
adev->in_gpu_reset = 1;
|
||||||
|
|
||||||
|
/* Block kfd */
|
||||||
|
amdgpu_amdkfd_pre_reset(adev);
|
||||||
|
|
||||||
/* block TTM */
|
/* block TTM */
|
||||||
resched = ttm_bo_lock_delayed_workqueue(&adev->mman.bdev);
|
resched = ttm_bo_lock_delayed_workqueue(&adev->mman.bdev);
|
||||||
|
|
||||||
@ -3363,6 +3366,8 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
|
|||||||
dev_info(adev->dev, "GPU reset(%d) succeeded!\n",atomic_read(&adev->gpu_reset_counter));
|
dev_info(adev->dev, "GPU reset(%d) succeeded!\n",atomic_read(&adev->gpu_reset_counter));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*unlock kfd */
|
||||||
|
amdgpu_amdkfd_post_reset(adev);
|
||||||
amdgpu_vf_error_trans_all(adev);
|
amdgpu_vf_error_trans_all(adev);
|
||||||
adev->in_gpu_reset = 0;
|
adev->in_gpu_reset = 0;
|
||||||
mutex_unlock(&adev->lock_reset);
|
mutex_unlock(&adev->lock_reset);
|
||||||
|
Loading…
Reference in New Issue
Block a user