[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(¶ms, vm, pt, entry);
> + r = amdgpu_vm_update_pde(¶ms, vm, entry);
> if (r)
> goto error;
> }
More information about the amd-gfx
mailing list