Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

gpio/pca953x: fix error handling path in probe() call

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>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>

authored by

Ben Dooks and committed by
Grant Likely
272df502 0ce790e7

+3 -2
+3 -2
drivers/gpio/pca953x.c
··· 558 558 559 559 ret = gpiochip_add(&chip->gpio_chip); 560 560 if (ret) 561 - goto out_failed; 561 + goto out_failed_irq; 562 562 563 563 if (pdata->setup) { 564 564 ret = pdata->setup(client, chip->gpio_chip.base, ··· 570 570 i2c_set_clientdata(client, chip); 571 571 return 0; 572 572 573 - out_failed: 573 + out_failed_irq: 574 574 pca953x_irq_teardown(chip); 575 + out_failed: 575 576 kfree(chip->dyn_pdata); 576 577 kfree(chip); 577 578 return ret;