aboutsummaryrefslogtreecommitdiffstats
path: root/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1520-drm-amdkfd-Sync-with-PD-PT-fence-after-VM-update.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1520-drm-amdkfd-Sync-with-PD-PT-fence-after-VM-update.patch')
-rw-r--r--meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1520-drm-amdkfd-Sync-with-PD-PT-fence-after-VM-update.patch215
1 files changed, 0 insertions, 215 deletions
diff --git a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1520-drm-amdkfd-Sync-with-PD-PT-fence-after-VM-update.patch b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1520-drm-amdkfd-Sync-with-PD-PT-fence-after-VM-update.patch
deleted file mode 100644
index 4e88ad22..00000000
--- a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1520-drm-amdkfd-Sync-with-PD-PT-fence-after-VM-update.patch
+++ /dev/null
@@ -1,215 +0,0 @@
-From 4958a4ae62cc8e1a70ca2877b51cf7bff91d2669 Mon Sep 17 00:00:00 2001
-From: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
-Date: Wed, 13 Jul 2016 13:24:37 -0400
-Subject: [PATCH 1520/4131] drm/amdkfd: Sync with PD/PT fence after VM update
-
-Sync only to these fences. It not required to wait on BO fences.
-
-Change-Id: I24e8899e4b75ba6b73a114cdeda903c078aebc02
-Signed-off-by: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
----
- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 55 ++++++++++++++++--------
- 1 file changed, 36 insertions(+), 19 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
-index ad61cb6..2abce72 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
-@@ -154,6 +154,10 @@ static int try_pin_bo(struct amdgpu_bo *bo, uint32_t domain)
- ret = amdgpu_bo_pin(bo, domain, NULL);
- if (ret != 0)
- goto error;
-+ /* Since TTM pipelines evictions and moves, wait for bo
-+ * validate to complete.
-+ */
-+ ttm_bo_wait(&bo->tbo, false, false);
- } else {
- /* amdgpu_bo_pin doesn't support userptr. Therefore we
- * can use the bo->pin_count for our version of
-@@ -467,6 +471,7 @@ struct bo_vm_reservation_context {
- struct amdgpu_bo_list_entry *vm_pd;
- struct ww_acquire_ctx ticket;
- struct list_head list, duplicates;
-+ struct amdgpu_sync sync;
- bool reserved;
- };
-
-@@ -487,6 +492,7 @@ static int reserve_bo_and_vm(struct kgd_mem *mem,
-
- ctx->reserved = false;
- ctx->n_vms = 1;
-+ amdgpu_sync_create(&ctx->sync);
-
- INIT_LIST_HEAD(&ctx->list);
- INIT_LIST_HEAD(&ctx->duplicates);
-@@ -548,6 +554,7 @@ static int reserve_bo_and_cond_vms(struct kgd_mem *mem,
- ctx->reserved = false;
- ctx->n_vms = 0;
- ctx->vm_pd = NULL;
-+ amdgpu_sync_create(&ctx->sync);
-
- INIT_LIST_HEAD(&ctx->list);
- INIT_LIST_HEAD(&ctx->duplicates);
-@@ -608,22 +615,15 @@ static int reserve_bo_and_cond_vms(struct kgd_mem *mem,
- static void unreserve_bo_and_vms(struct bo_vm_reservation_context *ctx,
- bool wait)
- {
-- if (wait) {
-- struct ttm_validate_buffer *entry;
-- int ret;
-+ if (wait)
-+ amdgpu_sync_wait(&ctx->sync);
-
-- list_for_each_entry(entry, &ctx->list, head) {
-- ret = ttm_bo_wait(entry->bo, false, false);
-- if (ret != 0)
-- pr_err("amdkfd: Failed to wait for PT/PD update (err == %d)\n",
-- ret);
-- }
-- }
- if (ctx->reserved)
- ttm_eu_backoff_reservation(&ctx->ticket, &ctx->list);
- if (ctx->vm_pd) {
- kfree(ctx->vm_pd);
- }
-+ amdgpu_sync_free(&ctx->sync);
- ctx->reserved = false;
- ctx->vm_pd = NULL;
- }
-@@ -710,7 +710,8 @@ static int update_user_pages(struct kgd_mem *mem, struct mm_struct *mm,
- }
-
- static int map_bo_to_gpuvm(struct amdgpu_device *adev, struct amdgpu_bo *bo,
-- struct amdgpu_bo_va *bo_va, uint32_t domain)
-+ struct amdgpu_bo_va *bo_va, uint32_t domain,
-+ struct amdgpu_sync *sync)
- {
- struct amdgpu_vm *vm;
- int ret;
-@@ -742,6 +743,8 @@ static int map_bo_to_gpuvm(struct amdgpu_device *adev, struct amdgpu_bo *bo,
- goto err_unpin_bo;
- }
-
-+ amdgpu_sync_fence(adev, sync, vm->page_directory_fence);
-+
- /*
- * The previously "released" BOs are really released and their VAs are
- * removed from PT. This function is called here because it requires
-@@ -760,7 +763,9 @@ static int map_bo_to_gpuvm(struct amdgpu_device *adev, struct amdgpu_bo *bo,
- goto err_unpin_bo;
- }
-
-- ret = amdgpu_vm_clear_invalids(adev, vm, NULL);
-+ amdgpu_sync_fence(adev, sync, bo_va->last_pt_update);
-+
-+ ret = amdgpu_vm_clear_invalids(adev, vm, sync);
- if (ret != 0) {
- pr_err("amdkfd: Failed to radeon_vm_clear_invalids\n");
- goto err_failed_to_vm_clear_invalids;
-@@ -773,6 +778,7 @@ static int map_bo_to_gpuvm(struct amdgpu_device *adev, struct amdgpu_bo *bo,
-
- err_failed_to_vm_clear_invalids:
- amdgpu_vm_bo_update(adev, bo_va, NULL);
-+ amdgpu_sync_fence(adev, sync, bo_va->last_pt_update);
- err_unpin_bo:
- /* PTs are not needed to be unpinned*/
- unpin_bo(bo);
-@@ -1029,7 +1035,8 @@ int amdgpu_amdkfd_gpuvm_map_memory_to_gpu(
- pr_debug("amdkfd: Trying to map VA 0x%llx to vm %p\n",
- mem->data2.va, vm);
-
-- ret = map_bo_to_gpuvm(adev, bo, entry->bo_va, domain);
-+ ret = map_bo_to_gpuvm(adev, bo, entry->bo_va, domain,
-+ &ctx.sync);
- if (ret != 0) {
- pr_err("amdkfd: Failed to map radeon bo to gpuvm\n");
- goto map_bo_to_gpuvm_failed;
-@@ -1190,7 +1197,8 @@ int amdgpu_amdkfd_gpuvm_get_vm_fault_info(struct kgd_dev *kgd,
-
- static int unmap_bo_from_gpuvm(struct amdgpu_device *adev,
- struct amdgpu_bo *bo,
-- struct amdgpu_bo_va *bo_va)
-+ struct amdgpu_bo_va *bo_va,
-+ struct amdgpu_sync *sync)
- {
- struct amdgpu_vm *vm = bo_va->vm;
-
-@@ -1203,8 +1211,9 @@ static int unmap_bo_from_gpuvm(struct amdgpu_device *adev,
-
- /* Update the page tables - Remove the mapping from bo_va */
- amdgpu_vm_bo_update(adev, bo_va, NULL);
-+ amdgpu_sync_fence(adev, sync, bo_va->last_pt_update);
-
-- amdgpu_vm_clear_invalids(adev, vm, NULL);
-+ amdgpu_vm_clear_invalids(adev, vm, sync);
-
- /* Unpin BO*/
- unpin_bo(bo);
-@@ -1281,7 +1290,7 @@ int amdgpu_amdkfd_gpuvm_unmap_memory_from_gpu(
- mem->data2.bo->tbo.mem.size);
-
- ret = unmap_bo_from_gpuvm(adev, mem->data2.bo,
-- entry->bo_va);
-+ entry->bo_va, &ctx.sync);
- if (ret == 0) {
- entry->is_mapped = false;
- } else {
-@@ -1604,7 +1613,8 @@ int amdgpu_amdkfd_gpuvm_evict_mem(struct kgd_mem *mem, struct mm_struct *mm)
- goto fail;
- }
-
-- r = unmap_bo_from_gpuvm(adev, mem->data2.bo, entry->bo_va);
-+ r = unmap_bo_from_gpuvm(adev, mem->data2.bo,
-+ entry->bo_va, &ctx.sync);
- if (r != 0) {
- pr_err("failed unmap va 0x%llx\n",
- mem->data2.va);
-@@ -1691,7 +1701,8 @@ int amdgpu_amdkfd_gpuvm_restore_mem(struct kgd_mem *mem, struct mm_struct *mm)
- continue;
- }
-
-- r = map_bo_to_gpuvm(adev, mem->data2.bo, entry->bo_va, domain);
-+ r = map_bo_to_gpuvm(adev, mem->data2.bo, entry->bo_va, domain,
-+ &ctx.sync);
- if (unlikely(r != 0)) {
- pr_err("Failed to map BO to gpuvm\n");
- entry->is_mapped = false;
-@@ -1812,6 +1823,8 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *m_vm)
- list_cut_position(&ctx.list, &master_vm->kfd_bo_list,
- &last_pd_bo_entry->tv.head);
-
-+ amdgpu_sync_create(&ctx.sync);
-+
- /* Validate PDs and PTs */
- list_for_each_entry(entry, &ctx.list, tv.head) {
- struct amdgpu_bo *bo = entry->robj;
-@@ -1864,7 +1877,8 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *m_vm)
- ret = map_bo_to_gpuvm((struct amdgpu_device *)
- bo_va_entry->kgd_dev,
- bo, bo_va_entry->bo_va,
-- domain);
-+ domain,
-+ &ctx.sync);
- if (ret) {
- pr_debug("Memory eviction: Map failed. Try again\n");
- goto validate_map_fail;
-@@ -1872,6 +1886,8 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *m_vm)
- }
- }
-
-+ amdgpu_sync_wait(&ctx.sync);
-+
- /* Wait for validate to finish and attach new eviction fence */
- list_for_each_entry(mem, &master_vm->kfd_bo_list,
- data2.bo_list_entry.tv.head) {
-@@ -1884,6 +1900,7 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *m_vm)
- /* Add PDs to kfd_bo_list for unreserve */
- list_splice_init(&ctx.list, &master_vm->kfd_bo_list);
- ttm_eu_backoff_reservation(&ctx.ticket, &master_vm->kfd_bo_list);
-+ amdgpu_sync_free(&ctx.sync);
- ttm_reserve_fail:
- /* Restore kfd_bo_list */
- list_cut_position(&ctx.list, &master_vm->kfd_bo_list,
---
-2.7.4
-