Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

gpio: aggregator: simplify aggr_parse() with scoped bitmap

The bitmap allocated in aggr_parse() is always freed before the function
returns so use __free(bitmap) to simplify it and drop the goto label.

Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/r/20240930163207.80276-1-brgl@bgdev.pl
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>

+7 -9
+7 -9
drivers/gpio/gpio-aggregator.c
··· 65 65 { 66 66 char *args = skip_spaces(aggr->args); 67 67 char *name, *offsets, *p; 68 - unsigned long *bitmap; 69 68 unsigned int i, n = 0; 70 69 int error = 0; 71 70 72 - bitmap = bitmap_alloc(AGGREGATOR_MAX_GPIOS, GFP_KERNEL); 71 + unsigned long *bitmap __free(bitmap) = 72 + bitmap_alloc(AGGREGATOR_MAX_GPIOS, GFP_KERNEL); 73 73 if (!bitmap) 74 74 return -ENOMEM; 75 75 ··· 82 82 /* Named GPIO line */ 83 83 error = aggr_add_gpio(aggr, name, U16_MAX, &n); 84 84 if (error) 85 - goto free_bitmap; 85 + return error; 86 86 87 87 name = offsets; 88 88 continue; ··· 92 92 error = bitmap_parselist(offsets, bitmap, AGGREGATOR_MAX_GPIOS); 93 93 if (error) { 94 94 pr_err("Cannot parse %s: %d\n", offsets, error); 95 - goto free_bitmap; 95 + return error; 96 96 } 97 97 98 98 for_each_set_bit(i, bitmap, AGGREGATOR_MAX_GPIOS) { 99 99 error = aggr_add_gpio(aggr, name, i, &n); 100 100 if (error) 101 - goto free_bitmap; 101 + return error; 102 102 } 103 103 104 104 args = next_arg(args, &name, &p); ··· 106 106 107 107 if (!n) { 108 108 pr_err("No GPIOs specified\n"); 109 - error = -EINVAL; 109 + return -EINVAL; 110 110 } 111 111 112 - free_bitmap: 113 - bitmap_free(bitmap); 114 - return error; 112 + return 0; 115 113 } 116 114 117 115 static ssize_t new_device_store(struct device_driver *driver, const char *buf,