From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Thu, 3 Aug 2017 19:24:06 +0200 Subject: drm/amdgpu: remove superflous amdgpu_bo_kmap in the VM MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Git-commit: ec5207c9f1cf42be826b9e3b63fb9b7463ed7fab Patch-mainline: v4.14-rc1 References: FATE#326289 FATE#326079 FATE#326049 FATE#322398 FATE#326166 We now properly kmap all BOs after validation. Signed-off-by: Christian König Reviewed-by: Alex Deucher Signed-off-by: Alex Deucher Acked-by: Petr Tesarik --- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c @@ -1265,15 +1265,14 @@ void amdgpu_vm_get_entry(struct amdgpu_p * * Check if we can update the PD with a huge page. */ -static int amdgpu_vm_handle_huge_pages(struct amdgpu_pte_update_params *p, - struct amdgpu_vm_pt *entry, - struct amdgpu_vm_pt *parent, - unsigned nptes, uint64_t dst, - uint64_t flags) +static void amdgpu_vm_handle_huge_pages(struct amdgpu_pte_update_params *p, + struct amdgpu_vm_pt *entry, + struct amdgpu_vm_pt *parent, + unsigned nptes, uint64_t dst, + uint64_t flags) { bool use_cpu_update = (p->func == amdgpu_vm_cpu_set_ptes); uint64_t pd_addr, pde; - int r; /* In the case of a mixed PT the PDE must point to it*/ if (p->adev->asic_type < CHIP_VEGA10 || @@ -1290,16 +1289,13 @@ static int amdgpu_vm_handle_huge_pages(s if (entry->addr == dst && entry->huge_page == !!(flags & AMDGPU_PDE_PTE)) - return 0; + return; entry->addr = dst; entry->huge_page = !!(flags & AMDGPU_PDE_PTE); if (use_cpu_update) { - r = amdgpu_bo_kmap(parent->bo, (void *)&pd_addr); - if (r) - return r; - + pd_addr = (unsigned long)amdgpu_bo_kptr(parent->bo); pde = pd_addr + (entry - parent->entries) * 8; amdgpu_vm_cpu_set_ptes(p, pde, dst, 1, 0, flags); } else { @@ -1312,8 +1308,6 @@ static int amdgpu_vm_handle_huge_pages(s pde = pd_addr + (entry - parent->entries) * 8; amdgpu_vm_do_set_ptes(p, pde, dst, 1, 0, flags); } - - return 0; } /** @@ -1340,7 +1334,6 @@ static int amdgpu_vm_update_ptes(struct struct amdgpu_bo *pt; unsigned nptes; bool use_cpu_update = (params->func == amdgpu_vm_cpu_set_ptes); - int r; /* walk over the address space and update the page tables */ for (addr = start; addr < end; addr += nptes, @@ -1356,11 +1349,8 @@ static int amdgpu_vm_update_ptes(struct else nptes = AMDGPU_VM_PTE_COUNT(adev) - (addr & mask); - r = amdgpu_vm_handle_huge_pages(params, entry, parent, - nptes, dst, flags); - if (r) - return r; - + amdgpu_vm_handle_huge_pages(params, entry, parent, + nptes, dst, flags); if (entry->huge_page) continue;