On Fri, Jun 26, 2026 at 2:01 PM Christian König <[email protected]> wrote: > > For a short moment during alloc/free the userptr BO is not part of his VM, > so bo->vm_bo can be NULL. > > Keep a reference to the VM root PD as parent of the userptr BO so that > we can always use that to wait for all submissions of the VM instead of > only the one involving the userptr BO. > > Signed-off-by: Christian König <[email protected]> > Fixes: 5cd5f99b7b9b ("drm/amdgpu: fix waiting for all submissions for > userptrs")
Closes: https://gitlab.freedesktop.org/drm/amd/-/work_items/5399 > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 1 + > drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.c | 3 +-- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c > index 28f89ae8ca74..686be2bb8c37 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c > @@ -535,6 +535,7 @@ int amdgpu_gem_userptr_ioctl(struct drm_device *dev, void > *data, > bo = gem_to_amdgpu_bo(gobj); > bo->preferred_domains = AMDGPU_GEM_DOMAIN_GTT; > bo->allowed_domains = AMDGPU_GEM_DOMAIN_GTT; > + bo->parent = amdgpu_bo_ref(fpriv->vm.root.bo); Do you need an unref to match this? Alex > r = amdgpu_ttm_tt_set_userptr(&bo->tbo, args->addr, args->flags); > if (r) > goto release_object; > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.c > index b38788228d0b..eaf02f90fddf 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.c > @@ -67,7 +67,6 @@ static bool amdgpu_hmm_invalidate_gfx(struct > mmu_interval_notifier *mni, > { > struct amdgpu_bo *bo = container_of(mni, struct amdgpu_bo, notifier); > struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev); > - struct amdgpu_bo *vm_root = bo->vm_bo->vm->root.bo; > long r; > > if (!mmu_notifier_range_blockable(range)) > @@ -78,7 +77,7 @@ static bool amdgpu_hmm_invalidate_gfx(struct > mmu_interval_notifier *mni, > mmu_interval_set_seq(mni, cur_seq); > > amdgpu_vm_bo_invalidate(bo, false); > - r = dma_resv_wait_timeout(vm_root->tbo.base.resv, > + r = dma_resv_wait_timeout(bo->parent->tbo.base.resv, > DMA_RESV_USAGE_BOOKKEEP, false, > MAX_SCHEDULE_TIMEOUT); > mutex_unlock(&adev->notifier_lock); > -- > 2.43.0 >
