diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-01-28 10:31:52 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-01-28 17:20:33 -0500 |
commit | 333344d94300500e401cffb4eea10a5ab6e5a41d (patch) | |
tree | 21dd26c49dfba195a03e2fa860fe4d3123ca3de8 | |
parent | a965936643e28af8152d9e960b966baa1a5588a2 (diff) |
x86, smp: refactor ->smp_callin_clear_local_apic() methods
Only NUMAQ does something substantial here, because it initializes
via NMIs (not via INIT as standard SMP startup) - so it needs to
reset the APIC.
- extend the generic code to handle NULL methods
- clear out dummy methods and replace them with NULL
- clean up: remove wrapper macros, etc.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r-- | arch/x86/include/asm/es7000/wakecpu.h | 5 | ||||
-rw-r--r-- | arch/x86/include/asm/mach-default/mach_wakecpu.h | 5 | ||||
-rw-r--r-- | arch/x86/include/asm/mach-generic/mach_wakecpu.h | 1 | ||||
-rw-r--r-- | arch/x86/include/asm/numaq/wakecpu.h | 4 | ||||
-rw-r--r-- | arch/x86/kernel/smpboot.c | 3 | ||||
-rw-r--r-- | arch/x86/mach-generic/bigsmp.c | 3 | ||||
-rw-r--r-- | arch/x86/mach-generic/default.c | 2 | ||||
-rw-r--r-- | arch/x86/mach-generic/es7000.c | 4 | ||||
-rw-r--r-- | arch/x86/mach-generic/numaq.c | 2 | ||||
-rw-r--r-- | arch/x86/mach-generic/summit.c | 3 |
10 files changed, 13 insertions, 19 deletions
diff --git a/arch/x86/include/asm/es7000/wakecpu.h b/arch/x86/include/asm/es7000/wakecpu.h index 5c4d05f46d2d..e8e03962633b 100644 --- a/arch/x86/include/asm/es7000/wakecpu.h +++ b/arch/x86/include/asm/es7000/wakecpu.h | |||
@@ -13,11 +13,6 @@ static inline void es7000_wait_for_init_deassert(atomic_t *deassert) | |||
13 | return; | 13 | return; |
14 | } | 14 | } |
15 | 15 | ||
16 | /* Nothing to do for most platforms, since cleared by the INIT cycle */ | ||
17 | static inline void smp_callin_clear_local_apic(void) | ||
18 | { | ||
19 | } | ||
20 | |||
21 | static inline void store_NMI_vector(unsigned short *high, unsigned short *low) | 16 | static inline void store_NMI_vector(unsigned short *high, unsigned short *low) |
22 | { | 17 | { |
23 | } | 18 | } |
diff --git a/arch/x86/include/asm/mach-default/mach_wakecpu.h b/arch/x86/include/asm/mach-default/mach_wakecpu.h index 1d34c69a758b..d059807cd7e8 100644 --- a/arch/x86/include/asm/mach-default/mach_wakecpu.h +++ b/arch/x86/include/asm/mach-default/mach_wakecpu.h | |||
@@ -8,11 +8,6 @@ static inline void default_wait_for_init_deassert(atomic_t *deassert) | |||
8 | return; | 8 | return; |
9 | } | 9 | } |
10 | 10 | ||
11 | /* Nothing to do for most platforms, since cleared by the INIT cycle */ | ||
12 | static inline void smp_callin_clear_local_apic(void) | ||
13 | { | ||
14 | } | ||
15 | |||
16 | static inline void store_NMI_vector(unsigned short *high, unsigned short *low) | 11 | static inline void store_NMI_vector(unsigned short *high, unsigned short *low) |
17 | { | 12 | { |
18 | } | 13 | } |
diff --git a/arch/x86/include/asm/mach-generic/mach_wakecpu.h b/arch/x86/include/asm/mach-generic/mach_wakecpu.h index 58e54122f730..30515a154d8e 100644 --- a/arch/x86/include/asm/mach-generic/mach_wakecpu.h +++ b/arch/x86/include/asm/mach-generic/mach_wakecpu.h | |||
@@ -1,7 +1,6 @@ | |||
1 | #ifndef _ASM_X86_MACH_GENERIC_MACH_WAKECPU_H | 1 | #ifndef _ASM_X86_MACH_GENERIC_MACH_WAKECPU_H |
2 | #define _ASM_X86_MACH_GENERIC_MACH_WAKECPU_H | 2 | #define _ASM_X86_MACH_GENERIC_MACH_WAKECPU_H |
3 | 3 | ||
4 | #define smp_callin_clear_local_apic (apic->smp_callin_clear_local_apic) | ||
5 | #define store_NMI_vector (apic->store_NMI_vector) | 4 | #define store_NMI_vector (apic->store_NMI_vector) |
6 | #define restore_NMI_vector (apic->restore_NMI_vector) | 5 | #define restore_NMI_vector (apic->restore_NMI_vector) |
7 | #define inquire_remote_apic (apic->inquire_remote_apic) | 6 | #define inquire_remote_apic (apic->inquire_remote_apic) |
diff --git a/arch/x86/include/asm/numaq/wakecpu.h b/arch/x86/include/asm/numaq/wakecpu.h index 884b95cf5846..61d0a7d96136 100644 --- a/arch/x86/include/asm/numaq/wakecpu.h +++ b/arch/x86/include/asm/numaq/wakecpu.h | |||
@@ -8,9 +8,9 @@ | |||
8 | 8 | ||
9 | /* | 9 | /* |
10 | * Because we use NMIs rather than the INIT-STARTUP sequence to | 10 | * Because we use NMIs rather than the INIT-STARTUP sequence to |
11 | * bootstrap the CPUs, the APIC may be in a weird state. Kick it. | 11 | * bootstrap the CPUs, the APIC may be in a weird state. Kick it: |
12 | */ | 12 | */ |
13 | static inline void smp_callin_clear_local_apic(void) | 13 | static inline void numaq_smp_callin_clear_local_apic(void) |
14 | { | 14 | { |
15 | clear_local_APIC(); | 15 | clear_local_APIC(); |
16 | } | 16 | } |
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 558af378a61d..10873a46b299 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c | |||
@@ -244,7 +244,8 @@ static void __cpuinit smp_callin(void) | |||
244 | */ | 244 | */ |
245 | 245 | ||
246 | pr_debug("CALLIN, before setup_local_APIC().\n"); | 246 | pr_debug("CALLIN, before setup_local_APIC().\n"); |
247 | smp_callin_clear_local_apic(); | 247 | if (apic->smp_callin_clear_local_apic) |
248 | apic->smp_callin_clear_local_apic(); | ||
248 | setup_local_APIC(); | 249 | setup_local_APIC(); |
249 | end_local_APIC_setup(); | 250 | end_local_APIC_setup(); |
250 | map_cpu_to_logical_apicid(); | 251 | map_cpu_to_logical_apicid(); |
diff --git a/arch/x86/mach-generic/bigsmp.c b/arch/x86/mach-generic/bigsmp.c index 40910bfd1b42..bd069e7b521c 100644 --- a/arch/x86/mach-generic/bigsmp.c +++ b/arch/x86/mach-generic/bigsmp.c | |||
@@ -109,7 +109,8 @@ struct genapic apic_bigsmp = { | |||
109 | 109 | ||
110 | .wait_for_init_deassert = default_wait_for_init_deassert, | 110 | .wait_for_init_deassert = default_wait_for_init_deassert, |
111 | 111 | ||
112 | .smp_callin_clear_local_apic = smp_callin_clear_local_apic, | 112 | .smp_callin_clear_local_apic = NULL, |
113 | |||
113 | .store_NMI_vector = store_NMI_vector, | 114 | .store_NMI_vector = store_NMI_vector, |
114 | .restore_NMI_vector = restore_NMI_vector, | 115 | .restore_NMI_vector = restore_NMI_vector, |
115 | .inquire_remote_apic = inquire_remote_apic, | 116 | .inquire_remote_apic = inquire_remote_apic, |
diff --git a/arch/x86/mach-generic/default.c b/arch/x86/mach-generic/default.c index c2464843df9e..a25e6eff048f 100644 --- a/arch/x86/mach-generic/default.c +++ b/arch/x86/mach-generic/default.c | |||
@@ -90,7 +90,7 @@ struct genapic apic_default = { | |||
90 | 90 | ||
91 | .wait_for_init_deassert = default_wait_for_init_deassert, | 91 | .wait_for_init_deassert = default_wait_for_init_deassert, |
92 | 92 | ||
93 | .smp_callin_clear_local_apic = smp_callin_clear_local_apic, | 93 | .smp_callin_clear_local_apic = NULL, |
94 | .store_NMI_vector = store_NMI_vector, | 94 | .store_NMI_vector = store_NMI_vector, |
95 | .restore_NMI_vector = restore_NMI_vector, | 95 | .restore_NMI_vector = restore_NMI_vector, |
96 | .inquire_remote_apic = inquire_remote_apic, | 96 | .inquire_remote_apic = inquire_remote_apic, |
diff --git a/arch/x86/mach-generic/es7000.c b/arch/x86/mach-generic/es7000.c index 4cb3984834ed..ab41b5439145 100644 --- a/arch/x86/mach-generic/es7000.c +++ b/arch/x86/mach-generic/es7000.c | |||
@@ -145,7 +145,9 @@ struct genapic apic_es7000 = { | |||
145 | 145 | ||
146 | .wait_for_init_deassert = default_wait_for_init_deassert, | 146 | .wait_for_init_deassert = default_wait_for_init_deassert, |
147 | 147 | ||
148 | .smp_callin_clear_local_apic = smp_callin_clear_local_apic, | 148 | /* Nothing to do for most platforms, since cleared by the INIT cycle: */ |
149 | .smp_callin_clear_local_apic = NULL, | ||
150 | |||
149 | .store_NMI_vector = store_NMI_vector, | 151 | .store_NMI_vector = store_NMI_vector, |
150 | .restore_NMI_vector = restore_NMI_vector, | 152 | .restore_NMI_vector = restore_NMI_vector, |
151 | .inquire_remote_apic = inquire_remote_apic, | 153 | .inquire_remote_apic = inquire_remote_apic, |
diff --git a/arch/x86/mach-generic/numaq.c b/arch/x86/mach-generic/numaq.c index fb03867e7c0f..4d3924f8cd0b 100644 --- a/arch/x86/mach-generic/numaq.c +++ b/arch/x86/mach-generic/numaq.c | |||
@@ -110,7 +110,7 @@ struct genapic apic_numaq = { | |||
110 | /* We don't do anything here because we use NMI's to boot instead */ | 110 | /* We don't do anything here because we use NMI's to boot instead */ |
111 | .wait_for_init_deassert = NULL, | 111 | .wait_for_init_deassert = NULL, |
112 | 112 | ||
113 | .smp_callin_clear_local_apic = smp_callin_clear_local_apic, | 113 | .smp_callin_clear_local_apic = numaq_smp_callin_clear_local_apic, |
114 | .store_NMI_vector = store_NMI_vector, | 114 | .store_NMI_vector = store_NMI_vector, |
115 | .restore_NMI_vector = restore_NMI_vector, | 115 | .restore_NMI_vector = restore_NMI_vector, |
116 | .inquire_remote_apic = inquire_remote_apic, | 116 | .inquire_remote_apic = inquire_remote_apic, |
diff --git a/arch/x86/mach-generic/summit.c b/arch/x86/mach-generic/summit.c index fdca78b96b6a..2595baa7997e 100644 --- a/arch/x86/mach-generic/summit.c +++ b/arch/x86/mach-generic/summit.c | |||
@@ -89,7 +89,8 @@ struct genapic apic_summit = { | |||
89 | 89 | ||
90 | .wait_for_init_deassert = default_wait_for_init_deassert, | 90 | .wait_for_init_deassert = default_wait_for_init_deassert, |
91 | 91 | ||
92 | .smp_callin_clear_local_apic = smp_callin_clear_local_apic, | 92 | .smp_callin_clear_local_apic = NULL, |
93 | |||
93 | .store_NMI_vector = store_NMI_vector, | 94 | .store_NMI_vector = store_NMI_vector, |
94 | .restore_NMI_vector = restore_NMI_vector, | 95 | .restore_NMI_vector = restore_NMI_vector, |
95 | .inquire_remote_apic = inquire_remote_apic, | 96 | .inquire_remote_apic = inquire_remote_apic, |