The change looks reasonable to me. Acked-by: Felix Kuehling 
<[email protected]>

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 <[email protected]>
> ---
>   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;
>       }
_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to