diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1240-drm-amdgpu-Add-helper-to-wait-for-BO-fences-using-a-.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/1240-drm-amdgpu-Add-helper-to-wait-for-BO-fences-using-a-.patch | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1240-drm-amdgpu-Add-helper-to-wait-for-BO-fences-using-a-.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1240-drm-amdgpu-Add-helper-to-wait-for-BO-fences-using-a-.patch new file mode 100644 index 00000000..1e286b92 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1240-drm-amdgpu-Add-helper-to-wait-for-BO-fences-using-a-.patch @@ -0,0 +1,125 @@ +From 937fb7cb8994c9dc9484fe86cb3f0c7ba960dc29 Mon Sep 17 00:00:00 2001 +From: Felix Kuehling <Felix.Kuehling@amd.com> +Date: Mon, 4 Feb 2019 17:46:35 -0500 +Subject: [PATCH 1240/2940] drm/amdgpu: Add helper to wait for BO fences using + a sync object +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Creates a temporary sync object to wait for the BO reservation. This +generalizes amdgpu_vm_wait_pd. + +Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com> +Reviewed-by: Christian König <christian.koenig@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 24 +++++++++++++++++ + drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 1 + + drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 30 +++------------------- + 3 files changed, 28 insertions(+), 27 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +index b55e5d3d6198..3565a7d9bb27 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +@@ -1317,6 +1317,30 @@ void amdgpu_bo_fence(struct amdgpu_bo *bo, struct dma_fence *fence, + reservation_object_add_excl_fence(resv, fence); + } + ++/** ++ * amdgpu_sync_wait_resv - Wait for BO reservation fences ++ * ++ * @bo: buffer object ++ * @owner: fence owner ++ * @intr: Whether the wait is interruptible ++ * ++ * Returns: ++ * 0 on success, errno otherwise. ++ */ ++int amdgpu_bo_sync_wait(struct amdgpu_bo *bo, void *owner, bool intr) ++{ ++ struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev); ++ struct amdgpu_sync sync; ++ int r; ++ ++ amdgpu_sync_create(&sync); ++ amdgpu_sync_resv(adev, &sync, bo->tbo.resv, owner, false); ++ r = amdgpu_sync_wait(&sync, intr); ++ amdgpu_sync_free(&sync); ++ ++ return r; ++} ++ + /** + * amdgpu_bo_gpu_offset - return GPU offset of bo + * @bo: amdgpu object for which we query the offset +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h +index f86acdf3ef39..888aced96b39 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h +@@ -270,6 +270,7 @@ void amdgpu_bo_move_notify(struct ttm_buffer_object *bo, + int amdgpu_bo_fault_reserve_notify(struct ttm_buffer_object *bo); + void amdgpu_bo_fence(struct amdgpu_bo *bo, struct dma_fence *fence, + bool shared); ++int amdgpu_bo_sync_wait(struct amdgpu_bo *bo, void *owner, bool intr); + u64 amdgpu_bo_gpu_offset(struct amdgpu_bo *bo); + int amdgpu_bo_validate(struct amdgpu_bo *bo); + int amdgpu_bo_restore_shadow(struct amdgpu_bo *shadow, +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +index 3441fdfe6dac..3121e375d2e0 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +@@ -1311,31 +1311,6 @@ static void amdgpu_vm_cpu_set_ptes(struct amdgpu_pte_update_params *params, + } + } + +- +-/** +- * amdgpu_vm_wait_pd - Wait for PT BOs to be free. +- * +- * @adev: amdgpu_device pointer +- * @vm: related vm +- * @owner: fence owner +- * +- * Returns: +- * 0 on success, errno otherwise. +- */ +-static int amdgpu_vm_wait_pd(struct amdgpu_device *adev, struct amdgpu_vm *vm, +- void *owner) +-{ +- struct amdgpu_sync sync; +- int r; +- +- amdgpu_sync_create(&sync); +- amdgpu_sync_resv(adev, &sync, vm->root.base.bo->tbo.resv, owner, false); +- r = amdgpu_sync_wait(&sync, true); +- amdgpu_sync_free(&sync); +- +- return r; +-} +- + /** + * amdgpu_vm_update_func - helper to call update function + * +@@ -1430,7 +1405,8 @@ int amdgpu_vm_update_directories(struct amdgpu_device *adev, + params.adev = adev; + + if (vm->use_cpu_for_update) { +- r = amdgpu_vm_wait_pd(adev, vm, AMDGPU_FENCE_OWNER_VM); ++ r = amdgpu_bo_sync_wait(vm->root.base.bo, ++ AMDGPU_FENCE_OWNER_VM, true); + if (unlikely(r)) + return r; + +@@ -1755,7 +1731,7 @@ static int amdgpu_vm_bo_update_mapping(struct amdgpu_device *adev, + /* Wait for PT BOs to be idle. PTs share the same resv. object + * as the root PD BO + */ +- r = amdgpu_vm_wait_pd(adev, vm, owner); ++ r = amdgpu_bo_sync_wait(vm->root.base.bo, owner, true); + if (unlikely(r)) + return r; + +-- +2.17.1 + |