Am 25.06.2018 um 11:07 schrieb Michel Dänzer: > From: Michel Dänzer <michel.daenzer at amd.com> > > Without this, there could not be enough slots, which could trigger the > BUG_ON in reservation_object_add_shared_fence. > > v2: > * Jump to the error label instead of returning directly (Jerry Zhang) Well good catch, but NAK that is not the right solution to the issue. amdgpu_vm_update_directories() is only called by two places, the first one is amdgpu_bo_vm_update_pte() and the second amdgpu_gem_va_update_vm(). In both cases the directory is reserved using ttm_eu_reserve_buffers() with "entry->tv.shared = true;". What most likely needs to be done instead is to call reservation_object_reserve_shared() after all the VM operations in amdgpu_bo_vm_update_pte() to make sure that we still have one additional slot for the command submission. Regards, Christian. > > Cc: stable at vger.kernel.org > Bugzilla: https://bugs.freedesktop.org/106418 > Reported-by: mikhail.v.gavrilov at gmail.com > Signed-off-by: Michel Dänzer <michel.daenzer at amd.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > index 590db78b8c72..579bcc33d544 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c > @@ -1111,6 +1111,10 @@ int amdgpu_vm_update_directories(struct amdgpu_device *adev, > struct amdgpu_ring *ring; > struct dma_fence *fence; > > + r = reservation_object_reserve_shared(root->tbo.resv); > + if (r) > + goto error; > + > ring = container_of(vm->entity.sched, struct amdgpu_ring, > sched); >