Skip to content

Commit 7b0af16

Browse files
committed
drm/drv: Add drmm managed registration helper for dmem cgroups.
Drivers will need to register dmem regions at probe time, so let's give them a drm-managed helper. Signed-off-by: Maarten Lankhorst <[email protected]> Acked-by: Tejun Heo <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Maxime Ripard <[email protected]>
1 parent b168ed4 commit 7b0af16

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

drivers/gpu/drm/drm_drv.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
* DEALINGS IN THE SOFTWARE.
2727
*/
2828

29+
#include <linux/cgroup_dmem.h>
2930
#include <linux/debugfs.h>
3031
#include <linux/fs.h>
3132
#include <linux/module.h>
@@ -820,6 +821,37 @@ void drm_dev_put(struct drm_device *dev)
820821
}
821822
EXPORT_SYMBOL(drm_dev_put);
822823

824+
static void drmm_cg_unregister_region(struct drm_device *dev, void *arg)
825+
{
826+
dmem_cgroup_unregister_region(arg);
827+
}
828+
829+
/**
830+
* drmm_cgroup_register_region - Register a region of a DRM device to cgroups
831+
* @dev: device for region
832+
* @region_name: Region name for registering
833+
* @size: Size of region in bytes
834+
*
835+
* This decreases the ref-count of @dev by one. The device is destroyed if the
836+
* ref-count drops to zero.
837+
*/
838+
struct dmem_cgroup_region *drmm_cgroup_register_region(struct drm_device *dev, const char *region_name, u64 size)
839+
{
840+
struct dmem_cgroup_region *region;
841+
int ret;
842+
843+
region = dmem_cgroup_register_region(size, "drm/%s/%s", dev->unique, region_name);
844+
if (IS_ERR_OR_NULL(region))
845+
return region;
846+
847+
ret = drmm_add_action_or_reset(dev, drmm_cg_unregister_region, region);
848+
if (ret)
849+
return ERR_PTR(ret);
850+
851+
return region;
852+
}
853+
EXPORT_SYMBOL_GPL(drmm_cgroup_register_region);
854+
823855
static int create_compat_control_link(struct drm_device *dev)
824856
{
825857
struct drm_minor *minor;

include/drm/drm_drv.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434

3535
#include <drm/drm_device.h>
3636

37+
struct dmem_cgroup_region;
3738
struct drm_fb_helper;
3839
struct drm_fb_helper_surface_size;
3940
struct drm_file;
@@ -438,6 +439,10 @@ void *__devm_drm_dev_alloc(struct device *parent,
438439
const struct drm_driver *driver,
439440
size_t size, size_t offset);
440441

442+
struct dmem_cgroup_region *
443+
drmm_cgroup_register_region(struct drm_device *dev,
444+
const char *region_name, u64 size);
445+
441446
/**
442447
* devm_drm_dev_alloc - Resource managed allocation of a &drm_device instance
443448
* @parent: Parent device object

0 commit comments

Comments
 (0)