> -----Original Message----- > From: linux-input-owner@xxxxxxxxxxxxxxx [mailto:linux-input- > owner@xxxxxxxxxxxxxxx] On Behalf Of G, Manjunath Kondaiah > Sent: Tuesday, September 21, 2010 5:20 PM > To: linux-omap@xxxxxxxxxxxxxxx > Cc: linux-input@xxxxxxxxxxxxxxx; Dmitry Torokhov; linux-arm- > kernel@xxxxxxxxxxxxxxxxxxx; Tony Lindgren > Subject: [PATCH v2] OMAP3: Keypad: Fix failure exit path in probe > > The failure exit paths seems to be wrong in probe function. > This patch corrects exit failure paths for error handling > cases. > > Boot warning incase of request irq failure: > > [ 1.553985] twl4030_keypad twl4030_keypad: request_irq failed for irq > no=369 > [ 1.561157] ------------[ cut here ]------------ > [ 1.565795] WARNING: at kernel/irq/manage.c:899 __free_irq+0x88/0x164() > [ 1.572418] Trying to free already-free IRQ 369 > [ 1.576965] Modules linked in: > [ 1.580047] [<c00470ec>] (unwind_backtrace+0x0/0xe4) from [<c0078b5c>] > (warn_slowpath_common+0x4c/0x64) > [ 1.589477] [<c0078b5c>] (warn_slowpath_common+0x4c/0x64) from > [<c0078bf4>] (warn_slowpath_fmt+0x2c/0x3c) > [ 1.599060] [<c0078bf4>] (warn_slowpath_fmt+0x2c/0x3c) from > [<c00adb90>] (__free_irq+0x88/0x164) > [ 1.607849] [<c00adb90>] (__free_irq+0x88/0x164) from [<c00adca8>] > (free_irq+0x3c/0x5c) > [ 1.615875] [<c00adca8>] (free_irq+0x3c/0x5c) from [<c043ab2c>] > (twl4030_kp_probe+0x308/0x374) > [ 1.624511] [<c043ab2c>] (twl4030_kp_probe+0x308/0x374) from > [<c023c338>] (platform_drv_probe+0x14/0x18) > [ 1.634033] [<c023c338>] (platform_drv_probe+0x14/0x18) from > [<c023b4dc>] (driver_probe_device+0xc8/0x184) > [ 1.643707] [<c023b4dc>] (driver_probe_device+0xc8/0x184) from > [<c023b600>] (__driver_attach+0x68/0x8c) > [ 1.653106] [<c023b600>] (__driver_attach+0x68/0x8c) from [<c023ad34>] > (bus_for_each_dev+0x48/0x74) > [ 1.662170] [<c023ad34>] (bus_for_each_dev+0x48/0x74) from [<c023a690>] > (bus_add_driver+0x9c/0x210) > [ 1.671234] [<c023a690>] (bus_add_driver+0x9c/0x210) from [<c023b8f8>] > (driver_register+0xa8/0x134) > [ 1.680297] [<c023b8f8>] (driver_register+0xa8/0x134) from [<c0041340>] > (do_one_initcall+0x58/0x1b4) > [ 1.689453] [<c0041340>] (do_one_initcall+0x58/0x1b4) from [<c0008574>] > (kernel_init+0x98/0x150) > [ 1.698272] [<c0008574>] (kernel_init+0x98/0x150) from [<c0042970>] > (kernel_thread_exit+0x0/0x8) > [ 1.707214] ---[ end trace 6559b322ad3cbdfe ]--- > [ 1.718292] twl4030_keypad: probe of twl4030_keypad failed with error - > 16 > > Signed-off-by: G, Manjunath Kondaiah <manjugk@xxxxxx> > Cc: linux-input@xxxxxxxxxxxxxxx > Cc: Dmitry Torokhov <dtor@xxxxxxx> > Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx > Cc: linux-input@xxxxxxxxxxxxxxx > Cc: Tony Lindgren <tony@xxxxxxxxxxx> > --- > version v1 : initial patch > version v2 : CC'ed input subsystem and arm kernel mailing lists. > > drivers/input/keyboard/twl4030_keypad.c | 10 ++++------ > 1 files changed, 4 insertions(+), 6 deletions(-) > > diff --git a/drivers/input/keyboard/twl4030_keypad.c > b/drivers/input/keyboard/twl4030_keypad.c > index fb16b5e..39a9f30 100644 > --- a/drivers/input/keyboard/twl4030_keypad.c > +++ b/drivers/input/keyboard/twl4030_keypad.c > @@ -347,8 +347,7 @@ static int __devinit twl4030_kp_probe(struct > platform_device *pdev) > kp = kzalloc(sizeof(*kp), GFP_KERNEL); > input = input_allocate_device(); > if (!kp || !input) { > - error = -ENOMEM; > - goto err1; Wont you leak memory here ? > + return -ENOMEM; > } > > /* Get the debug Device */ > @@ -406,23 +405,22 @@ static int __devinit twl4030_kp_probe(struct > platform_device *pdev) > if (error) { > dev_info(kp->dbg_dev, "request_irq failed for irq no=%d\n", > kp->irq); > - goto err3; > + goto err2; > } > > /* Enable KP and TO interrupts now. */ > reg = (u8) ~(KEYP_IMR1_KP | KEYP_IMR1_TO); > if (twl4030_kpwrite_u8(kp, reg, KEYP_IMR1)) { > error = -EIO; > - goto err4; > + goto err3; > } > > platform_set_drvdata(pdev, kp); > return 0; > > -err4: > +err3: > /* mask all events - we don't care about the result */ > (void) twl4030_kpwrite_u8(kp, 0xff, KEYP_IMR1); > -err3: > free_irq(kp->irq, NULL); > err2: > input_unregister_device(input); > -- > 1.7.0.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-input" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html