From c2de137a4002842a18419cb1fc92ead57a2837ca Mon Sep 17 00:00:00 2001 From: Eduard - Gabriel Munteanu Date: Mon, 23 Jun 2008 01:05:00 +0300 Subject: [PATCH] Full conversion to early_initcall() interface, remove old interface. A previous patch added the early_initcall(), to allow a cleaner hooking of pre-SMP initcalls. Now we remove the older interface, converting all existing users to the new one. Signed-off-by: Eduard - Gabriel Munteanu --- include/linux/sched.h | 12 ------------ init/main.c | 22 +--------------------- kernel/sched.c | 6 +++++- kernel/softirq.c | 4 +++- kernel/softlockup.c | 27 ++++++++++++++++++++++++--- 5 files changed, 33 insertions(+), 38 deletions(-) diff --git a/include/linux/sched.h b/include/linux/sched.h index c5d3f847ca8..f37eb1a2163 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -291,7 +291,6 @@ extern void sched_show_task(struct task_struct *p); #ifdef CONFIG_DETECT_SOFTLOCKUP extern void softlockup_tick(void); -extern void spawn_softlockup_task(void); extern void touch_softlockup_watchdog(void); extern void touch_all_softlockup_watchdogs(void); extern unsigned long softlockup_thresh; @@ -302,9 +301,6 @@ extern unsigned long sysctl_hung_task_warnings; static inline void softlockup_tick(void) { } -static inline void spawn_softlockup_task(void) -{ -} static inline void touch_softlockup_watchdog(void) { } @@ -2200,14 +2196,6 @@ static inline void inc_syscw(struct task_struct *tsk) } #endif -#ifdef CONFIG_SMP -void migration_init(void); -#else -static inline void migration_init(void) -{ -} -#endif - #ifndef TASK_SIZE_OF #define TASK_SIZE_OF(tsk) TASK_SIZE #endif diff --git a/init/main.c b/init/main.c index c5397f63740..057f364c55a 100644 --- a/init/main.c +++ b/init/main.c @@ -766,16 +766,7 @@ static void __init do_basic_setup(void) do_initcalls(); } -static int __initdata nosoftlockup; - -static int __init nosoftlockup_setup(char *str) -{ - nosoftlockup = 1; - return 1; -} -__setup("nosoftlockup", nosoftlockup_setup); - -static void __init __do_pre_smp_initcalls(void) +static void __init do_pre_smp_initcalls(void) { initcall_t *call; @@ -783,16 +774,6 @@ static void __init __do_pre_smp_initcalls(void) do_one_initcall(*call); } -static void __init do_pre_smp_initcalls(void) -{ - extern int spawn_ksoftirqd(void); - - migration_init(); - spawn_ksoftirqd(); - if (!nosoftlockup) - spawn_softlockup_task(); -} - static void run_init_process(char *init_filename) { argv_init[0] = init_filename; @@ -864,7 +845,6 @@ static int __init kernel_init(void * unused) smp_prepare_cpus(setup_max_cpus); - __do_pre_smp_initcalls(); do_pre_smp_initcalls(); smp_init(); diff --git a/kernel/sched.c b/kernel/sched.c index 4e2f6033565..29c88077b18 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -6175,7 +6175,7 @@ static struct notifier_block __cpuinitdata migration_notifier = { .priority = 10 }; -void __init migration_init(void) +static int __init migration_init(void) { void *cpu = (void *)(long)smp_processor_id(); int err; @@ -6185,7 +6185,11 @@ void __init migration_init(void) BUG_ON(err == NOTIFY_BAD); migration_call(&migration_notifier, CPU_ONLINE, cpu); register_cpu_notifier(&migration_notifier); + + return err; } + +early_initcall(migration_init); #endif #ifdef CONFIG_SMP diff --git a/kernel/softirq.c b/kernel/softirq.c index 36e06174004..169104a27c3 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -659,7 +659,7 @@ static struct notifier_block __cpuinitdata cpu_nfb = { .notifier_call = cpu_callback }; -__init int spawn_ksoftirqd(void) +static int __init spawn_ksoftirqd(void) { void *cpu = (void *)(long)smp_processor_id(); int err = cpu_callback(&cpu_nfb, CPU_UP_PREPARE, cpu); @@ -670,6 +670,8 @@ __init int spawn_ksoftirqd(void) return 0; } +early_initcall(spawn_ksoftirqd); + #ifdef CONFIG_SMP /* * Call a function on all processors diff --git a/kernel/softlockup.c b/kernel/softlockup.c index a272d78185e..aeacd13dede 100644 --- a/kernel/softlockup.c +++ b/kernel/softlockup.c @@ -307,14 +307,35 @@ static struct notifier_block __cpuinitdata cpu_nfb = { .notifier_call = cpu_callback }; -__init void spawn_softlockup_task(void) +static int __initdata nosoftlockup; + +static int __init nosoftlockup_setup(char *str) +{ + nosoftlockup = 1; + return 1; +} +__setup("nosoftlockup", nosoftlockup_setup); + +static int __init spawn_softlockup_task(void) { void *cpu = (void *)(long)smp_processor_id(); - int err = cpu_callback(&cpu_nfb, CPU_UP_PREPARE, cpu); + int err; + + if (nosoftlockup) + return 0; - BUG_ON(err == NOTIFY_BAD); + err = cpu_callback(&cpu_nfb, CPU_UP_PREPARE, cpu); + if (err == NOTIFY_BAD) { + BUG(); + return 1; + } cpu_callback(&cpu_nfb, CPU_ONLINE, cpu); register_cpu_notifier(&cpu_nfb); atomic_notifier_chain_register(&panic_notifier_list, &panic_block); + + return 0; } + +early_initcall(spawn_softlockup_task); + -- 2.11.4.GIT