lkml.org 
[lkml]   [2010]   [Jan]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 35/37] x86: according to nr_cpu_ids to decide if need to leave logical flat
    should use nr_cpu_ids instead of num_processor, in case we have hotplug cpus.

    if current only have 8 cpus is up, but if we will have more cpus that
    will be hot added later, we should use physical flat at first.

    nr_cpu_ids is the total cpus that could be supported.

    -v2: per linus, chenage default_setup_apic_routing to _init, and call it for uni_processor

    Signed-off-by: Yinghai Lu <yinghai@kernel.org>
    ---
    arch/x86/kernel/apic/apic.c | 2 --
    arch/x86/kernel/apic/probe_32.c | 20 ++++++++++++++++++--
    arch/x86/kernel/apic/probe_64.c | 3 ++-
    arch/x86/kernel/smpboot.c | 2 --
    4 files changed, 20 insertions(+), 7 deletions(-)

    diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
    index c5f4906..b4f47c5 100644
    --- a/arch/x86/kernel/apic/apic.c
    +++ b/arch/x86/kernel/apic/apic.c
    @@ -1647,9 +1647,7 @@ int __init APIC_init_uniprocessor(void)
    #endif

    enable_IR_x2apic();
    -#ifdef CONFIG_X86_64
    default_setup_apic_routing();
    -#endif

    verify_local_APIC();
    connect_bsp_APIC();
    diff --git a/arch/x86/kernel/apic/probe_32.c b/arch/x86/kernel/apic/probe_32.c
    index 1a6559f..d657558 100644
    --- a/arch/x86/kernel/apic/probe_32.c
    +++ b/arch/x86/kernel/apic/probe_32.c
    @@ -52,7 +52,7 @@ static int __init print_ipi_mode(void)
    }
    late_initcall(print_ipi_mode);

    -void default_setup_apic_routing(void)
    +static void local_default_setup_apic_routing(void)
    {
    #ifdef CONFIG_X86_IO_APIC
    printk(KERN_INFO
    @@ -103,7 +103,7 @@ struct apic apic_default = {
    .init_apic_ldr = default_init_apic_ldr,

    .ioapic_phys_id_map = default_ioapic_phys_id_map,
    - .setup_apic_routing = default_setup_apic_routing,
    + .setup_apic_routing = local_default_setup_apic_routing,
    .multi_timer_check = NULL,
    .apicid_to_node = default_apicid_to_node,
    .cpu_to_logical_apicid = default_cpu_to_logical_apicid,
    @@ -212,6 +212,22 @@ void __init generic_bigsmp_probe(void)
    #endif
    }

    +void __init default_setup_apic_routing(void)
    +{
    +#ifdef CONFIG_X86_BIGSMP
    + /*
    + * make sure we go to bigsmp according to real nr_cpu_ids
    + */
    + if (!cmdline_apic && apic == &apic_default) {
    + if (nr_cpu_ids > 8) {
    + apic = &apic_bigsmp;
    + printk(KERN_INFO "Overriding APIC driver with %s\n",
    + apic->name);
    + }
    + }
    +#endif
    +}
    +
    void __init generic_apic_probe(void)
    {
    if (!cmdline_apic) {
    diff --git a/arch/x86/kernel/apic/probe_64.c b/arch/x86/kernel/apic/probe_64.c
    index 0a428dd..7163cf8 100644
    --- a/arch/x86/kernel/apic/probe_64.c
    +++ b/arch/x86/kernel/apic/probe_64.c
    @@ -67,7 +67,8 @@ void __init default_setup_apic_routing(void)
    }
    #endif

    - if (apic == &apic_flat && num_processors > 8)
    + /* not just num_processors, we could have hotplug cpus */
    + if (apic == &apic_flat && nr_cpu_ids > 8)
    apic = &apic_physflat;

    printk(KERN_INFO "Setting APIC routing to %s\n", apic->name);
    diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
    index eff2fe1..96f5f40 100644
    --- a/arch/x86/kernel/smpboot.c
    +++ b/arch/x86/kernel/smpboot.c
    @@ -1083,9 +1083,7 @@ void __init native_smp_prepare_cpus(unsigned int max_cpus)
    set_cpu_sibling_map(0);

    enable_IR_x2apic();
    -#ifdef CONFIG_X86_64
    default_setup_apic_routing();
    -#endif

    if (smp_sanity_check(max_cpus) < 0) {
    printk(KERN_INFO "SMP disabled\n");
    --
    1.6.4.2


    \
     
     \ /
      Last update: 2010-01-16 04:13    [W:4.566 / U:0.352 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site