diff options
author | Stas Sergeev <stsp@aknet.ru> | 2006-03-23 02:59:44 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-23 07:38:05 -0800 |
commit | 44fd22992cb76dc51c52cf4b8aff1bc7899bb23c (patch) | |
tree | ef10367137a340a554ebb3989598ef8af44d420b /init/main.c | |
parent | ffa930ef55ae82c09e30b2a0c4ce5d7fdea041e2 (diff) | |
download | lwn-44fd22992cb76dc51c52cf4b8aff1bc7899bb23c.tar.gz lwn-44fd22992cb76dc51c52cf4b8aff1bc7899bb23c.zip |
[PATCH] Register the boot-cpu in the cpu maps earlier
Register the boot-cpu in the cpu maps earlier to allow the early printk to
work, and to fix an obscure deadlock at boot.
Signed-off-by: Stas Sergeev <stsp@aknet.ru>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'init/main.c')
-rw-r--r-- | init/main.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/init/main.c b/init/main.c index 4c194c47395f..141e8896d252 100644 --- a/init/main.c +++ b/init/main.c @@ -438,6 +438,15 @@ void __init parse_early_param(void) * Activate the first processor. */ +static void __init boot_cpu_init(void) +{ + int cpu = smp_processor_id(); + /* Mark the boot cpu "present", "online" etc for SMP and UP case */ + cpu_set(cpu, cpu_online_map); + cpu_set(cpu, cpu_present_map); + cpu_set(cpu, cpu_possible_map); +} + asmlinkage void __init start_kernel(void) { char * command_line; @@ -447,17 +456,13 @@ asmlinkage void __init start_kernel(void) * enable them */ lock_kernel(); + boot_cpu_init(); page_address_init(); printk(KERN_NOTICE); printk(linux_banner); setup_arch(&command_line); setup_per_cpu_areas(); - - /* - * Mark the boot cpu "online" so that it can call console drivers in - * printk() and can access its per-cpu storage. - */ - smp_prepare_boot_cpu(); + smp_prepare_boot_cpu(); /* arch-specific boot-cpu hooks */ /* * Set up the scheduler prior starting any interrupts (such as the |