Fix OFED startup order: All SYSINIT()'s and modules should be loaded

prior to starting "/sbin/init" which will run all the "/etc/rc.d/xxx"
scripts. Else there can be a race configuring the interfaces via
"/etc/rc.conf".

MFC after:	4 weeks
Sponsored by:	Mellanox Technologies
This commit is contained in:
Hans Petter Selasky 2014-07-06 14:22:13 +00:00
parent 22239af86c
commit 5cb6b3afa4
4 changed files with 11 additions and 6 deletions

View File

@ -2414,6 +2414,6 @@ static moduledata_t mlx4ib_mod = {
.evhand = mlx4ib_evhand,
};
DECLARE_MODULE(mlx4ib, mlx4ib_mod, SI_SUB_SMP, SI_ORDER_ANY);
DECLARE_MODULE(mlx4ib, mlx4ib_mod, SI_SUB_OFED_PREINIT, SI_ORDER_ANY);
MODULE_DEPEND(mlx4ib, mlx4, 1, 1, 1);
MODULE_DEPEND(mlx4ib, ibcore, 1, 1, 1);

View File

@ -383,5 +383,5 @@ static moduledata_t mlxen_mod = {
.name = "mlxen",
.evhand = mlxen_evhand,
};
DECLARE_MODULE(mlxen, mlxen_mod, SI_SUB_SMP, SI_ORDER_ANY);
DECLARE_MODULE(mlxen, mlxen_mod, SI_SUB_OFED_PREINIT, SI_ORDER_ANY);
MODULE_DEPEND(mlxen, mlx4, 1, 1, 1);

View File

@ -2875,4 +2875,4 @@ static moduledata_t mlx4_mod = {
.evhand = mlx4_evhand,
};
MODULE_VERSION(mlx4, 1);
DECLARE_MODULE(mlx4, mlx4_mod, SI_SUB_SMP, SI_ORDER_ANY);
DECLARE_MODULE(mlx4, mlx4_mod, SI_SUB_OFED_PREINIT, SI_ORDER_ANY);

View File

@ -44,6 +44,11 @@
#define EXPORT_SYMBOL(name)
#define EXPORT_SYMBOL_GPL(name)
/* OFED pre-module initialization */
#define SI_SUB_OFED_PREINIT (SI_SUB_KTHREAD_INIT - 2)
/* OFED default module initialization */
#define SI_SUB_OFED_MODINIT (SI_SUB_KTHREAD_INIT - 1)
#include <sys/linker.h>
static inline void
@ -68,17 +73,17 @@ _module_run(void *arg)
}
#define module_init(fn) \
SYSINIT(fn, SI_SUB_LAST, SI_ORDER_FIRST, _module_run, (fn))
SYSINIT(fn, SI_SUB_OFED_MODINIT, SI_ORDER_FIRST, _module_run, (fn))
/*
* XXX This is a freebsdism designed to work around not having a module
* load order resolver built in.
*/
#define module_init_order(fn, order) \
SYSINIT(fn, SI_SUB_LAST, (order), _module_run, (fn))
SYSINIT(fn, SI_SUB_OFED_MODINIT, (order), _module_run, (fn))
#define module_exit(fn) \
SYSUNINIT(fn, SI_SUB_LAST, SI_ORDER_FIRST, _module_run, (fn))
SYSUNINIT(fn, SI_SUB_OFED_MODINIT, SI_ORDER_FIRST, _module_run, (fn))
#define module_get(module)
#define module_put(module)