Re: [PATCH] drm/gpuvm: take refcount on DRM device
From: Thomas Hellström
Date: Mon Apr 20 2026 - 14:02:21 EST
On Mon, 2026-04-20 at 17:08 +0200, Danilo Krummrich wrote:
> On Mon Apr 20, 2026 at 11:28 AM CEST, Thomas Hellström wrote:
> > I agree with your reasoning here, but current fact is that most (if
> > not
> > all) holders of a drm device reference (files, pagemaps, dma-bufs)
> > currently also hold a module reference to protect against this, and
> > drm_gpuvm would be an outlier.
>
> I'm not convinced; if the DRM device has the requirement to not
> outlive the
> module it is associated with, then the DRM device code has to take
> care of this
> requirement, and not every caller of drm_dev_get().
>
> Besides that, if GPUVM holds the module reference count on behalf of
> the DRM
> device, it has the same effect that you rightfully point out below --
> it breaks
> rmmod.
>
> > To fix this properly (lifting that requirement) one could introduce
> > a
> > drm device count in the module and have the module exit function
> > wait
> > for it to become zero, *and* that the code that did the last
> > decrement
> > finished executing.
> >
> > https://patchwork.freedesktop.org/patch/712146/?series=163298&rev=1
>
> This looks like a reasonable fix to me. And it makes me conclude that
> we
> basically agree on everything. :)
Yes, unless we'd want to do a similar wait for gpuvms before returning
from the close() callback: If we assume all GPUVMs are tied to an open
drm file, that would conceptually be nicer IMO but I agree if gpuvm
drivers implement something like the above per-driver device count,
that would be unnecessary.
Thanks,
Thomas
>
> Regarding the reference count in the meantime, it remains that
> omitting it does
> not solve the underlying problem, i.e. I still think it is
> orthogonal.
>
> > Or one could also have the drm device hold a reference count on the
> > driver module, but that would block unloading without previous
> > unbind
> > which is not typical driver behaviour and would likely be seen as a
> > regression.