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 @@
#define ES7000_TRAMPOLINE_PHYS_LOW 0x467
#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
while (!atomic_read(deassert))
......
#ifndef _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))
cpu_relax();
......
#ifndef _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 store_NMI_vector (apic->store_NMI_vector)
#define restore_NMI_vector (apic->restore_NMI_vector)
......
......@@ -6,11 +6,6 @@
#define NUMAQ_TRAMPOLINE_PHYS_LOW (0x8)
#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
* 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)
return 0;
}
static void noop_wait_for_deassert(atomic_t *deassert_not_used)
{
}
static int __init es7000_update_genapic(void)
{
apic->wakeup_cpu = wakeup_secondary_cpu_via_mip;
......@@ -194,7 +190,7 @@ static int __init es7000_update_genapic(void)
if (boot_cpu_data.x86 == 6 &&
(boot_cpu_data.x86_model >= 7 || boot_cpu_data.x86_model <= 11)) {
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;
}
......
......@@ -196,7 +196,8 @@ static void __cpuinit smp_callin(void)
* our local APIC. We have to wait for the IPI or we'll
* 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.)
......
......@@ -106,7 +106,9 @@ struct genapic apic_bigsmp = {
.wakeup_cpu = NULL,
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.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,
.store_NMI_vector = store_NMI_vector,
.restore_NMI_vector = restore_NMI_vector,
......
......@@ -87,7 +87,9 @@ struct genapic apic_default = {
.wakeup_cpu = NULL,
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.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,
.store_NMI_vector = store_NMI_vector,
.restore_NMI_vector = restore_NMI_vector,
......
......@@ -142,7 +142,9 @@ struct genapic apic_es7000 = {
.wakeup_cpu = NULL,
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.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,
.store_NMI_vector = store_NMI_vector,
.restore_NMI_vector = restore_NMI_vector,
......
......@@ -106,7 +106,10 @@ struct genapic apic_numaq = {
.wakeup_cpu = NULL,
.trampoline_phys_low = NUMAQ_TRAMPOLINE_PHYS_LOW,
.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,
.store_NMI_vector = store_NMI_vector,
.restore_NMI_vector = restore_NMI_vector,
......
......@@ -86,7 +86,9 @@ struct genapic apic_summit = {
.wakeup_cpu = NULL,
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.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,
.store_NMI_vector = store_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