From: Khalid Aziz On a 2.6.7 kernel, when I try to modprobe ipmi_msghandler, it fails to load with following message: FATAL: Error inserting ipmi_msghandler (/lib/modules/2.6.7/kernel/drivers/char/ipmi/ipmi_msghandler.ko): Invalid module format And there is an error message in dmesg: ipmi_msghandler: init symbol 0xa000000200058080 used in module code at a000000200031b32 What I have been able to determine is that ipmi_msghandler.c defines ipmi_init_msghandler() as the module_init() routine and then it also calls ipmi_init_msghandler() diretcly from couple of other places. This does not seem to be okay in 2.6.7 kernel. I was able to fix this by defining a new module_init routine which in turn calls ipmi_init_msghandler(). I also removed __init from ipmi_init_msghandler() since it gets called from ipmi_open() on an open of the ipmi device file. So I would think we want to keep ipmi_init_msghandler() around even after initialization. Signed-off-by: Andrew Morton --- 25-akpm/drivers/char/ipmi/ipmi_msghandler.c | 9 +++++++-- 1 files changed, 7 insertions(+), 2 deletions(-) diff -puN drivers/char/ipmi/ipmi_msghandler.c~ipmi_msghandler-module-load-failure-fix drivers/char/ipmi/ipmi_msghandler.c --- 25/drivers/char/ipmi/ipmi_msghandler.c~ipmi_msghandler-module-load-failure-fix 2004-07-26 15:38:43.819303136 -0700 +++ 25-akpm/drivers/char/ipmi/ipmi_msghandler.c 2004-07-26 15:38:43.825302224 -0700 @@ -3098,7 +3098,7 @@ static struct notifier_block panic_block 200 /* priority: INT_MAX >= x >= 0 */ }; -static __init int ipmi_init_msghandler(void) +static int ipmi_init_msghandler(void) { int i; @@ -3133,6 +3133,11 @@ static __init int ipmi_init_msghandler(v return 0; } +static __init int ipmi_init_msghandler_mod(void) +{ + ipmi_init_msghandler(); +} + static __exit void cleanup_ipmi(void) { int count; @@ -3169,7 +3174,7 @@ static __exit void cleanup_ipmi(void) } module_exit(cleanup_ipmi); -module_init(ipmi_init_msghandler); +module_init(ipmi_init_msghandler_mod); MODULE_LICENSE("GPL"); EXPORT_SYMBOL(ipmi_alloc_recv_msg); _