Re: [patch] Re: 2.6.16-rc4-mm1 (bugs and lockups)
- From: Stas Sergeev <stsp@xxxxxxxx>
- Date: Wed, 22 Feb 2006 18:51:19 +0300
Hello.
Andrew Morton wrote:
umm, actually it's wrong. i386's smp_prepare_boot_cpu() diddles withIt was important because it used to fix both the printk and
per-cpu memory, and that's not initialised at that stage. See the call to
setup_per_cpu_areas() a few lines later.
So I'll drop that hunk. How important is it in practice?
(completely accidentally!) the boot problem itself.
#ifdef CONFIG_SMPI don't even think #ifdef is needed. Having that for the UP
cpu_set(smp_processor_id(), cpu_online_map); /* comment */
#endif
case may be useless, yet looks consistent to me.
right there in start_kernel()?This is enough for printk but not for the boot lockup.
The attached patch is however enough. And it should be
correct, as it is consistent with an UP case.
(That assumes that smp_processor_id() works at that stage. Surely that'sLooking into the arch-specific code, I can see that some
true).
arches evaluate the boot-cpu number by some other means,
not by the smp_processor_id(). Still I am pretty sure the
patch won't hurt them.
With this patch and with the hotfixes, I've got the -mm
kernel working, thanks.
----
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@xxxxxxxx>
--- a/init/main.c 2006-02-21 10:36:04.000000000 +0300
+++ b/init/main.c 2006-02-22 11:30:01.000000000 +0300
@@ -440,6 +440,15 @@
* Activate the first processor.
*/
+static void 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;
@@ -449,17 +458,13 @@
* 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
- References:
- [patch] Re: 2.6.16-rc4-mm1 (bugs and lockups)
- From: Stas Sergeev
- Re: [patch] Re: 2.6.16-rc4-mm1 (bugs and lockups)
- From: Andrew Morton
- [patch] Re: 2.6.16-rc4-mm1 (bugs and lockups)
- Prev by Date: Re: 2.6.16-rc4: known regressions
- Next by Date: Re: 2.6.16-rc4: known regressions
- Previous by thread: Re: [patch] Re: 2.6.16-rc4-mm1 (bugs and lockups)
- Next by thread: Linux 2.4.33-pre2
- Index(es):
Relevant Pages
|