From: Jiri Pirko <jiri@xxxxxxxxxx> With introduction of __free() macro using cleanup infrastructure, it will very likely become quite common to see following pattern: type *var __free(kfree) = kzalloc(sizeof(*var), GFP_KERNEL); To follow the CLASS() flow from cleanup.h, introduce a simple macro KZALLOC_FREE() to wrap this over and allow the same flow. Show an example usage in gpio-sim driver. Signed-off-by: Jiri Pirko <jiri@xxxxxxxxxx> --- drivers/gpio/gpio-sim.c | 3 +-- include/linux/slab.h | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/gpio/gpio-sim.c b/drivers/gpio/gpio-sim.c index c4106e37e6db..997237b3d80c 100644 --- a/drivers/gpio/gpio-sim.c +++ b/drivers/gpio/gpio-sim.c @@ -1496,8 +1496,7 @@ gpio_sim_config_make_device_group(struct config_group *group, const char *name) { int id; - struct gpio_sim_device *dev __free(kfree) = kzalloc(sizeof(*dev), - GFP_KERNEL); + KZALLOC_FREE(struct gpio_sim_device *, dev, GFP_KERNEL); if (!dev) return ERR_PTR(-ENOMEM); diff --git a/include/linux/slab.h b/include/linux/slab.h index b5f5ee8308d0..baee6acd58d3 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h @@ -711,6 +711,9 @@ static inline __alloc_size(1) void *kzalloc(size_t size, gfp_t flags) return kmalloc(size, flags | __GFP_ZERO); } +#define KZALLOC_FREE(_type, var, _gfp_t) \ + _type var __free(kfree) = kzalloc(sizeof(*var), _gfp_t) + /** * kzalloc_node - allocate zeroed memory from a particular memory node. * @size: how many bytes of memory are required. -- 2.44.0