[PATCH 2/5] gpio/omap: Use devm_ API and add request_mem_region
DebBarma, Tarun Kanti
tarun.kanti at ti.com
Thu Feb 16 02:11:16 EST 2012
On Thu, Feb 16, 2012 at 12:05 PM, Grant Likely
<grant.likely at secretlab.ca> wrote:
> On Thu, Feb 16, 2012 at 11:11:52AM +0530, DebBarma, Tarun Kanti wrote:
>> Hi Benoit,
>>
>> On Wed, Feb 15, 2012 at 9:34 PM, Benoit Cousson <b-cousson at ti.com> wrote:
>> > Replace the regular kzalloc and ioremap with the devm_ equivalent
>> > to simplify error handling.
>> >
>> > Add the missing devm_request_mem_region to reserve the region used
>> > by the driver.
>> >
>> > Signed-off-by: Benoit Cousson <b-cousson at ti.com>
>> > Cc: Tarun Kanti DebBarma <tarun.kanti at ti.com>
>> > ---
>> > drivers/gpio/gpio-omap.c | 35 +++++++++++++++--------------------
>> > 1 files changed, 15 insertions(+), 20 deletions(-)
>> >
>> > diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
>> > index a0c3e03..c3a9dc8 100644
>> > --- a/drivers/gpio/gpio-omap.c
>> > +++ b/drivers/gpio/gpio-omap.c
>> > @@ -19,7 +19,7 @@
>> > #include <linux/err.h>
>> > #include <linux/clk.h>
>> > #include <linux/io.h>
>> > -#include <linux/slab.h>
>> > +#include <linux/device.h>
>> > #include <linux/pm_runtime.h>
>> > #include <linux/pm.h>
>> >
>> > @@ -1052,23 +1052,19 @@ static int __devinit omap_gpio_probe(struct platform_device *pdev)
>> > struct gpio_bank *bank;
>> > int ret = 0;
>> >
>> > - if (!dev->platform_data) {
>> > - ret = -EINVAL;
>> > - goto err_exit;
>> > - }
>> > + if (!dev->platform_data)
>> > + return -EINVAL;
>> >
>> > - bank = kzalloc(sizeof(struct gpio_bank), GFP_KERNEL);
>> > + bank = devm_kzalloc(&pdev->dev, sizeof(struct gpio_bank), GFP_KERNEL);
>> > if (!bank) {
>> > dev_err(dev, "Memory alloc failed\n");
>> > - ret = -ENOMEM;
>> > - goto err_exit;
>> > + return -ENOMEM;
>> > }
>> >
>> > res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
>> > if (unlikely(!res)) {
>> > dev_err(dev, "Invalid IRQ resource\n");
>> > - ret = -ENODEV;
>> > - goto err_free;
>> > + return -ENODEV;
>> How is the memory allocated to 'bank' getting freed before return -ENODEV?
>
> The magic of devm_*() functions. Anything allocated by those functions is
> automatically freed on either probe failure or driver removal.
OK, thanks.
--
Tarun
>
> g.
>
More information about the linux-arm-kernel
mailing list