aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--xen/arch/x86/apic.c1
-rw-r--r--xen/arch/x86/genapic/x2apic.c9
-rw-r--r--xen/arch/x86/smp.c5
-rw-r--r--xen/arch/x86/smpboot.c22
-rw-r--r--xen/include/asm-x86/apic.h6
-rw-r--r--xen/include/asm-x86/smp.h2
6 files changed, 5 insertions, 40 deletions
diff --git a/xen/arch/x86/apic.c b/xen/arch/x86/apic.c
index aa75e52576..b99dd1a5fd 100644
--- a/xen/arch/x86/apic.c
+++ b/xen/arch/x86/apic.c
@@ -1024,7 +1024,6 @@ __next:
if (boot_cpu_physical_apicid == -1U)
boot_cpu_physical_apicid = get_apic_id();
x86_cpu_to_apicid[0] = get_apic_id();
- cpu_2_logical_apicid[0] = get_logical_apic_id();
init_ioapic_mappings();
}
diff --git a/xen/arch/x86/genapic/x2apic.c b/xen/arch/x86/genapic/x2apic.c
index d25f87745b..a80fbd49c0 100644
--- a/xen/arch/x86/genapic/x2apic.c
+++ b/xen/arch/x86/genapic/x2apic.c
@@ -32,14 +32,15 @@
static bool_t __initdata x2apic_phys; /* By default we use logical cluster mode. */
boolean_param("x2apic_phys", x2apic_phys);
+static DEFINE_PER_CPU_READ_MOSTLY(u32, cpu_2_logical_apicid);
+
static void init_apic_ldr_x2apic_phys(void)
{
}
static void init_apic_ldr_x2apic_cluster(void)
{
- int cpu = smp_processor_id();
- cpu_2_logical_apicid[cpu] = apic_read(APIC_LDR);
+ this_cpu(cpu_2_logical_apicid) = apic_read(APIC_LDR);
}
static void __init clustered_apic_check_x2apic(void)
@@ -48,7 +49,7 @@ static void __init clustered_apic_check_x2apic(void)
static unsigned int cpu_mask_to_apicid_x2apic_cluster(const cpumask_t *cpumask)
{
- return cpu_2_logical_apicid[cpumask_first(cpumask)];
+ return per_cpu(cpu_2_logical_apicid, cpumask_first(cpumask));
}
static void __send_IPI_mask_x2apic(
@@ -77,7 +78,7 @@ static void __send_IPI_mask_x2apic(
if ( !cpu_online(cpu) || (cpu == smp_processor_id()) )
continue;
msr_content = (dest_mode == APIC_DEST_PHYSICAL)
- ? cpu_physical_id(cpu) : cpu_2_logical_apicid[cpu];
+ ? cpu_physical_id(cpu) : per_cpu(cpu_2_logical_apicid, cpu);
msr_content = (msr_content << 32) | APIC_DM_FIXED | dest_mode | vector;
apic_wrmsr(APIC_ICR, msr_content);
}
diff --git a/xen/arch/x86/smp.c b/xen/arch/x86/smp.c
index 814547bb6a..89c2b131af 100644
--- a/xen/arch/x86/smp.c
+++ b/xen/arch/x86/smp.c
@@ -28,11 +28,6 @@ int hard_smp_processor_id(void)
return get_apic_id();
}
-int logical_smp_processor_id(void)
-{
- return get_logical_apic_id();
-}
-
/*
* send_IPI_mask(cpumask, vector): sends @vector IPI to CPUs in @cpumask,
* excluding the local CPU. @cpumask may be empty.
diff --git a/xen/arch/x86/smpboot.c b/xen/arch/x86/smpboot.c
index adf897048c..fa46e43690 100644
--- a/xen/arch/x86/smpboot.c
+++ b/xen/arch/x86/smpboot.c
@@ -64,8 +64,6 @@ struct cpuinfo_x86 cpu_data[NR_CPUS];
u32 x86_cpu_to_apicid[NR_CPUS] __read_mostly =
{ [0 ... NR_CPUS-1] = BAD_APICID };
-static void map_cpu_to_logical_apicid(void);
-
static int cpu_error;
static enum cpu_state {
CPU_STATE_DYING, /* slave -> master: I am dying */
@@ -202,7 +200,6 @@ void smp_callin(void)
Dprintk("CALLIN, before setup_local_APIC().\n");
x2apic_ap_setup();
setup_local_APIC();
- map_cpu_to_logical_apicid();
/* Save our processor parameters. */
smp_store_cpu_info(cpu);
@@ -401,22 +398,6 @@ extern struct {
unsigned short ss;
} stack_start;
-u32 cpu_2_logical_apicid[NR_CPUS] __read_mostly =
- { [0 ... NR_CPUS-1] = BAD_APICID };
-
-static void map_cpu_to_logical_apicid(void)
-{
- int cpu = smp_processor_id();
- int apicid = logical_smp_processor_id();
-
- cpu_2_logical_apicid[cpu] = apicid;
-}
-
-static void unmap_cpu_to_logical_apicid(int cpu)
-{
- cpu_2_logical_apicid[cpu] = BAD_APICID;
-}
-
static int wakeup_secondary_cpu(int phys_apicid, unsigned long start_eip)
{
unsigned long send_status = 0, accept_status = 0;
@@ -646,7 +627,6 @@ static int do_boot_cpu(int apicid, int cpu)
void cpu_exit_clear(unsigned int cpu)
{
cpu_uninit(cpu);
- unmap_cpu_to_logical_apicid(cpu);
set_cpu_state(CPU_STATE_DEAD);
}
@@ -775,7 +755,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
if (APIC_init_uniprocessor())
printk(KERN_NOTICE "Local APIC not detected."
" Using dummy APIC emulation.\n");
- map_cpu_to_logical_apicid();
return;
}
@@ -804,7 +783,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
connect_bsp_APIC();
setup_local_APIC();
- map_cpu_to_logical_apicid();
smpboot_setup_io_apic();
diff --git a/xen/include/asm-x86/apic.h b/xen/include/asm-x86/apic.h
index 4e6bea962e..dd528fb93d 100644
--- a/xen/include/asm-x86/apic.h
+++ b/xen/include/asm-x86/apic.h
@@ -158,12 +158,6 @@ static __inline u32 get_apic_id(void) /* Get the physical APIC id */
return x2apic_enabled ? id : GET_xAPIC_ID(id);
}
-static __inline u32 get_logical_apic_id(void)
-{
- u32 logical_id = apic_read(APIC_LDR);
- return x2apic_enabled ? logical_id : GET_xAPIC_LOGICAL_ID(logical_id);
-}
-
void apic_wait_icr_idle(void);
int get_physical_broadcast(void);
diff --git a/xen/include/asm-x86/smp.h b/xen/include/asm-x86/smp.h
index 806abfe176..837cbde9db 100644
--- a/xen/include/asm-x86/smp.h
+++ b/xen/include/asm-x86/smp.h
@@ -37,7 +37,6 @@ extern void zap_low_mappings(void);
#define MAX_APICID 256
extern u32 x86_cpu_to_apicid[];
-extern u32 cpu_2_logical_apicid[];
#define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu]
@@ -54,7 +53,6 @@ int cpu_add(uint32_t apic_id, uint32_t acpi_id, uint32_t pxm);
#define raw_smp_processor_id() (get_processor_id())
int hard_smp_processor_id(void);
-int logical_smp_processor_id(void);
void __stop_this_cpu(void);