On Sun, Jun 28, 2026 at 11:12 AM Christian König <[email protected]> wrote: > > > > On 6/26/26 21:31, Alex Deucher wrote: > > 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? > > That's in amdgpu_bo_destroy(), we use bo->parent for multiple other things > already.
Thanks, might be useful to add a comment to that effect. With the Closes tag, patch is: Reviewed-by: Alex Deucher <[email protected]> > > Christian. > > > > > 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 > >> >
