Skip to content

Commit

Permalink
x86, smp: refactor ->wait_for_init_deassert()
Browse files Browse the repository at this point in the history
- 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: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Ingo Molnar committed Jan 28, 2009
1 parent abfa584 commit a965936
Show file tree
Hide file tree
Showing 11 changed files with 21 additions and 19 deletions.
2 changes: 1 addition & 1 deletion arch/x86/include/asm/es7000/wakecpu.h
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down
2 changes: 1 addition & 1 deletion arch/x86/include/asm/mach-default/mach_wakecpu.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#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();
Expand Down
1 change: 0 additions & 1 deletion arch/x86/include/asm/mach-generic/mach_wakecpu.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
#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)
Expand Down
5 changes: 0 additions & 5 deletions arch/x86/include/asm/numaq/wakecpu.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
6 changes: 1 addition & 5 deletions arch/x86/kernel/es7000_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
}

Expand Down
3 changes: 2 additions & 1 deletion arch/x86/kernel/smpboot.c
Original file line number Diff line number Diff line change
Expand Up @@ -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.)
Expand Down
4 changes: 3 additions & 1 deletion arch/x86/mach-generic/bigsmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
4 changes: 3 additions & 1 deletion arch/x86/mach-generic/default.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
4 changes: 3 additions & 1 deletion arch/x86/mach-generic/es7000.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
5 changes: 4 additions & 1 deletion arch/x86/mach-generic/numaq.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
4 changes: 3 additions & 1 deletion arch/x86/mach-generic/summit.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit a965936

Please sign in to comment.