x86: Implement x86_32_early_logical_apicid() for summit_32
authorTejun Heo <tj@kernel.org>
Sun, 23 Jan 2011 13:37:36 +0000 (14:37 +0100)
committerIngo Molnar <mingo@elte.hu>
Fri, 28 Jan 2011 13:54:07 +0000 (14:54 +0100)
Factor out logical apic id calculation from
summit_init_apic_ldr() and use it for the
x86_32_early_logical_apicid() callback.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: eric.dumazet@gmail.com
Cc: yinghai@kernel.org
Cc: brgerst@gmail.com
Cc: gorcunov@gmail.com
Cc: penberg@kernel.org
Cc: shaohui.zheng@intel.com
Cc: rientjes@google.com
LKML-Reference: <1295789862-25482-11-git-send-email-tj@kernel.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/kernel/apic/summit_32.c

index 172c498e888f65ff7f9b76e9636f314475e49bcb..8c91473216164f4b1815ca4fd21657dde7c7cbe0 100644 (file)
@@ -194,11 +194,10 @@ static unsigned long summit_check_apicid_present(int bit)
        return 1;
 }
 
-static void summit_init_apic_ldr(void)
+static int summit_early_logical_apicid(int cpu)
 {
-       unsigned long val, id;
        int count = 0;
-       u8 my_id = (u8)hard_smp_processor_id();
+       u8 my_id = early_per_cpu(x86_cpu_to_apicid, cpu);
        u8 my_cluster = APIC_CLUSTER(my_id);
 #ifdef CONFIG_SMP
        u8 lid;
@@ -214,7 +213,15 @@ static void summit_init_apic_ldr(void)
        /* We only have a 4 wide bitmap in cluster mode.  If a deranged
         * BIOS puts 5 CPUs in one APIC cluster, we're hosed. */
        BUG_ON(count >= XAPIC_DEST_CPUS_SHIFT);
-       id = my_cluster | (1UL << count);
+       return my_cluster | (1UL << count);
+}
+
+static void summit_init_apic_ldr(void)
+{
+       int cpu = smp_processor_id();
+       unsigned long id = early_per_cpu(x86_cpu_to_logical_apicid, cpu);
+       unsigned long val;
+
        apic_write(APIC_DFR, SUMMIT_APIC_DFR_VALUE);
        val = apic_read(APIC_LDR) & ~APIC_LDR_MASK;
        val |= SET_APIC_LOGICAL_ID(id);
@@ -553,5 +560,5 @@ struct apic apic_summit = {
        .wait_icr_idle                  = native_apic_wait_icr_idle,
        .safe_wait_icr_idle             = native_safe_apic_wait_icr_idle,
 
-       .x86_32_early_logical_apicid    = noop_x86_32_early_logical_apicid,
+       .x86_32_early_logical_apicid    = summit_early_logical_apicid,
 };