diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4145-drm-amdkfd-Fix-and-simplify-sync-object-handling-for.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/4145-drm-amdkfd-Fix-and-simplify-sync-object-handling-for.patch | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4145-drm-amdkfd-Fix-and-simplify-sync-object-handling-for.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4145-drm-amdkfd-Fix-and-simplify-sync-object-handling-for.patch new file mode 100644 index 00000000..8dc10249 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4145-drm-amdkfd-Fix-and-simplify-sync-object-handling-for.patch @@ -0,0 +1,100 @@ +From fb9d4b3b795048b0b9793508f284c313410eafa8 Mon Sep 17 00:00:00 2001 +From: Felix Kuehling <Felix.Kuehling@amd.com> +Date: Tue, 13 Mar 2018 16:05:59 -0400 +Subject: [PATCH 4145/5725] drm/amdkfd: Fix and simplify sync object handling + for KFD + +The adev parameter in amdgpu_sync_fence and amdgpu_sync_resv is only +needed for updating sync->last_vm_update. This breaks if different +adevs ars passed to calls for the same sync object. + +Always pass NULL for calls from KFD because sync objects used for +KFD don't belong to any particular device, and KFD doesn't need the +sync->last_vm_update fence. + +This fixes kernel log warnings on multi-GPU systems after recent +changes in amdgpu_amdkfd_gpuvm_restore_process_bos. + +Change-Id: I5739c5761f65bdd0e6dd749210960df1472be9df +Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 28 +++++------------------- + 1 file changed, 5 insertions(+), 23 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +index 769fdcf..9061f44 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +@@ -417,23 +417,6 @@ static int vm_validate_pt_pd_bos(struct amdgpu_vm *vm) + return 0; + } + +-static int sync_vm_fence(struct amdgpu_device *adev, struct amdgpu_sync *sync, +- struct dma_fence *f) +-{ +- int ret = amdgpu_sync_fence(adev, sync, f, false); +- +- /* Sync objects can't handle multiple GPUs (contexts) updating +- * sync->last_vm_update. Fortunately we don't need it for +- * KFD's purposes, so we can just drop that fence. +- */ +- if (sync->last_vm_update) { +- dma_fence_put(sync->last_vm_update); +- sync->last_vm_update = NULL; +- } +- +- return ret; +-} +- + static int vm_update_pds(struct amdgpu_vm *vm, struct amdgpu_sync *sync) + { + struct amdgpu_bo *pd = vm->root.base.bo; +@@ -444,7 +427,7 @@ static int vm_update_pds(struct amdgpu_vm *vm, struct amdgpu_sync *sync) + if (ret) + return ret; + +- return sync_vm_fence(adev, sync, vm->last_update); ++ return amdgpu_sync_fence(NULL, sync, vm->last_update, false); + } + + /* add_bo_to_vm - Add a BO to a VM +@@ -850,7 +833,7 @@ static int unmap_bo_from_gpuvm(struct amdgpu_device *adev, + /* Add the eviction fence back */ + amdgpu_bo_fence(pd, &vm->process_info->eviction_fence->base, true); + +- sync_vm_fence(adev, sync, bo_va->last_pt_update); ++ amdgpu_sync_fence(NULL, sync, bo_va->last_pt_update, false); + + return 0; + } +@@ -875,7 +858,7 @@ static int update_gpuvm_pte(struct amdgpu_device *adev, + return ret; + } + +- return sync_vm_fence(adev, sync, bo_va->last_pt_update); ++ return amdgpu_sync_fence(NULL, sync, bo_va->last_pt_update, false); + } + + static int map_bo_to_gpuvm(struct amdgpu_device *adev, +@@ -953,7 +936,7 @@ static int process_sync_pds_resv(struct amdkfd_process_info *process_info, + vm_list_node) { + struct amdgpu_bo *pd = peer_vm->root.base.bo; + +- ret = amdgpu_sync_resv(amdgpu_ttm_adev(pd->tbo.bdev), ++ ret = amdgpu_sync_resv(NULL, + sync, pd->tbo.resv, + AMDGPU_FENCE_OWNER_UNDEFINED, false); + if (ret) +@@ -2329,8 +2312,7 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence **ef) + pr_debug("Memory eviction: Validate BOs failed. Try again\n"); + goto validate_map_fail; + } +- ret = amdgpu_sync_fence(amdgpu_ttm_adev(bo->tbo.bdev), +- &sync_obj, bo->tbo.moving, false); ++ ret = amdgpu_sync_fence(NULL, &sync_obj, bo->tbo.moving, false); + if (ret) { + pr_debug("Memory eviction: Sync BO fence failed. Try again\n"); + goto validate_map_fail; +-- +2.7.4 + |