Message ID | 20231031134059.171277-5-ishitatsuyuki@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/amdgpu: Add flag to disable implicit sync for GEM operations. | expand |
Am 31.10.23 um 14:40 schrieb Tatsuyuki Ishi: > All the state changes are handled in the TTM move callback; doing it again > here just leads to more confusion. The state move here is because we need to track which PDs/PTs are already validated and which have new locations reflected in the PDEs. With this change here you will sooner or later run into PDE corruption. > > The table update remains here because it needs to be done exactly once, > while doing it in the move callback will result it getting triggered twice, > once by the actual BO and once by the shadow BO. The table update isn't done in the move callback because you can't take the appropriate locks there. Regards, Christian. > > Signed-off-by: Tatsuyuki Ishi <ishitatsuyuki@gmail.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 7 ++----- > 1 file changed, 2 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > index 01d31891cd05..50f7cee639ac 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > @@ -495,12 +495,9 @@ int amdgpu_vm_validate_pt_bos(struct amdgpu_device *adev, struct amdgpu_vm *vm, > return r; > } > > - if (bo->tbo.type != ttm_bo_type_kernel) { > - amdgpu_vm_bo_moved(bo_base); > - } else { > + if (bo->tbo.type == ttm_bo_type_kernel) > vm->update_funcs->map_table(to_amdgpu_bo_vm(bo)); > - amdgpu_vm_bo_relocated(bo_base); > - } > + > spin_lock(&vm->status_lock); > } > spin_unlock(&vm->status_lock);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index 01d31891cd05..50f7cee639ac 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c @@ -495,12 +495,9 @@ int amdgpu_vm_validate_pt_bos(struct amdgpu_device *adev, struct amdgpu_vm *vm, return r; } - if (bo->tbo.type != ttm_bo_type_kernel) { - amdgpu_vm_bo_moved(bo_base); - } else { + if (bo->tbo.type == ttm_bo_type_kernel) vm->update_funcs->map_table(to_amdgpu_bo_vm(bo)); - amdgpu_vm_bo_relocated(bo_base); - } + spin_lock(&vm->status_lock); } spin_unlock(&vm->status_lock);
All the state changes are handled in the TTM move callback; doing it again here just leads to more confusion. The table update remains here because it needs to be done exactly once, while doing it in the move callback will result it getting triggered twice, once by the actual BO and once by the shadow BO. Signed-off-by: Tatsuyuki Ishi <ishitatsuyuki@gmail.com> --- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-)