In order to provide stable interface numbers, network interface drivers will be ordered by the link order. This is easy to accomplish by adding dependencies.
Assuming three different ethernet-drivers, without any special code, the dependency graph would not require any special order inbetween them and would look like that: eth-driver-base / | \ eth-x eth-y eth-z Now we just add dependencies. With the additional dependencies the graph looks like: eth-driver-base | | | eth-x | | | | | eth-y -| | | | eth-z ---| Signed-off-by: Alexander Holler <hol...@ahsoftware.de> --- include/linux/driver_ids.h | 11 +++++++++++ init/dependencies.c | 9 +++++++++ 2 files changed, 20 insertions(+) diff --git a/include/linux/driver_ids.h b/include/linux/driver_ids.h index 60964fe..1133a68 100644 --- a/include/linux/driver_ids.h +++ b/include/linux/driver_ids.h @@ -15,6 +15,17 @@ enum { drvid_unused, /* To be filled */ + + /* + * Network drivers will be ordered according to the link order + * (which means not necessarily according to their appearance + * here). + * This provides stable interface numbers. + * Therefor their IDs have to be in the following block. + */ + drvid_network_drivers_start, + drvid_network_drivers_end, + drvid_max }; diff --git a/init/dependencies.c b/init/dependencies.c index b484f67..027fc4b 100644 --- a/init/dependencies.c +++ b/init/dependencies.c @@ -301,12 +301,21 @@ static int __init add_dependencies(void) static void __init build_inventory(void) { const struct _annotated_initcall *ac; + unsigned id_last_network_driver = 0; ac = __annotated_initcall_start; for (; ac < __annotated_initcall_end; ++ac) { include_node[ac->id] = true; annotated_initcall_by_drvid[ac->id] = ac; nvertices = max(nvertices, ac->id); + /* order network drivers by link order*/ + if (ac->id > drvid_network_drivers_start && + ac->id < drvid_network_drivers_end) { + if (id_last_network_driver) + add_initcall_dependency(ac->id, + id_last_network_driver); + id_last_network_driver = ac->id; + } } } -- 2.1.0 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/