[PATCH] drm/amdgpu: don't put the root PD into the relocated list

Kuehling, Felix Felix.Kuehling at amd.com
Thu Mar 28 19:23:31 UTC 2019


The change looks reasonable to me. Acked-by: Felix Kuehling 
<Felix.Kuehling at amd.com>

I just don't understand why the root PD is special and handled 
differently from other PDs and PTs.

Regards,
   Felix

On 2019-03-27 6:39 a.m., Christian König wrote:
> Instead of skipping the root PD while processing the relocated list just never
> put it on the list in the first place.
>
> This avoids walking the list all together when the root PD is the only entry
> and so also avoids trying to submit a zero sized IB to the SDMA.
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 18 ++++++++----------
>   1 file changed, 8 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index af1a7020c3ab..5f615d63e2e3 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -305,7 +305,7 @@ static void amdgpu_vm_bo_base_init(struct amdgpu_vm_bo_base *base,
>   		return;
>   
>   	vm->bulk_moveable = false;
> -	if (bo->tbo.type == ttm_bo_type_kernel)
> +	if (bo->tbo.type == ttm_bo_type_kernel && bo->parent)
>   		amdgpu_vm_bo_relocated(base);
>   	else
>   		amdgpu_vm_bo_idle(base);
> @@ -671,7 +671,10 @@ int amdgpu_vm_validate_pt_bos(struct amdgpu_device *adev, struct amdgpu_vm *vm,
>   				if (r)
>   					break;
>   			}
> -			amdgpu_vm_bo_relocated(bo_base);
> +			if (bo->parent)
> +				amdgpu_vm_bo_relocated(bo_base);
> +			else
> +				amdgpu_vm_bo_idle(bo_base);
>   		}
>   	}
>   
> @@ -1184,16 +1187,15 @@ uint64_t amdgpu_vm_map_gart(const dma_addr_t *pages_addr, uint64_t addr)
>    *
>    * @param: parameters for the update
>    * @vm: requested vm
> - * @parent: parent directory
>    * @entry: entry to update
>    *
>    * Makes sure the requested entry in parent is up to date.
>    */
>   static int amdgpu_vm_update_pde(struct amdgpu_vm_update_params *params,
>   				struct amdgpu_vm *vm,
> -				struct amdgpu_vm_pt *parent,
>   				struct amdgpu_vm_pt *entry)
>   {
> +	struct amdgpu_vm_pt *parent = amdgpu_vm_pt_parent(entry);
>   	struct amdgpu_bo *bo = parent->base.bo, *pbo;
>   	uint64_t pde, pt, flags;
>   	unsigned level;
> @@ -1255,17 +1257,13 @@ int amdgpu_vm_update_directories(struct amdgpu_device *adev,
>   		return r;
>   
>   	while (!list_empty(&vm->relocated)) {
> -		struct amdgpu_vm_pt *pt, *entry;
> +		struct amdgpu_vm_pt *entry;
>   
>   		entry = list_first_entry(&vm->relocated, struct amdgpu_vm_pt,
>   					 base.vm_status);
>   		amdgpu_vm_bo_idle(&entry->base);
>   
> -		pt = amdgpu_vm_pt_parent(entry);
> -		if (!pt)
> -			continue;
> -
> -		r = amdgpu_vm_update_pde(&params, vm, pt, entry);
> +		r = amdgpu_vm_update_pde(&params, vm, entry);
>   		if (r)
>   			goto error;
>   	}


More information about the amd-gfx mailing list