[PATCH 8/8] drm/amdgpu: rework page directory filling

Felix Kuehling felix.kuehling at amd.com
Thu Aug 10 18:33:56 UTC 2017


On 2017-08-10 10:50 AM, Christian König wrote:
> @@ -1185,9 +1185,31 @@ int amdgpu_vm_update_directories(struct amdgpu_device *adev,
>  {
>  	int r;
>  
> -	r = amdgpu_vm_update_level(adev, vm, &vm->root, 0);
> -	if (r)
> -		amdgpu_vm_invalidate_level(&vm->root);
> +	spin_lock(&vm->status_lock);
> +	while (!list_empty(&vm->relocated)) {
> +		struct amdgpu_vm_bo_base *bo_base, *parent;
> +		struct amdgpu_vm_pt *pt;
> +		struct amdgpu_bo *bo;
> +
> +		bo_base = list_first_entry(&vm->relocated,
> +					   struct amdgpu_vm_bo_base,
> +					   vm_status);
> +		spin_unlock(&vm->status_lock);
> +
> +		bo = bo_base->bo->parent;

For the root page directory I think parent bo->parent will be NULL. Can
the root page directory be relocated. If yes, this needs to be handled
as a special case here.

Regards,
  Felix

> +		parent = list_first_entry(&bo->va, struct amdgpu_vm_bo_base,
> +					  bo_list);
> +		pt = container_of(parent, struct amdgpu_vm_pt, base);
> +
> +		r = amdgpu_vm_update_level(adev, vm, pt);
> +		if (r) {
> +			amdgpu_vm_invalidate_level(vm, &vm->root);
> +			break;
> +		}
> +
> +		spin_lock(&vm->status_lock);
> +	}
> +	spin_unlock(&vm->status_lock);
>  
>  	if (vm->use_cpu_for_update) {
>  		/* Flush HDP */



More information about the amd-gfx mailing list