From: Dmitry Baryshkov <[email protected]> The kzalloc_obj() and kzalloc_objs() functions have proven to be useful and are widely used by the reset of the kernel. Implement drm_device-managed versions of those macros to mix the nice interface with the automatic freeing of the pointers.
Note: the original macros accept optional GFP_foo arguments. They are skipped for now, making all allocations use GFP_KERNEL. If necessary, support for overriding the GFP type can be introduced later. v2: Made use of 'p' vs 'P' consistent, add typecast of returned pointer. Signed-off-by: Dmitry Baryshkov <[email protected]> Signed-off-by: John Harrison <[email protected]> Reviewed-by: John Harrison <[email protected]> --- include/drm/drm_managed.h | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/include/drm/drm_managed.h b/include/drm/drm_managed.h index 72d0d68be226..4614d49748cf 100644 --- a/include/drm/drm_managed.h +++ b/include/drm/drm_managed.h @@ -105,6 +105,29 @@ static inline void *drmm_kcalloc(struct drm_device *dev, return drmm_kmalloc_array(dev, n, size, flags | __GFP_ZERO); } +/** + * drmm_kzalloc_objs - &drm_device-managed kzalloc_objs() + * @dev: DRM device + * @P: Variable or type to allocate an array of + * @count: How many elements in the array + * + * Returns: newly allocated pointer to the zeroed array of @P on success, or + * NULL on failure. + */ +#define drmm_kzalloc_objs(dev, P, count) \ + ((typeof(P) *) drmm_kcalloc(dev, count, sizeof(typeof(P)), GFP_KERNEL)) + +/** + * drmm_kzalloc_obj - &drm_device-managed kzalloc_obj() + * @dev: DRM device + * @P: Variable or type to allocate + * + * Returns: newly allocated pointer to zeroed instance of @P on success, + * or NULL on failure. + */ +#define drmm_kzalloc_obj(dev, P) \ + drmm_kzalloc_objs(dev, P, 1) + char *drmm_kstrdup(struct drm_device *dev, const char *s, gfp_t gfp); void drmm_kfree(struct drm_device *dev, void *data); -- 2.43.0
