Helper components that hold a drm device reference also need to hold
a module reference on the (sub)driver that owns the DRM device.
This can be undesirable since it's not possible to rmmod the module
without unbinding the driver first.
Provide means to relax that requirement and then relax it for the
drm/xe driver: Keep a device-count in the xe driver (Patch 2) and add a
function to drm to wait to ensure any device release callbacks are
done executing. (Patch 1).
The remaining requirement is that whatever module calls drm_dev_put()
needs to ensure it stays in memory until that function returns.
That is true also for the unload-protected driver itself
At unload time it needs to ensure that any code inside the module
itself ending up calling drm_dev_put() is waited for before
unloading the module. This change doesn't protect against that.
As an example, this series would allow dropping the module reference
held by drm_pagemap if the modules owning the drm device is
sufficently protected.
Thomas Hellström (2):
drm: Provide a drm_dev_release_barrier() function to wait for device
release callbacks
drm/xe: Don't unload the driver until all drm devices are freed
drivers/gpu/drm/drm_drv.c | 25 +++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_device.c | 19 +++++++++++++++++++
drivers/gpu/drm/xe/xe_device.h | 2 ++
drivers/gpu/drm/xe/xe_module.c | 5 ++++-
include/drm/drm_drv.h | 1 +
5 files changed, 51 insertions(+), 1 deletion(-)
--
2.53.0