Commit:     62e6f1e8bb7c48c02b8bdb3085c5f6365682149b
Parent:     a1c582d0720f2eff61043e90711767decf37b917
Author:     Hugh Dickins <[EMAIL PROTECTED]>
AuthorDate: Fri Aug 31 04:26:50 2007 +0100
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Thu Aug 30 21:54:31 2007 -0700

    fix maxcpus=1 oops in show_stat()
    Alexey Dobriyan reports that maxcpus=1 is still broken in 2.6.23-rc4:
    if CONFIG_HOTPLUG_CPU is not set, x86_64 bootup oopses in show_stat() -
    for_each_possible_cpu accesses a per-cpu area which was never set up.
    Alexey identified commit 61ec7567db103d537329b0db9a887db570431ff4
    (ACPI: boot correctly with "nosmp" or "maxcpus=0") as the origin;
    but it's not really to blame, just exposes a bug in 2.6.23-rc1's commit
    8b3b295502444340dd0701855ac422fbf32e161d (Especially when 
    avoid needlessy allocating resources for CPUs that can never become 
    rc1's test for max_cpus < 2 in start_kernel() wasn't working because
    max_cpus was still NR_CPUS at that point: until rc4 moved the maxcpus
    parsing earlier.  Now it sets cpu_possible_map to 1 before allocating
    all possible per-cpu areas; then smp_init() expands cpu_possible_map
    to cpu_present_map (0xf in my case) later on.
    rc1's commit has good intentions, but expects cpu_present_map to be
    limited by maxcpus, which is only the case on i386.  cpus_and(possible,
    possible,present) might be good, but needs an audit of cpu_present_map
    uses - there may well be assumptions that any cpu present is possible.
    So stay safe for now and just revert those #ifndef CONFIG_HOTPLUG_CPU
    optimizations in rc1's commit.
    Signed-off-by: Hugh Dickins <[EMAIL PROTECTED]>
    Cc: Alexey Dobriyan <[EMAIL PROTECTED]>
    Cc: Len Brown <[EMAIL PROTECTED]>
    Cc: Andrew Morton <[EMAIL PROTECTED]>
    Cc: Jan Beulich <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
 init/main.c |    8 --------
 1 files changed, 0 insertions(+), 8 deletions(-)

diff --git a/init/main.c b/init/main.c
index 450e6ee..9def935 100644
--- a/init/main.c
+++ b/init/main.c
@@ -397,10 +397,6 @@ static void __init smp_init(void)
        unsigned int cpu;
-       cpu_possible_map = cpu_present_map;
        /* FIXME: This should be done in userspace --RR */
        for_each_present_cpu(cpu) {
                if (num_online_cpus() >= max_cpus)
@@ -545,10 +541,6 @@ asmlinkage void __init start_kernel(void)
-       if (max_cpus < 2)
-               cpu_possible_map = cpu_online_map;
        smp_prepare_boot_cpu(); /* arch-specific boot-cpu hooks */
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at

Reply via email to