|
26 | 26 | * DEALINGS IN THE SOFTWARE.
|
27 | 27 | */
|
28 | 28 |
|
| 29 | +#include <linux/cgroup_dmem.h> |
29 | 30 | #include <linux/debugfs.h>
|
30 | 31 | #include <linux/fs.h>
|
31 | 32 | #include <linux/module.h>
|
@@ -820,6 +821,37 @@ void drm_dev_put(struct drm_device *dev)
|
820 | 821 | }
|
821 | 822 | EXPORT_SYMBOL(drm_dev_put);
|
822 | 823 |
|
| 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 | + |
823 | 855 | static int create_compat_control_link(struct drm_device *dev)
|
824 | 856 | {
|
825 | 857 | struct drm_minor *minor;
|
|
0 commit comments