Message ID | 1537345593-44594-1-git-send-email-ley.foon.tan@intel.com |
---|---|
State | Accepted |
Commit | 86d56a5da5b2d50879c1ea955c8e1eed5d27fa7d |
Delegated to: | Marek Vasut |
Headers | show |
Series | [U-Boot,v3] gpio: dwapb_gpio: Change to use devm_kcalloc() | expand |
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)); > + 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); 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
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)
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(-)