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
> >>
>

Reply via email to