From 530c33b5144b08953548905e18c0e07ce47e8291 Mon Sep 17 00:00:00 2001 From: Felix Kuehling 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 --- 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, ¶m); - if (ret) { pr_err("amdgpu: failed to validate PT BOs\n"); - } else { - ret = amdgpu_amdkfd_validate(¶m, pd); - if (ret) - pr_err("amdgpu: failed to validate PD\n"); + return ret; + } + + ret = amdgpu_amdkfd_validate(¶m, 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, ¶m); - 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