[U-Boot] [PATCH v3] gpio: dwapb_gpio: Change to use devm_kcalloc()

Change to use managed resource function devm_kcalloc(), so it will auto free memory when driver is removed.
Signed-off-by: Ley Foon Tan ley.foon.tan@intel.com
--- v3: - Remove goto and return directly.
v2: - Remove free() function. --- drivers/gpio/dwapb_gpio.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-)
diff --git a/drivers/gpio/dwapb_gpio.c b/drivers/gpio/dwapb_gpio.c index 0f6574d..68836a7 100644 --- a/drivers/gpio/dwapb_gpio.c +++ b/drivers/gpio/dwapb_gpio.c @@ -171,8 +171,7 @@ static int gpio_dwapb_bind(struct udevice *dev) if (!fdtdec_get_bool(blob, node, "gpio-controller")) continue;
- plat = NULL; - plat = calloc(1, sizeof(*plat)); + plat = devm_kcalloc(dev, 1, sizeof(*plat), GFP_KERNEL); if (!plat) return -ENOMEM;
@@ -181,23 +180,17 @@ static int gpio_dwapb_bind(struct udevice *dev) plat->pins = fdtdec_get_int(blob, node, "snps,nr-gpios", 0); plat->name = fdt_stringlist_get(blob, node, "bank-name", 0, NULL); - if (ret) - goto err;
ret = device_bind(dev, dev->driver, plat->name, plat, -1, &subdev); if (ret) - goto err; + return ret;
dev_set_of_offset(subdev, node); bank++; }
return 0; - -err: - free(plat); - return ret; }
static int gpio_dwapb_remove(struct udevice *dev)

On 09/19/2018 10:26 AM, Ley Foon Tan wrote:
Change to use managed resource function devm_kcalloc(), so it will auto free memory when driver is removed.
Signed-off-by: Ley Foon Tan ley.foon.tan@intel.com
v3:
- Remove goto and return directly.
v2:
- Remove free() function.
drivers/gpio/dwapb_gpio.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-)
diff --git a/drivers/gpio/dwapb_gpio.c b/drivers/gpio/dwapb_gpio.c index 0f6574d..68836a7 100644 --- a/drivers/gpio/dwapb_gpio.c +++ b/drivers/gpio/dwapb_gpio.c @@ -171,8 +171,7 @@ static int gpio_dwapb_bind(struct udevice *dev) if (!fdtdec_get_bool(blob, node, "gpio-controller")) continue;
plat = NULL;
plat = calloc(1, sizeof(*plat));
if (!plat) return -ENOMEM;plat = devm_kcalloc(dev, 1, sizeof(*plat), GFP_KERNEL);
@@ -181,23 +180,17 @@ static int gpio_dwapb_bind(struct udevice *dev) plat->pins = fdtdec_get_int(blob, node, "snps,nr-gpios", 0); plat->name = fdt_stringlist_get(blob, node, "bank-name", 0, NULL);
if (ret)
goto err;
ret = device_bind(dev, dev->driver, plat->name, plat, -1, &subdev);
btw. on DW GPIO with multiple banks, if this bind fails for any bank but the first, the driver won't clean up properly ;-)
if (ret)
goto err;
return ret;
dev_set_of_offset(subdev, node); bank++; }
return 0;
-err:
- free(plat);
- return ret;
}
static int gpio_dwapb_remove(struct udevice *dev)
Applied, thanks
participants (2)
-
Ley Foon Tan
-
Marek Vasut