The change looks reasonable to me. Acked-by: Felix Kuehling <Felix.Kuehling@xxxxxxx> 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@xxxxxxx> > --- > 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; > } _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx