diff options
| author | Christian König <christian.koenig@amd.com> | 2018-08-30 16:55:54 +0300 | 
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2018-09-12 00:30:16 +0300 | 
| commit | ba79fde47b9b3a04932a5385e5530616a77d4536 (patch) | |
| tree | 8825294fcecb300ebd7a6fa3c85f695a0a9c618f /drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | |
| parent | 7893499e3022542f6522847837487019ea83f142 (diff) | |
| download | linux-ba79fde47b9b3a04932a5385e5530616a77d4536.tar.xz | |
drm/amdgpu: add amdgpu_vm_pt_parent helper
Add a function to get the parent of a PD/PT.
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Reviewed-by: Junwei Zhang <Jerry.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 36 | 
1 files changed, 23 insertions, 13 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index f5a960079705..92c34e4290a8 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c @@ -338,6 +338,24 @@ static void amdgpu_vm_bo_base_init(struct amdgpu_vm_bo_base *base,  }  /** + * amdgpu_vm_pt_parent - get the parent page directory + * + * @pt: child page table + * + * Helper to get the parent entry for the child page table. NULL if we are at + * the root page directory. + */ +static struct amdgpu_vm_pt *amdgpu_vm_pt_parent(struct amdgpu_vm_pt *pt) +{ +	struct amdgpu_bo *parent = pt->base.bo->parent; + +	if (!parent) +		return NULL; + +	return list_first_entry(&parent->va, struct amdgpu_vm_pt, base.bo_list); +} + +/**   * amdgpu_vm_get_pd_bo - add the VM PD to a validation list   *   * @vm: vm providing the BOs @@ -1206,24 +1224,16 @@ restart:  	}  	while (!list_empty(&vm->relocated)) { -		struct amdgpu_vm_bo_base *bo_base, *parent;  		struct amdgpu_vm_pt *pt, *entry; -		struct amdgpu_bo *bo; -		bo_base = list_first_entry(&vm->relocated, -					   struct amdgpu_vm_bo_base, -					   vm_status); -		amdgpu_vm_bo_idle(bo_base); +		entry = list_first_entry(&vm->relocated, struct amdgpu_vm_pt, +					 base.vm_status); +		amdgpu_vm_bo_idle(&entry->base); -		bo = bo_base->bo->parent; -		if (!bo) +		pt = amdgpu_vm_pt_parent(entry); +		if (!pt)  			continue; -		parent = list_first_entry(&bo->va, struct amdgpu_vm_bo_base, -					  bo_list); -		pt = container_of(parent, struct amdgpu_vm_pt, base); -		entry = container_of(bo_base, struct amdgpu_vm_pt, base); -  		amdgpu_vm_update_pde(¶ms, vm, pt, entry);  		if (!vm->use_cpu_for_update && | 
