Re: The magical mystical changing ethernet interface order

David S. Miller
2003-05-08T15:50:46Z

From: Alan Cox <alan@lxorguk.ukuu.org.uk>
Date: 08 May 2003 15:55:31 +0100

Unfortunately for the ISA driver code we *have* to rely on link
order or rip out the __init stuff and use Space.c type hacks.

I do no argue that needing an invocation order is bogus.
I merely disagree with the way we're trying to achieve it.

You don't need Space.c magic, the linker in binutils has mechanisms by
which this can be accomplished and we already use this in 2.5.x

Have a peek at __define_initcall($NUM,fn), imagine it with one more
argument $PRIO. It might look like this:

#define __define_initcall(level,prio,fn) \
static initcall_t __initcall_##fn __attribute__
((unused,__section__ ("\.initcall" level "." prio ".init"))) = fn

Use the 'prio' number to define the ordering. The default for
modules that don't care about relative ordering within a class
use a value like "9999" or something like that.

The only magic is what to do with the vmlinux.lds scripts to
handle this correctly. Are regular expressions allowed in the
section names?