On Wed, 23 Oct 2024, Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> wrote: > From: Maxime Ripard <mripard@xxxxxxxxxx> > > Drivers will need to register a cgroup device at probe time, so let's > give them a drm-managed helper. > > Signed-off-by: Maxime Ripard <mripard@xxxxxxxxxx> > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/drm_drv.c | 21 +++++++++++++++++++++ > include/drm/drm_drv.h | 4 ++++ > 2 files changed, 25 insertions(+) > > diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c > index c2c172eb25df7..251d1d69b09c5 100644 > --- a/drivers/gpu/drm/drm_drv.c > +++ b/drivers/gpu/drm/drm_drv.c > @@ -26,6 +26,7 @@ > * DEALINGS IN THE SOFTWARE. > */ > > +#include <linux/cgroup_dev.h> > #include <linux/debugfs.h> > #include <linux/fs.h> > #include <linux/module.h> > @@ -820,6 +821,26 @@ void drm_dev_put(struct drm_device *dev) > } > EXPORT_SYMBOL(drm_dev_put); > > +static inline void drmm_cg_unregister_device(struct drm_device *dev, void *arg) Nitpick, inline in .c files is mostly useless, just use static and let the compiler do its job. BR, Jani. > +{ > + dev_cgroup_unregister_device(arg); > +} > + > +int drmm_cgroup_register_device(struct drm_device *dev, > + struct dev_cgroup_device *cgdev) > +{ > + int ret; > + char dev_name[32]; > + > + snprintf(dev_name, sizeof(dev_name), "drm/%s", dev->unique); > + ret = dev_cgroup_register_device(cgdev, dev_name); > + if (ret) > + return ret; > + > + return drmm_add_action_or_reset(dev, drmm_cg_unregister_device, cgdev); > +} > +EXPORT_SYMBOL_GPL(drmm_cgroup_register_device); > + > static int create_compat_control_link(struct drm_device *dev) > { > struct drm_minor *minor; > diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h > index 1bbbcb8e2d231..3e83c7ce7f2d0 100644 > --- a/include/drm/drm_drv.h > +++ b/include/drm/drm_drv.h > @@ -34,6 +34,7 @@ > > #include <drm/drm_device.h> > > +struct dev_cgroup_device; > struct drm_fb_helper; > struct drm_fb_helper_surface_size; > struct drm_file; > @@ -438,6 +439,9 @@ void *__devm_drm_dev_alloc(struct device *parent, > const struct drm_driver *driver, > size_t size, size_t offset); > > +int drmm_cgroup_register_device(struct drm_device *dev, > + struct dev_cgroup_device *cgdev); > + > /** > * devm_drm_dev_alloc - Resource managed allocation of a &drm_device instance > * @parent: Parent device object -- Jani Nikula, Intel