Commit a9659366 authored by Ingo Molnar's avatar Ingo Molnar

x86, smp: refactor ->wait_for_init_deassert()

- spread out the namespace on a per APIC driver basis

 - handle a NULL ->wait_for_init_deassert() as a 'dont wait' default method

 - remove NUMAQ and Summit handlers
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent abfa584c
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
#define ES7000_TRAMPOLINE_PHYS_LOW 0x467 #define ES7000_TRAMPOLINE_PHYS_LOW 0x467
#define ES7000_TRAMPOLINE_PHYS_HIGH 0x469 #define ES7000_TRAMPOLINE_PHYS_HIGH 0x469
static inline void wait_for_init_deassert(atomic_t *deassert) static inline void es7000_wait_for_init_deassert(atomic_t *deassert)
{ {
#ifndef CONFIG_ES7000_CLUSTERED_APIC #ifndef CONFIG_ES7000_CLUSTERED_APIC
while (!atomic_read(deassert)) while (!atomic_read(deassert))
......
#ifndef _ASM_X86_MACH_DEFAULT_MACH_WAKECPU_H #ifndef _ASM_X86_MACH_DEFAULT_MACH_WAKECPU_H
#define _ASM_X86_MACH_DEFAULT_MACH_WAKECPU_H #define _ASM_X86_MACH_DEFAULT_MACH_WAKECPU_H
static inline void wait_for_init_deassert(atomic_t *deassert) static inline void default_wait_for_init_deassert(atomic_t *deassert)
{ {
while (!atomic_read(deassert)) while (!atomic_read(deassert))
cpu_relax(); cpu_relax();
......
#ifndef _ASM_X86_MACH_GENERIC_MACH_WAKECPU_H #ifndef _ASM_X86_MACH_GENERIC_MACH_WAKECPU_H
#define _ASM_X86_MACH_GENERIC_MACH_WAKECPU_H #define _ASM_X86_MACH_GENERIC_MACH_WAKECPU_H
#define wait_for_init_deassert (apic->wait_for_init_deassert)
#define smp_callin_clear_local_apic (apic->smp_callin_clear_local_apic) #define smp_callin_clear_local_apic (apic->smp_callin_clear_local_apic)
#define store_NMI_vector (apic->store_NMI_vector) #define store_NMI_vector (apic->store_NMI_vector)
#define restore_NMI_vector (apic->restore_NMI_vector) #define restore_NMI_vector (apic->restore_NMI_vector)
......
...@@ -6,11 +6,6 @@ ...@@ -6,11 +6,6 @@
#define NUMAQ_TRAMPOLINE_PHYS_LOW (0x8) #define NUMAQ_TRAMPOLINE_PHYS_LOW (0x8)
#define NUMAQ_TRAMPOLINE_PHYS_HIGH (0xa) #define NUMAQ_TRAMPOLINE_PHYS_HIGH (0xa)
/* We don't do anything here because we use NMI's to boot instead */
static inline void wait_for_init_deassert(atomic_t *deassert)
{
}
/* /*
* Because we use NMIs rather than the INIT-STARTUP sequence to * Because we use NMIs rather than the INIT-STARTUP sequence to
* bootstrap the CPUs, the APIC may be in a weird state. Kick it. * bootstrap the CPUs, the APIC may be in a weird state. Kick it.
......
...@@ -182,10 +182,6 @@ static int wakeup_secondary_cpu_via_mip(int cpu, unsigned long eip) ...@@ -182,10 +182,6 @@ static int wakeup_secondary_cpu_via_mip(int cpu, unsigned long eip)
return 0; return 0;
} }
static void noop_wait_for_deassert(atomic_t *deassert_not_used)
{
}
static int __init es7000_update_genapic(void) static int __init es7000_update_genapic(void)
{ {
apic->wakeup_cpu = wakeup_secondary_cpu_via_mip; apic->wakeup_cpu = wakeup_secondary_cpu_via_mip;
...@@ -194,7 +190,7 @@ static int __init es7000_update_genapic(void) ...@@ -194,7 +190,7 @@ static int __init es7000_update_genapic(void)
if (boot_cpu_data.x86 == 6 && if (boot_cpu_data.x86 == 6 &&
(boot_cpu_data.x86_model >= 7 || boot_cpu_data.x86_model <= 11)) { (boot_cpu_data.x86_model >= 7 || boot_cpu_data.x86_model <= 11)) {
es7000_update_genapic_to_cluster(); es7000_update_genapic_to_cluster();
apic->wait_for_init_deassert = noop_wait_for_deassert; apic->wait_for_init_deassert = NULL;
apic->wakeup_cpu = wakeup_secondary_cpu_via_mip; apic->wakeup_cpu = wakeup_secondary_cpu_via_mip;
} }
......
...@@ -196,7 +196,8 @@ static void __cpuinit smp_callin(void) ...@@ -196,7 +196,8 @@ static void __cpuinit smp_callin(void)
* our local APIC. We have to wait for the IPI or we'll * our local APIC. We have to wait for the IPI or we'll
* lock up on an APIC access. * lock up on an APIC access.
*/ */
wait_for_init_deassert(&init_deasserted); if (apic->wait_for_init_deassert)
apic->wait_for_init_deassert(&init_deasserted);
/* /*
* (This works even if the APIC is not enabled.) * (This works even if the APIC is not enabled.)
......
...@@ -106,7 +106,9 @@ struct genapic apic_bigsmp = { ...@@ -106,7 +106,9 @@ struct genapic apic_bigsmp = {
.wakeup_cpu = NULL, .wakeup_cpu = NULL,
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
.wait_for_init_deassert = wait_for_init_deassert,
.wait_for_init_deassert = default_wait_for_init_deassert,
.smp_callin_clear_local_apic = smp_callin_clear_local_apic, .smp_callin_clear_local_apic = smp_callin_clear_local_apic,
.store_NMI_vector = store_NMI_vector, .store_NMI_vector = store_NMI_vector,
.restore_NMI_vector = restore_NMI_vector, .restore_NMI_vector = restore_NMI_vector,
......
...@@ -87,7 +87,9 @@ struct genapic apic_default = { ...@@ -87,7 +87,9 @@ struct genapic apic_default = {
.wakeup_cpu = NULL, .wakeup_cpu = NULL,
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
.wait_for_init_deassert = wait_for_init_deassert,
.wait_for_init_deassert = default_wait_for_init_deassert,
.smp_callin_clear_local_apic = smp_callin_clear_local_apic, .smp_callin_clear_local_apic = smp_callin_clear_local_apic,
.store_NMI_vector = store_NMI_vector, .store_NMI_vector = store_NMI_vector,
.restore_NMI_vector = restore_NMI_vector, .restore_NMI_vector = restore_NMI_vector,
......
...@@ -142,7 +142,9 @@ struct genapic apic_es7000 = { ...@@ -142,7 +142,9 @@ struct genapic apic_es7000 = {
.wakeup_cpu = NULL, .wakeup_cpu = NULL,
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
.wait_for_init_deassert = wait_for_init_deassert,
.wait_for_init_deassert = default_wait_for_init_deassert,
.smp_callin_clear_local_apic = smp_callin_clear_local_apic, .smp_callin_clear_local_apic = smp_callin_clear_local_apic,
.store_NMI_vector = store_NMI_vector, .store_NMI_vector = store_NMI_vector,
.restore_NMI_vector = restore_NMI_vector, .restore_NMI_vector = restore_NMI_vector,
......
...@@ -106,7 +106,10 @@ struct genapic apic_numaq = { ...@@ -106,7 +106,10 @@ struct genapic apic_numaq = {
.wakeup_cpu = NULL, .wakeup_cpu = NULL,
.trampoline_phys_low = NUMAQ_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = NUMAQ_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = NUMAQ_TRAMPOLINE_PHYS_HIGH, .trampoline_phys_high = NUMAQ_TRAMPOLINE_PHYS_HIGH,
.wait_for_init_deassert = wait_for_init_deassert,
/* We don't do anything here because we use NMI's to boot instead */
.wait_for_init_deassert = NULL,
.smp_callin_clear_local_apic = smp_callin_clear_local_apic, .smp_callin_clear_local_apic = smp_callin_clear_local_apic,
.store_NMI_vector = store_NMI_vector, .store_NMI_vector = store_NMI_vector,
.restore_NMI_vector = restore_NMI_vector, .restore_NMI_vector = restore_NMI_vector,
......
...@@ -86,7 +86,9 @@ struct genapic apic_summit = { ...@@ -86,7 +86,9 @@ struct genapic apic_summit = {
.wakeup_cpu = NULL, .wakeup_cpu = NULL,
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
.wait_for_init_deassert = wait_for_init_deassert,
.wait_for_init_deassert = default_wait_for_init_deassert,
.smp_callin_clear_local_apic = smp_callin_clear_local_apic, .smp_callin_clear_local_apic = smp_callin_clear_local_apic,
.store_NMI_vector = store_NMI_vector, .store_NMI_vector = store_NMI_vector,
.restore_NMI_vector = restore_NMI_vector, .restore_NMI_vector = restore_NMI_vector,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment