summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2012-08-04 10:33:24 +0000
committerArnd Bergmann <arnd@arndb.de>2012-08-10 12:27:46 +0200
commit38eaed327dc5bea2e5548ea3d195de83a2070c6d (patch)
tree3f2d00c0ba19c58c07d7082d34c850d40b2d2617
parent8ab08c0c4c39f36d3bf89e03a4bc3e6898e1563c (diff)
downloadlinux-3.10-38eaed327dc5bea2e5548ea3d195de83a2070c6d.tar.gz
linux-3.10-38eaed327dc5bea2e5548ea3d195de83a2070c6d.tar.bz2
linux-3.10-38eaed327dc5bea2e5548ea3d195de83a2070c6d.zip
gpio: em: do not discard em_gio_irq_domain_cleanup
The newly added gpio-em driver marks its em_gio_irq_domain_cleanup function as __devexit, which would lead to that function being discarded in case CONFIG_HOTPLUG is disabled. However, the function is also called by the error handling logic em_gio_probe, which would cause a jump into a NULL pointer if it was removed from the kernel or module. Without this patch, building kzm9d_defconfig results in: WARNING: drivers/gpio/built-in.o(.devinit.text+0x330): Section mismatch in reference from the function em_gio_probe() to the function .devexit.text:em_gio_irq_domain_cleanup() The function __devinit em_gio_probe() references a function __devexit em_gio_irq_domain_cleanup(). This is often seen when error handling in the init function uses functionality in the exit path. The fix is often to remove the __devexit annotation of em_gio_irq_domain_cleanup() so it may be used outside an exit section. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Cc: Magnus Damm <damm@opensource.se> Cc: Linus Walleij <linus.walleij@linaro.org> Cc: Rafael J. Wysocki <rjw@sisk.pl>
-rw-r--r--drivers/gpio/gpio-em.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/gpio/gpio-em.c b/drivers/gpio/gpio-em.c
index 150d9768811..ae37181798b 100644
--- a/drivers/gpio/gpio-em.c
+++ b/drivers/gpio/gpio-em.c
@@ -266,7 +266,7 @@ static int __devinit em_gio_irq_domain_init(struct em_gio_priv *p)
return 0;
}
-static void __devexit em_gio_irq_domain_cleanup(struct em_gio_priv *p)
+static void em_gio_irq_domain_cleanup(struct em_gio_priv *p)
{
struct gpio_em_config *pdata = p->pdev->dev.platform_data;