Am 31.07.2017 um 17:24 schrieb Felix Kuehling: > Hi Christian, > > If I'm reading this correctly, now you're only binding page directories, > but not the leaf page tables. Is that intentional? You are not reading this correctly I think. Leave page tables don have parent->entries==NULL and we check for that condition after the bind as far as I can see. Regards, Christian. > > Regards, > Felix > > > On 17-07-29 07:32 AM, Christian König wrote: >> From: Christian König <christian.koenig at amd.com> >> >> No need to do this on every CS. >> >> v2: remove all other bind, reorder code >> >> Signed-off-by: Christian König <christian.koenig at amd.com> >> --- >> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 22 ++++++++-------------- >> 1 file changed, 8 insertions(+), 14 deletions(-) >> >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c >> index a375135..0308bb4 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c >> @@ -165,6 +165,14 @@ static int amdgpu_vm_validate_level(struct amdgpu_vm_pt *parent, >> unsigned i; >> int r; >> >> + if (parent->bo->shadow) { >> + struct amdgpu_bo *shadow = parent->bo->shadow; >> + >> + r = amdgpu_ttm_bind(&shadow->tbo, &shadow->tbo.mem); >> + if (r) >> + return r; >> + } >> + >> if (use_cpu_for_update) { >> r = amdgpu_bo_kmap(parent->bo, NULL); >> if (r) >> @@ -1030,11 +1038,6 @@ static int amdgpu_vm_update_level(struct amdgpu_device *adev, >> >> params.func = amdgpu_vm_cpu_set_ptes; >> } else { >> - if (shadow) { >> - r = amdgpu_ttm_bind(&shadow->tbo, &shadow->tbo.mem); >> - if (r) >> - return r; >> - } >> ring = container_of(vm->entity.sched, struct amdgpu_ring, >> sched); >> >> @@ -1070,15 +1073,6 @@ static int amdgpu_vm_update_level(struct amdgpu_device *adev, >> if (bo == NULL) >> continue; >> >> - if (bo->shadow) { >> - struct amdgpu_bo *pt_shadow = bo->shadow; >> - >> - r = amdgpu_ttm_bind(&pt_shadow->tbo, >> - &pt_shadow->tbo.mem); >> - if (r) >> - return r; >> - } >> - >> pt = amdgpu_bo_gpu_offset(bo); >> pt = amdgpu_gart_get_vm_pde(adev, pt); >> if (parent->entries[pt_idx].addr == pt ||