aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1649-drm-amdgpu-Clean-up-page-table-validation-code.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1649-drm-amdgpu-Clean-up-page-table-validation-code.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1649-drm-amdgpu-Clean-up-page-table-validation-code.patch126
1 files changed, 126 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1649-drm-amdgpu-Clean-up-page-table-validation-code.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1649-drm-amdgpu-Clean-up-page-table-validation-code.patch
new file mode 100644
index 00000000..001f9202
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1649-drm-amdgpu-Clean-up-page-table-validation-code.patch
@@ -0,0 +1,126 @@
+From 530c33b5144b08953548905e18c0e07ce47e8291 Mon Sep 17 00:00:00 2001
+From: Felix Kuehling <Felix.Kuehling@amd.com>
+Date: Thu, 30 Mar 2017 14:00:52 -0400
+Subject: [PATCH 1649/4131] drm/amdgpu: Clean up page table validation code
+
+Reduce code duplication and rename confusingly similar function names
+validate_pt_pd_bos and validate_pd_pt_bos.
+
+Change-Id: I13c305bbf003ce2764214ef9078761a21a3a54e0
+Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 48 ++++++++----------------
+ 1 file changed, 16 insertions(+), 32 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+index 2aa65f7..b0527bd 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+@@ -426,9 +426,10 @@ static int amdgpu_amdkfd_validate(void *param, struct amdgpu_bo *bo)
+ return amdgpu_amdkfd_bo_validate(bo, p->domain, p->wait);
+ }
+
+-static int validate_pt_pd_bos(struct amdgpu_device *adev, struct amdgpu_vm *vm)
++static int vm_validate_pt_pd_bos(struct amdgpu_vm *vm)
+ {
+ struct amdgpu_bo *pd = vm->root.bo;
++ struct amdgpu_device *adev = amdgpu_ttm_adev(pd->tbo.bdev);
+ struct amdgpu_vm_parser param;
+ int ret;
+
+@@ -437,18 +438,20 @@ static int validate_pt_pd_bos(struct amdgpu_device *adev, struct amdgpu_vm *vm)
+
+ ret = amdgpu_vm_validate_pt_bos(adev, vm, amdgpu_amdkfd_validate,
+ &param);
+-
+ if (ret) {
+ pr_err("amdgpu: failed to validate PT BOs\n");
+- } else {
+- ret = amdgpu_amdkfd_validate(&param, pd);
+- if (ret)
+- pr_err("amdgpu: failed to validate PD\n");
++ return ret;
++ }
++
++ ret = amdgpu_amdkfd_validate(&param, pd);
++ if (ret) {
++ pr_err("amdgpu: failed to validate PD\n");
++ return ret;
+ }
+
+ vm->last_eviction_counter = atomic64_read(&adev->num_evictions);
+
+- return ret;
++ return 0;
+ }
+
+ static void add_kgd_mem_to_kfd_bo_list(struct kgd_mem *mem,
+@@ -989,7 +992,7 @@ static int map_bo_to_gpuvm(struct amdgpu_device *adev,
+ /* PT BOs may be created during amdgpu_vm_bo_map() call,
+ * so we have to validate the newly created PT BOs.
+ */
+- ret = validate_pt_pd_bos(adev, entry->bo_va->vm);
++ ret = vm_validate_pt_pd_bos(entry->bo_va->vm);
+ if (ret != 0) {
+ pr_err("validate_pt_pd_bos() failed\n");
+ return ret;
+@@ -1872,35 +1875,16 @@ int amdgpu_amdkfd_gpuvm_export_dmabuf(struct kgd_dev *kgd, void *vm,
+ return 0;
+ }
+
+-static int validate_pd_pt_bos(struct amdkfd_process_info *process_info)
++static int process_validate_vms(struct amdkfd_process_info *process_info)
+ {
+ struct amdkfd_vm *peer_vm;
+- struct amdgpu_vm_parser param;
+ int ret;
+
+- param.domain = AMDGPU_GEM_DOMAIN_VRAM;
+- param.wait = false;
+-
+ list_for_each_entry(peer_vm, &process_info->vm_list_head,
+ vm_list_node) {
+- struct amdgpu_bo *pd_bo = peer_vm->base.root.bo;
+- struct amdgpu_device *adev = amdgpu_ttm_adev(pd_bo->tbo.bdev);
+-
+- ret = amdgpu_amdkfd_bo_validate(pd_bo, pd_bo->prefered_domains,
+- false);
+- if (ret) {
+- pr_debug("Validate PD failed. Try again\n");
+- return ret;
+- }
+-
+- ret = amdgpu_vm_validate_pt_bos(adev, &peer_vm->base,
+- amdgpu_amdkfd_validate, &param);
+- if (ret) {
+- pr_debug("Validate PTs failed. Try again\n");
++ ret = vm_validate_pt_pd_bos(&peer_vm->base);
++ if (ret)
+ return ret;
+- }
+- peer_vm->base.last_eviction_counter =
+- atomic64_read(&adev->num_evictions);
+ }
+
+ return 0;
+@@ -2079,7 +2063,7 @@ static int validate_invalid_user_pages(struct amdkfd_process_info *process_info)
+
+ amdgpu_sync_create(&sync);
+
+- ret = validate_pd_pt_bos(process_info);
++ ret = process_validate_vms(process_info);
+ if (ret)
+ goto unreserve_out;
+
+@@ -2310,7 +2294,7 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info)
+ amdgpu_sync_create(&ctx.sync);
+
+ /* Validate PDs and PTs */
+- ret = validate_pd_pt_bos(process_info);
++ ret = process_validate_vms(process_info);
+ if (ret)
+ goto validate_map_fail;
+
+--
+2.7.4
+