aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1240-drm-amdgpu-Add-helper-to-wait-for-BO-fences-using-a-.patch
diff options
context:
space:
mode:
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-.patch125
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
+