From dc6ce4afc6e4f0d8fa2dbb83af116a45fd1a8f77 Mon Sep 17 00:00:00 2001 From: Eric Huang Date: Tue, 22 Aug 2017 12:12:12 -0400 Subject: [PATCH 1772/4131] drm/amdgpu: fix kfd event page unaccessible remove pinned and kmapped BO from validation list to fix event page kernal address invalid after memory eviction and system memory swap. Change-Id: Ifce1b126a2bdc387436284fe5e58184d02b4d122 Signed-off-by: Eric Huang --- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c index b352e8e..5c5162c 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c @@ -1657,17 +1657,25 @@ int amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel(struct kgd_dev *kgd, struct kgd_mem *mem, void **kptr) { int ret; - struct amdgpu_bo *bo; + struct amdgpu_bo *bo = mem->bo; - mutex_lock(&mem->lock); + if (amdgpu_ttm_tt_get_usermm(bo->tbo.ttm)) { + pr_err("userptr can't be mapped to kernel\n"); + return -EINVAL; + } - bo = mem->bo; + /* delete kgd_mem from kfd_bo_list to avoid re-validating + * this BO in BO's restoring after eviction. + */ + mutex_lock(&mem->process_info->lock); + + list_del_init(&mem->validate_list.head); ret = __map_bo_to_kernel(bo, AMDGPU_GEM_DOMAIN_GTT, kptr); if (!ret) mem->kptr = *kptr; - mutex_unlock(&mem->lock); + mutex_unlock(&mem->process_info->lock); return ret; } -- 2.7.4