All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] gpio: pca953x: fix error handling path in probe() call
@ 2011-03-30 22:18 Mark Brown
  2011-03-31  3:28 ` Grant Likely
  0 siblings, 1 reply; 2+ messages in thread
From: Mark Brown @ 2011-03-30 22:18 UTC (permalink / raw)
  To: Grant Likely; +Cc: linux-kernel, Ben Dooks, Mark Brown

From: Ben Dooks <ben-linux@fluff.org>

If the device fails to respond, then the error path tries to remove an
interrupt that never got registered, which causes an backtrace from the
interrupt handling code.

Fix this by ensuring that the cleanup path has two labels and use the
correct path as needed.

fixes the following error:

WARNING: at kernel/irq/manage.c:908 __free_irq+0x80/0x160()
Trying to free already-free IRQ 0

Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
---
 drivers/gpio/pca953x.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/gpio/pca953x.c b/drivers/gpio/pca953x.c
index 583e925..7630ab7 100644
--- a/drivers/gpio/pca953x.c
+++ b/drivers/gpio/pca953x.c
@@ -558,7 +558,7 @@ static int __devinit pca953x_probe(struct i2c_client *client,
 
 	ret = gpiochip_add(&chip->gpio_chip);
 	if (ret)
-		goto out_failed;
+		goto out_failed_irq;
 
 	if (pdata->setup) {
 		ret = pdata->setup(client, chip->gpio_chip.base,
@@ -570,8 +570,9 @@ static int __devinit pca953x_probe(struct i2c_client *client,
 	i2c_set_clientdata(client, chip);
 	return 0;
 
-out_failed:
+out_failed_irq:
 	pca953x_irq_teardown(chip);
+out_failed:
 	kfree(chip->dyn_pdata);
 	kfree(chip);
 	return ret;
-- 
1.7.4.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] gpio: pca953x: fix error handling path in probe() call
  2011-03-30 22:18 [PATCH] gpio: pca953x: fix error handling path in probe() call Mark Brown
@ 2011-03-31  3:28 ` Grant Likely
  0 siblings, 0 replies; 2+ messages in thread
From: Grant Likely @ 2011-03-31  3:28 UTC (permalink / raw)
  To: Mark Brown; +Cc: linux-kernel, Ben Dooks

On Thu, Mar 31, 2011 at 07:18:46AM +0900, Mark Brown wrote:
> From: Ben Dooks <ben-linux@fluff.org>
> 
> If the device fails to respond, then the error path tries to remove an
> interrupt that never got registered, which causes an backtrace from the
> interrupt handling code.
> 
> Fix this by ensuring that the cleanup path has two labels and use the
> correct path as needed.
> 
> fixes the following error:
> 
> WARNING: at kernel/irq/manage.c:908 __free_irq+0x80/0x160()
> Trying to free already-free IRQ 0
> 
> Signed-off-by: Ben Dooks <ben-linux@fluff.org>
> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>

Applied, thanks.

g.

> ---
>  drivers/gpio/pca953x.c |    5 +++--
>  1 files changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpio/pca953x.c b/drivers/gpio/pca953x.c
> index 583e925..7630ab7 100644
> --- a/drivers/gpio/pca953x.c
> +++ b/drivers/gpio/pca953x.c
> @@ -558,7 +558,7 @@ static int __devinit pca953x_probe(struct i2c_client *client,
>  
>  	ret = gpiochip_add(&chip->gpio_chip);
>  	if (ret)
> -		goto out_failed;
> +		goto out_failed_irq;
>  
>  	if (pdata->setup) {
>  		ret = pdata->setup(client, chip->gpio_chip.base,
> @@ -570,8 +570,9 @@ static int __devinit pca953x_probe(struct i2c_client *client,
>  	i2c_set_clientdata(client, chip);
>  	return 0;
>  
> -out_failed:
> +out_failed_irq:
>  	pca953x_irq_teardown(chip);
> +out_failed:
>  	kfree(chip->dyn_pdata);
>  	kfree(chip);
>  	return ret;
> -- 
> 1.7.4.1
> 

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2011-03-31  3:28 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-03-30 22:18 [PATCH] gpio: pca953x: fix error handling path in probe() call Mark Brown
2011-03-31  3:28 ` Grant Likely

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.