Re: [PATCH] link errors with internal calls to devexit functions

Keith Owens (kaos@ocs.com.au)
Sat, 22 Dec 2001 16:05:43 +1100


On Sat, 22 Dec 2001 13:57:25 +1100,
Jason Thomas <jason@topic.com.au> wrote:
>please CC me I'm not on the list.
>
>This patch against 2.4.17 fixes internal calls to devexit functions (which
>is bypasses the devexit_p wrapper) in drivers/media/video/bttv-driver.c and
>drivers/usb/usb-uhci.c, they are the only two I found.
>
>diff -ur linux-2.4.17.orig/drivers/media/video/bttv-driver.c linux-2.4.17/drivers/media/video/bttv-driver.c
>--- linux-2.4.17.orig/drivers/media/video/bttv-driver.c Sat Dec 22 13:39:39 2001
>+++ linux-2.4.17/drivers/media/video/bttv-driver.c Sat Dec 22 13:46:02 2001
>@@ -2992,7 +2992,9 @@
> pci_set_drvdata(dev,btv);
>
> if(init_bt848(btv) < 0) {
>+#if defined(MODULE) || defined(CONFIG_HOTPLUG)
> bttv_remove(dev);
>+#endif
> return -EIO;
> }
> bttv_num++;
>diff -ur linux-2.4.17.orig/drivers/usb/usb-uhci.c linux-2.4.17/drivers/usb/usb-uhci.c
>--- linux-2.4.17.orig/drivers/usb/usb-uhci.c Sat Dec 22 13:39:39 2001
>+++ linux-2.4.17/drivers/usb/usb-uhci.c Sat Dec 22 13:46:38 2001
>@@ -3001,7 +3001,9 @@
> s->irq = irq;
>
> if(uhci_start_usb (s) < 0) {
>+#if defined(MODULE) || defined(CONFIG_HOTPLUG)
> uhci_pci_remove(dev);
>+#endif
> return -1;
> }

I don't like #if defined(MODULE) || defined(CONFIG_HOTPLUG) in open
code. If the rules for what gets discarded change (again) then those
ifdefs will be out of sync. That is why __devexit_p() is a wrapper, it
is defined once and only has to be changed once when the rules change.

Define a __devexit_call wrapper in include/linux/init.h at the same
place that __devexit_p is defined and use the wrapper around the calls.
Untested.

#if defined(MODULE) || defined(CONFIG_HOTPLUG)
#define __devexit_p(x) x
#define __devexit_call(x) x
#else
#define __devexit_call(x) do { } while (0)
#define __devexit_p(x) NULL
#endif

__devexit_call(bttv_remove(dev));
__devexit_call(uhci_pci_remove(dev));

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/