On Fri, Aug 02, 2002 at 09:24:56AM +0000, Felipe W Damasio wrote:
> --- ./include/linux/init.h.orig Fri Aug 2 09:15:44 2002
> +++ ./include/linux/init.h Fri Aug 2 09:06:39 2002
> @@ -177,12 +177,16 @@
> #define __devinitdata
> #define __devexit
> #define __devexitdata
> -#define __devexit_p(x) &(x)
> #else
> #define __devinit __init
> #define __devinitdata __initdata
> #define __devexit __exit
> #define __devexitdata __exitdata
> +#endif
> +
> +#ifdef MODULE || CONFIG_HOTPLUG
> +#define __devexit_p(x) &(x)
> +#else
> #define __devexit_p(x) 0
> #endif
Instead of making this a maze of #if/else's, you can acheive
the same effect with the following patch that has been in my
tree for a few months.. (hand pasted, may not apply cleanly)
@@ -167,12 +167,18 @@ typedef void (*__cleanup_module_func_t)(
#define device_initcall(fn) module_init(fn)
#define late_initcall(fn) module_init(fn)
-#endif
+#endif /* !MODULE */
/* Data marked not to be saved by software_suspend() */
#define __nosavedata __attribute__ ((__section__ (".data.nosave")))
-#ifdef CONFIG_HOTPLUG
+/* 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.
+ */
+#if defined(MODULE) || defined(CONFIG_HOTPLUG)
#define __devinit
#define __devinitdata
#define __devexit
-- | Dave Jones. http://www.codemonkey.org.uk | SuSE Labs - 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/
This archive was generated by hypermail 2b29 : Wed Aug 07 2002 - 22:00:18 EST