diff --git a/[refs] b/[refs] index dcd6b23d8b96..673fd3b9aa3f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4bceba417a795b78a5146e3f85291cb7bb2402ef +refs/heads/master: 59f9415ffb9759e950d775f4c400f747b332cc02 diff --git a/trunk/include/linux/init.h b/trunk/include/linux/init.h index 11b84e106053..93538b696e3d 100644 --- a/trunk/include/linux/init.h +++ b/trunk/include/linux/init.h @@ -139,6 +139,7 @@ extern initcall_t __con_initcall_start[], __con_initcall_end[]; extern initcall_t __security_initcall_start[], __security_initcall_end[]; /* Defined in init/main.c */ +extern int do_one_initcall(initcall_t fn); extern char __initdata boot_command_line[]; extern char *saved_command_line; extern unsigned int reset_devices; diff --git a/trunk/init/main.c b/trunk/init/main.c index 0bc7e167bf45..f6f7042331dc 100644 --- a/trunk/init/main.c +++ b/trunk/init/main.c @@ -691,7 +691,7 @@ asmlinkage void __init start_kernel(void) rest_init(); } -static int __initdata initcall_debug; +static int initcall_debug; static int __init initcall_debug_setup(char *str) { @@ -700,7 +700,7 @@ static int __init initcall_debug_setup(char *str) } __setup("initcall_debug", initcall_debug_setup); -static void __init do_one_initcall(initcall_t fn) +int do_one_initcall(initcall_t fn) { int count = preempt_count(); ktime_t t0, t1, delta; @@ -740,6 +740,8 @@ static void __init do_one_initcall(initcall_t fn) print_fn_descriptor_symbol(KERN_WARNING "initcall %s", fn); printk(" returned with %s\n", msgbuf); } + + return result; } diff --git a/trunk/kernel/module.c b/trunk/kernel/module.c index 61d212120df4..08864d257eb0 100644 --- a/trunk/kernel/module.c +++ b/trunk/kernel/module.c @@ -2288,7 +2288,7 @@ sys_init_module(void __user *umod, /* Start the module */ if (mod->init != NULL) - ret = mod->init(); + ret = do_one_initcall(mod->init); if (ret < 0) { /* Init routine failed: abort. Try to protect us from buggy refcounters. */