From: Grant Grundler Date: Sun, 11 Feb 2007 07:04:04 +0000 (-0700) Subject: PCI: pci.txt fix __devexit() usage X-Git-Tag: v2.6.21-rc1~80^2~4 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=26ba05e4c66ad3fafe08412ffcf8c328cc4640b0;p=linux-2.6 PCI: pci.txt fix __devexit() usage Marin Mitov spotted a brainfart where I had failed to update copied text with *_remove and __devexit(). Marin made a good comment in his email to me: | mydriver_probe() is _always_ executed, while mydriver_remove() is not. | See: include/linux/init.h Which says: /* Functions marked as __devexit may be discarded at kernel link time, depending on config options. Newer versions of binutils detect references from retained sections to discarded sections and flag an error. Pointers to __devexit functions must use __devexit_p(function_name), the wrapper will insert either the function_name or NULL, depending on the config options. */ Signed-off-by: Grant Grundler Signed-off-by: Greg Kroah-Hartman --- diff --git a/Documentation/pci.txt b/Documentation/pci.txt index fd5028eca1..cdf2f3c0ab 100644 --- a/Documentation/pci.txt +++ b/Documentation/pci.txt @@ -205,8 +205,8 @@ Tips on when/where to use the above attributes: exclusively called by the probe() routine, can be marked __devinit. Ditto for remove() and __devexit. - o If mydriver_probe() is marked with __devinit(), then all address - references to mydriver_probe must use __devexit_p(mydriver_probe) + o If mydriver_remove() is marked with __devexit(), then all address + references to mydriver_remove must use __devexit_p(mydriver_remove) (in the struct pci_driver declaration for example). __devexit_p() will generate the function name _or_ NULL if the function will be discarded. For an example, see drivers/net/tg3.c.