lkml.org 
[lkml]   [2006]   [Feb]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH] percpu data: only iterate over possible CPUs
    On Tue, Feb 07, 2006 at 11:11:56AM -0800, Linus Torvalds wrote:
    > You're right, my bad. I looked at setup_smp() and how it walked through
    > every CPU in the firmware, but it doesn't actually ever set the possible
    > map, it fills in just hwrpb_cpu_present_mask (which is then then only used
    > _later_ to set cpu_possible_map for some silly reason).
    >
    > As far as I can tell, "hwrpb_cpu_present_mask" is just wrong, and the code
    > _should_ be using cpu_possible_map.

    Yep, it seems that we can get rid of hwrpb_cpu_present_mask.
    The appended patch is only minimally tested (works on UP with SMP kernel).

    Ivan.

    --- linux/arch/alpha/kernel/smp.c.orig Wed Jan 18 02:09:27 2006
    +++ linux/arch/alpha/kernel/smp.c Wed Feb 8 02:38:46 2006
    @@ -73,9 +73,6 @@ cpumask_t cpu_online_map;

    EXPORT_SYMBOL(cpu_online_map);

    -/* cpus reported in the hwrpb */
    -static unsigned long hwrpb_cpu_present_mask __initdata = 0;
    -
    int smp_num_probed; /* Internal processor count */
    int smp_num_cpus = 1; /* Number that came online. */

    @@ -442,7 +439,7 @@ setup_smp(void)
    if ((cpu->flags & 0x1cc) == 0x1cc) {
    smp_num_probed++;
    /* Assume here that "whami" == index */
    - hwrpb_cpu_present_mask |= (1UL << i);
    + cpu_set(i, cpu_possible_map);
    cpu->pal_revision = boot_cpu_palrev;
    }

    @@ -453,12 +450,12 @@ setup_smp(void)
    }
    } else {
    smp_num_probed = 1;
    - hwrpb_cpu_present_mask = (1UL << boot_cpuid);
    + cpu_set(boot_cpuid, cpu_possible_map);
    }
    cpu_present_mask = cpumask_of_cpu(boot_cpuid);

    printk(KERN_INFO "SMP: %d CPUs probed -- cpu_present_mask = %lx\n",
    - smp_num_probed, hwrpb_cpu_present_mask);
    + smp_num_probed, cpu_possible_map.bits[0]);
    }

    /*
    @@ -467,8 +464,6 @@ setup_smp(void)
    void __init
    smp_prepare_cpus(unsigned int max_cpus)
    {
    - int cpu_count, i;
    -
    /* Take care of some initial bookkeeping. */
    memset(ipi_data, 0, sizeof(ipi_data));

    @@ -486,19 +481,7 @@ smp_prepare_cpus(unsigned int max_cpus)

    printk(KERN_INFO "SMP starting up secondaries.\n");

    - cpu_count = 1;
    - for (i = 0; (i < NR_CPUS) && (cpu_count < max_cpus); i++) {
    - if (i == boot_cpuid)
    - continue;
    -
    - if (((hwrpb_cpu_present_mask >> i) & 1) == 0)
    - continue;
    -
    - cpu_set(i, cpu_possible_map);
    - cpu_count++;
    - }
    -
    - smp_num_cpus = cpu_count;
    + smp_num_cpus = smp_num_probed;
    }

    void __devinit
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2006-02-08 09:57    [W:0.444 / U:0.184 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site