XenevaOS
Loading...
Searching...
No Matches
drm_managed.h
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0
2
3#ifndef _DRM_MANAGED_H_
4#define _DRM_MANAGED_H_
5
6#include <linux/gfp.h>
7#include <linux/overflow.h>
8#include <linux/types.h>
9
10struct drm_device;
11struct mutex;
12
13typedef void (*drmres_release_t)(struct drm_device *dev, void *res);
14
25#define drmm_add_action(dev, action, data) \
26 __drmm_add_action(dev, action, data, #action)
27
29 drmres_release_t action,
30 void *data, const char *name);
31
41#define drmm_add_action_or_reset(dev, action, data) \
42 __drmm_add_action_or_reset(dev, action, data, #action)
43
45 drmres_release_t action,
46 void *data, const char *name);
47
49 drmres_release_t action,
50 void *data);
51
52void *drmm_kmalloc(struct drm_device *dev, size_t size, gfp_t gfp) __malloc;
53
64static inline void *drmm_kzalloc(struct drm_device *dev, size_t size, gfp_t gfp)
65{
66 return drmm_kmalloc(dev, size, gfp | __GFP_ZERO);
67}
68
80static inline void *drmm_kmalloc_array(struct drm_device *dev,
81 size_t n, size_t size, gfp_t flags)
82{
83 size_t bytes;
84
85 if (unlikely(check_mul_overflow(n, size, &bytes)))
86 return NULL;
87
88 return drmm_kmalloc(dev, bytes, flags);
89}
90
102static inline void *drmm_kcalloc(struct drm_device *dev,
103 size_t n, size_t size, gfp_t flags)
104{
105 return drmm_kmalloc_array(dev, n, size, flags | __GFP_ZERO);
106}
107
108char *drmm_kstrdup(struct drm_device *dev, const char *s, gfp_t gfp);
109
110void drmm_kfree(struct drm_device *dev, void *data);
111
112void __drmm_mutex_release(struct drm_device *dev, void *res);
113
125#define drmm_mutex_init(dev, lock) ({ \
126 mutex_init(lock); \
127 drmm_add_action_or_reset(dev, __drmm_mutex_release, lock); \
128}) \
129
131
144#define drmm_alloc_ordered_workqueue(dev, fmt, flags, args...) \
145 ({ \
146 struct workqueue_struct *wq = alloc_ordered_workqueue(fmt, flags, ##args); \
147 wq ? ({ \
148 int ret = drmm_add_action_or_reset(dev, __drmm_workqueue_release, wq); \
149 ret ? ERR_PTR(ret) : wq; \
150 }) : ERR_PTR(-ENOMEM); \
151 })
152
153#endif
uint8_t flags
Definition virtio.h:0
#define NULL
Definition actypes.h:561
#define unlikely(x)
Definition compiler.h:30
#define __must_check
Definition compiler.h:114
#define __malloc
Definition compiler_attributes.h:171
size_t size
Definition drm_bridge.h:1299
struct drm_crtc struct drm_plane struct drm_plane const struct drm_crtc_funcs const char * name
Definition drm_crtc.h:1242
char * drmm_kstrdup(struct drm_device *dev, const char *s, gfp_t gfp)
void drmm_kfree(struct drm_device *dev, void *data)
void(* drmres_release_t)(struct drm_device *dev, void *res)
Definition drm_managed.h:13
void drmm_release_action(struct drm_device *dev, drmres_release_t action, void *data)
int __must_check __drmm_add_action(struct drm_device *dev, drmres_release_t action, void *data, const char *name)
void __drmm_mutex_release(struct drm_device *dev, void *res)
void __drmm_workqueue_release(struct drm_device *device, void *wq)
int __must_check __drmm_add_action_or_reset(struct drm_device *dev, drmres_release_t action, void *data, const char *name)
void * drmm_kmalloc(struct drm_device *dev, size_t size, gfp_t gfp) __malloc
const struct device * dev
Definition drm_print.h:519
#define __GFP_ZERO
Definition gfp_types.h:290
void * data
Definition kthread.h:30
unsigned int gfp_t
Definition kernel.h:56
#define check_mul_overflow(a, b, d)
Definition overflow.h:153
Definition fs.h:255
Definition drm_device.h:75
Definition mutex.h:59