2002-08-02 12:19:41

by Felipe W Damasio

[permalink] [raw]
Subject: [PATCH] __devexit_p macro

Hi,

This patch defines __devexit_p when CONFIG_HOTPLUG || MODULE, instead of
when just CONFIG_HOTPLUG is defined.

This is needed for some net drivers (at least) that use "remove_one"
(which use unregister_netdev), allowing the driver to be re-installed.

This is the same behaviour that 2.4.

Patch against 2.5.30

Please consider pulling it from:

http://cscience.org/~coqueiro/linux/patches-fwd/2.5/init.h-__devexit_p.patch

Felipe

--- ./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


2002-08-02 12:30:20

by Dave Jones

[permalink] [raw]
Subject: Re: [PATCH] __devexit_p macro

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

2002-08-02 13:43:23

by Keith Owens

[permalink] [raw]
Subject: Re: [PATCH] __devexit_p macro

On Fri, 2 Aug 2002 14:33:49 +0200,
Dave Jones <[email protected]> wrote:
>On Fri, Aug 02, 2002 at 09:24:56AM +0000, Felipe W Damasio wrote:
> > +#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)

Better still, copy the end of 2.5.19-rc5/include/linux/init.h to
2.5.30, from #ifdef CONFIG_HOTPLUG onwards. There is no point in
having slight differences between the 2.4 and 2.5 versions, ATM they
should be the same.

2002-08-02 13:51:48

by Keith Owens

[permalink] [raw]
Subject: Re: [PATCH] __devexit_p macro

On Fri, 02 Aug 2002 23:46:39 +1000,
Keith Owens <[email protected]> wrote:
>On Fri, 2 Aug 2002 14:33:49 +0200,
>Dave Jones <[email protected]> wrote:
>>On Fri, Aug 02, 2002 at 09:24:56AM +0000, Felipe W Damasio wrote:
>> > +#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)
>
>Better still, copy the end of 2.5.19-rc5/include/linux/init.h to

Duh, that should be 2.4.19-rc5 of course.

>2.5.30, from #ifdef CONFIG_HOTPLUG onwards. There is no point in
>having slight differences between the 2.4 and 2.5 versions, ATM they
>should be the same.