[PATCH] drm/gpuvm: Let drm_gpuvm_bo_put() report when the vm_bo object is destroyed
Boris Brezillon
boris.brezillon at collabora.com
Tue Dec 5 10:45:21 UTC 2023
On Tue, 5 Dec 2023 02:46:32 +0100
Danilo Krummrich <dakr at redhat.com> wrote:
> On 12/4/23 16:14, Boris Brezillon wrote:
> > Some users need to release resources attached to the vm_bo object when
> > it's destroyed. In Panthor's case, we need to release the pin ref so
> > BO pages can be returned to the system when all GPU mappings are gone.
> >
> > This could be done through a custom drm_gpuvm::vm_bo_free() hook, but
> > this has all sort of locking implications that would force us to expose
> > a drm_gem_shmem_unpin_locked() helper, not to mention the fact that
> > having a ::vm_bo_free() implementation without a ::vm_bo_alloc() one
> > seems odd. So let's keep things simple, and extend drm_gpuvm_bo_put()
> > to report when the object is destroyed.
> >
> > Signed-off-by: Boris Brezillon <boris.brezillon at collabora.com>
>
> Reviewed-by: Danilo Krummrich <dakr at redhat.com>
Queued to drm-misc-next.
>
> > ---
> > drivers/gpu/drm/drm_gpuvm.c | 8 ++++++--
> > include/drm/drm_gpuvm.h | 2 +-
> > 2 files changed, 7 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/drm_gpuvm.c b/drivers/gpu/drm/drm_gpuvm.c
> > index 54f5e8851de5..ae13e2d63637 100644
> > --- a/drivers/gpu/drm/drm_gpuvm.c
> > +++ b/drivers/gpu/drm/drm_gpuvm.c
> > @@ -1502,14 +1502,18 @@ drm_gpuvm_bo_destroy(struct kref *kref)
> > * hold the dma-resv or driver specific GEM gpuva lock.
> > *
> > * This function may only be called from non-atomic context.
> > + *
> > + * Returns: true if vm_bo was destroyed, false otherwise.
> > */
> > -void
> > +bool
> > drm_gpuvm_bo_put(struct drm_gpuvm_bo *vm_bo)
> > {
> > might_sleep();
> >
> > if (vm_bo)
> > - kref_put(&vm_bo->kref, drm_gpuvm_bo_destroy);
> > + return !!kref_put(&vm_bo->kref, drm_gpuvm_bo_destroy);
> > +
> > + return false;
> > }
> > EXPORT_SYMBOL_GPL(drm_gpuvm_bo_put);
> >
> > diff --git a/include/drm/drm_gpuvm.h b/include/drm/drm_gpuvm.h
> > index f94fec9a8517..7cc41a7d86d5 100644
> > --- a/include/drm/drm_gpuvm.h
> > +++ b/include/drm/drm_gpuvm.h
> > @@ -738,7 +738,7 @@ drm_gpuvm_bo_get(struct drm_gpuvm_bo *vm_bo)
> > return vm_bo;
> > }
> >
> > -void drm_gpuvm_bo_put(struct drm_gpuvm_bo *vm_bo);
> > +bool drm_gpuvm_bo_put(struct drm_gpuvm_bo *vm_bo);
> >
> > struct drm_gpuvm_bo *
> > drm_gpuvm_bo_find(struct drm_gpuvm *gpuvm,
>
More information about the dri-devel
mailing list