lkml.org 
[lkml]   [2008]   [Jan]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 3/3] x86: Change bios_cpu_apicid to percpu data variable fixup
    Change static bios_cpu_apicid array to a per_cpu data variable.
    This includes using a static array used during initialization
    similar to the way x86_cpu_to_apicid[] is handled.

    There is one early use of bios_cpu_apicid in apic_is_clustered_box().
    The other reference in cpu_present_to_apicid() is called after
    smp_set_apicids() has setup the percpu version of bios_cpu_apicid.


    Signed-off-by: Mike Travis <travis@sgi.com>
    Reviewed-by: Christoph Lameter <clameter@sgi.com>
    ---
    V1->V2:
    - Removed extraneous casts
    - Add slight optimization to apic_is_clustered_box()
    [don't reference x86_bios_cpu_apicid_early_ptr each pass.]
    ---
    arch/x86/kernel/apic_64.c | 6 +++---
    arch/x86/kernel/setup64.c | 3 +++
    arch/x86/kernel/setup_64.c | 1 +
    3 files changed, 7 insertions(+), 3 deletions(-)

    --- a/arch/x86/kernel/apic_64.c
    +++ b/arch/x86/kernel/apic_64.c
    @@ -1191,9 +1191,9 @@ __cpuinit int apic_is_clustered_box(void

    /* Problem: Partially populated chassis may not have CPUs in some of
    * the APIC clusters they have been allocated. Only present CPUs have
    - * x86_bios_cpu_apicid entries, thus causing zeroes in the bitmap. Since
    - * clusters are allocated sequentially, count zeros only if they are
    - * bounded by ones.
    + * x86_bios_cpu_apicid entries, thus causing zeroes in the bitmap.
    + * Since clusters are allocated sequentially, count zeros only if
    + * they are bounded by ones.
    */
    clusters = 0;
    zeros = 0;
    --- a/arch/x86/kernel/setup64.c
    +++ b/arch/x86/kernel/setup64.c
    @@ -96,6 +96,8 @@ void __init setup_percpu_maps(void)
    if (per_cpu_offset(cpu)) {
    per_cpu(x86_cpu_to_apicid, cpu) =
    x86_cpu_to_apicid_init[cpu];
    + per_cpu(x86_bios_cpu_apicid, cpu) =
    + x86_bios_cpu_apicid_init[cpu];
    #ifdef CONFIG_NUMA
    per_cpu(x86_cpu_to_node_map, cpu) =
    x86_cpu_to_node_map_init[cpu];
    @@ -108,6 +110,7 @@ void __init setup_percpu_maps(void)

    /* indicate the early static arrays are gone */
    x86_cpu_to_apicid_early_ptr = NULL;
    + x86_bios_cpu_apicid_early_ptr = NULL;
    #ifdef CONFIG_NUMA
    x86_cpu_to_node_map_early_ptr = NULL;
    #endif
    --- a/arch/x86/kernel/setup_64.c
    +++ b/arch/x86/kernel/setup_64.c
    @@ -390,6 +390,7 @@ void __init setup_arch(char **cmdline_p)
    #ifdef CONFIG_SMP
    /* setup to use the early static init tables during kernel startup */
    x86_cpu_to_apicid_early_ptr = (void *)&x86_cpu_to_apicid_init;
    + x86_bios_cpu_apicid_early_ptr = (void *)&x86_bios_cpu_apicid_init;
    #ifdef CONFIG_NUMA
    x86_cpu_to_node_map_early_ptr = (void *)&x86_cpu_to_node_map_init;
    #endif
    --


    \
     
     \ /
      Last update: 2008-01-17 23:41    [W:0.024 / U:2.612 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site