diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-02-26 07:51:40 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-02-26 07:58:26 -0500 |
commit | 1f5bcabf1b997d6b76a09114b5a79423495a1263 (patch) | |
tree | e933ed3b2f534d6014fdbaa9d8210d7d1919f7cb | |
parent | 0917c01f8e793f57a53cf886533d4c75c67f6e89 (diff) |
x86: apic: simplify secondary CPU wakeup methods
Impact: cleanup
- rename apic->wakeup_cpu to apic->wakeup_secondary_cpu, to
make it apparent that this is an SMP-only method
- handle NULL ->wakeup_secondary_cpus to mean the default INIT
wakeup sequence - this allows simplification of the APIC
driver templates.
Cc: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r-- | arch/x86/include/asm/apic.h | 9 | ||||
-rw-r--r-- | arch/x86/kernel/apic/apic_flat_64.c | 2 | ||||
-rw-r--r-- | arch/x86/kernel/apic/bigsmp_32.c | 1 | ||||
-rw-r--r-- | arch/x86/kernel/apic/es7000_32.c | 4 | ||||
-rw-r--r-- | arch/x86/kernel/apic/numaq_32.c | 2 | ||||
-rw-r--r-- | arch/x86/kernel/apic/probe_32.c | 1 | ||||
-rw-r--r-- | arch/x86/kernel/apic/summit_32.c | 1 | ||||
-rw-r--r-- | arch/x86/kernel/apic/x2apic_cluster.c | 1 | ||||
-rw-r--r-- | arch/x86/kernel/apic/x2apic_phys.c | 1 | ||||
-rw-r--r-- | arch/x86/kernel/apic/x2apic_uv_x.c | 2 | ||||
-rw-r--r-- | arch/x86/kernel/smpboot.c | 11 |
11 files changed, 12 insertions, 23 deletions
diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h index 0fbf6f1520fa..4ef949c1972e 100644 --- a/arch/x86/include/asm/apic.h +++ b/arch/x86/include/asm/apic.h | |||
@@ -313,7 +313,7 @@ struct apic { | |||
313 | void (*send_IPI_self)(int vector); | 313 | void (*send_IPI_self)(int vector); |
314 | 314 | ||
315 | /* wakeup_secondary_cpu */ | 315 | /* wakeup_secondary_cpu */ |
316 | int (*wakeup_cpu)(int apicid, unsigned long start_eip); | 316 | int (*wakeup_secondary_cpu)(int apicid, unsigned long start_eip); |
317 | 317 | ||
318 | int trampoline_phys_low; | 318 | int trampoline_phys_low; |
319 | int trampoline_phys_high; | 319 | int trampoline_phys_high; |
@@ -344,13 +344,6 @@ extern struct apic *apic; | |||
344 | #ifdef CONFIG_SMP | 344 | #ifdef CONFIG_SMP |
345 | extern atomic_t init_deasserted; | 345 | extern atomic_t init_deasserted; |
346 | extern int wakeup_secondary_cpu_via_nmi(int apicid, unsigned long start_eip); | 346 | extern int wakeup_secondary_cpu_via_nmi(int apicid, unsigned long start_eip); |
347 | extern int wakeup_secondary_cpu_via_init(int apicid, unsigned long start_eip); | ||
348 | #else | ||
349 | static inline int | ||
350 | wakeup_secondary_cpu_via_init(int apicid, unsigned long start_eip) | ||
351 | { | ||
352 | return 0; | ||
353 | } | ||
354 | #endif | 347 | #endif |
355 | 348 | ||
356 | static inline u32 apic_read(u32 reg) | 349 | static inline u32 apic_read(u32 reg) |
diff --git a/arch/x86/kernel/apic/apic_flat_64.c b/arch/x86/kernel/apic/apic_flat_64.c index 00595bc2da8d..f933822dba18 100644 --- a/arch/x86/kernel/apic/apic_flat_64.c +++ b/arch/x86/kernel/apic/apic_flat_64.c | |||
@@ -222,7 +222,6 @@ struct apic apic_flat = { | |||
222 | .send_IPI_all = flat_send_IPI_all, | 222 | .send_IPI_all = flat_send_IPI_all, |
223 | .send_IPI_self = apic_send_IPI_self, | 223 | .send_IPI_self = apic_send_IPI_self, |
224 | 224 | ||
225 | .wakeup_cpu = wakeup_secondary_cpu_via_init, | ||
226 | .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, | 225 | .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, |
227 | .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, | 226 | .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, |
228 | .wait_for_init_deassert = NULL, | 227 | .wait_for_init_deassert = NULL, |
@@ -373,7 +372,6 @@ struct apic apic_physflat = { | |||
373 | .send_IPI_all = physflat_send_IPI_all, | 372 | .send_IPI_all = physflat_send_IPI_all, |
374 | .send_IPI_self = apic_send_IPI_self, | 373 | .send_IPI_self = apic_send_IPI_self, |
375 | 374 | ||
376 | .wakeup_cpu = wakeup_secondary_cpu_via_init, | ||
377 | .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, | 375 | .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, |
378 | .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, | 376 | .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, |
379 | .wait_for_init_deassert = NULL, | 377 | .wait_for_init_deassert = NULL, |
diff --git a/arch/x86/kernel/apic/bigsmp_32.c b/arch/x86/kernel/apic/bigsmp_32.c index 8c25917b51a0..69c512e23a9f 100644 --- a/arch/x86/kernel/apic/bigsmp_32.c +++ b/arch/x86/kernel/apic/bigsmp_32.c | |||
@@ -256,7 +256,6 @@ struct apic apic_bigsmp = { | |||
256 | .send_IPI_all = bigsmp_send_IPI_all, | 256 | .send_IPI_all = bigsmp_send_IPI_all, |
257 | .send_IPI_self = default_send_IPI_self, | 257 | .send_IPI_self = default_send_IPI_self, |
258 | 258 | ||
259 | .wakeup_cpu = wakeup_secondary_cpu_via_init, | ||
260 | .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, | 259 | .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, |
261 | .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, | 260 | .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, |
262 | 261 | ||
diff --git a/arch/x86/kernel/apic/es7000_32.c b/arch/x86/kernel/apic/es7000_32.c index 9f6102fc87a1..b4838ed3f26a 100644 --- a/arch/x86/kernel/apic/es7000_32.c +++ b/arch/x86/kernel/apic/es7000_32.c | |||
@@ -741,7 +741,7 @@ struct apic apic_es7000_cluster = { | |||
741 | .send_IPI_all = es7000_send_IPI_all, | 741 | .send_IPI_all = es7000_send_IPI_all, |
742 | .send_IPI_self = default_send_IPI_self, | 742 | .send_IPI_self = default_send_IPI_self, |
743 | 743 | ||
744 | .wakeup_cpu = wakeup_secondary_cpu_via_mip, | 744 | .wakeup_secondary_cpu = wakeup_secondary_cpu_via_mip, |
745 | 745 | ||
746 | .trampoline_phys_low = 0x467, | 746 | .trampoline_phys_low = 0x467, |
747 | .trampoline_phys_high = 0x469, | 747 | .trampoline_phys_high = 0x469, |
@@ -806,8 +806,6 @@ struct apic apic_es7000 = { | |||
806 | .send_IPI_all = es7000_send_IPI_all, | 806 | .send_IPI_all = es7000_send_IPI_all, |
807 | .send_IPI_self = default_send_IPI_self, | 807 | .send_IPI_self = default_send_IPI_self, |
808 | 808 | ||
809 | .wakeup_cpu = wakeup_secondary_cpu_via_init, | ||
810 | |||
811 | .trampoline_phys_low = 0x467, | 809 | .trampoline_phys_low = 0x467, |
812 | .trampoline_phys_high = 0x469, | 810 | .trampoline_phys_high = 0x469, |
813 | 811 | ||
diff --git a/arch/x86/kernel/apic/numaq_32.c b/arch/x86/kernel/apic/numaq_32.c index c503c1799d63..a7f711f5110a 100644 --- a/arch/x86/kernel/apic/numaq_32.c +++ b/arch/x86/kernel/apic/numaq_32.c | |||
@@ -538,7 +538,7 @@ struct apic apic_numaq = { | |||
538 | .send_IPI_all = numaq_send_IPI_all, | 538 | .send_IPI_all = numaq_send_IPI_all, |
539 | .send_IPI_self = default_send_IPI_self, | 539 | .send_IPI_self = default_send_IPI_self, |
540 | 540 | ||
541 | .wakeup_cpu = wakeup_secondary_cpu_via_nmi, | 541 | .wakeup_secondary_cpu = wakeup_secondary_cpu_via_nmi, |
542 | .trampoline_phys_low = NUMAQ_TRAMPOLINE_PHYS_LOW, | 542 | .trampoline_phys_low = NUMAQ_TRAMPOLINE_PHYS_LOW, |
543 | .trampoline_phys_high = NUMAQ_TRAMPOLINE_PHYS_HIGH, | 543 | .trampoline_phys_high = NUMAQ_TRAMPOLINE_PHYS_HIGH, |
544 | 544 | ||
diff --git a/arch/x86/kernel/apic/probe_32.c b/arch/x86/kernel/apic/probe_32.c index 13c6fc7dff99..141c99a1c264 100644 --- a/arch/x86/kernel/apic/probe_32.c +++ b/arch/x86/kernel/apic/probe_32.c | |||
@@ -138,7 +138,6 @@ struct apic apic_default = { | |||
138 | .send_IPI_all = default_send_IPI_all, | 138 | .send_IPI_all = default_send_IPI_all, |
139 | .send_IPI_self = default_send_IPI_self, | 139 | .send_IPI_self = default_send_IPI_self, |
140 | 140 | ||
141 | .wakeup_cpu = wakeup_secondary_cpu_via_init, | ||
142 | .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, | 141 | .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, |
143 | .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, | 142 | .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, |
144 | 143 | ||
diff --git a/arch/x86/kernel/apic/summit_32.c b/arch/x86/kernel/apic/summit_32.c index 5a75d563f676..0a1135c5a6de 100644 --- a/arch/x86/kernel/apic/summit_32.c +++ b/arch/x86/kernel/apic/summit_32.c | |||
@@ -574,7 +574,6 @@ struct apic apic_summit = { | |||
574 | .send_IPI_all = summit_send_IPI_all, | 574 | .send_IPI_all = summit_send_IPI_all, |
575 | .send_IPI_self = default_send_IPI_self, | 575 | .send_IPI_self = default_send_IPI_self, |
576 | 576 | ||
577 | .wakeup_cpu = wakeup_secondary_cpu_via_init, | ||
578 | .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, | 577 | .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, |
579 | .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, | 578 | .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, |
580 | 579 | ||
diff --git a/arch/x86/kernel/apic/x2apic_cluster.c b/arch/x86/kernel/apic/x2apic_cluster.c index 561a6b1042ae..8fb87b6dd633 100644 --- a/arch/x86/kernel/apic/x2apic_cluster.c +++ b/arch/x86/kernel/apic/x2apic_cluster.c | |||
@@ -224,7 +224,6 @@ struct apic apic_x2apic_cluster = { | |||
224 | .send_IPI_all = x2apic_send_IPI_all, | 224 | .send_IPI_all = x2apic_send_IPI_all, |
225 | .send_IPI_self = x2apic_send_IPI_self, | 225 | .send_IPI_self = x2apic_send_IPI_self, |
226 | 226 | ||
227 | .wakeup_cpu = wakeup_secondary_cpu_via_init, | ||
228 | .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, | 227 | .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, |
229 | .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, | 228 | .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, |
230 | .wait_for_init_deassert = NULL, | 229 | .wait_for_init_deassert = NULL, |
diff --git a/arch/x86/kernel/apic/x2apic_phys.c b/arch/x86/kernel/apic/x2apic_phys.c index 785f8ee4b1df..23625b9f98b2 100644 --- a/arch/x86/kernel/apic/x2apic_phys.c +++ b/arch/x86/kernel/apic/x2apic_phys.c | |||
@@ -213,7 +213,6 @@ struct apic apic_x2apic_phys = { | |||
213 | .send_IPI_all = x2apic_send_IPI_all, | 213 | .send_IPI_all = x2apic_send_IPI_all, |
214 | .send_IPI_self = x2apic_send_IPI_self, | 214 | .send_IPI_self = x2apic_send_IPI_self, |
215 | 215 | ||
216 | .wakeup_cpu = wakeup_secondary_cpu_via_init, | ||
217 | .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, | 216 | .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, |
218 | .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, | 217 | .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, |
219 | .wait_for_init_deassert = NULL, | 218 | .wait_for_init_deassert = NULL, |
diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c index 6d7b9d960ddc..7151de74a396 100644 --- a/arch/x86/kernel/apic/x2apic_uv_x.c +++ b/arch/x86/kernel/apic/x2apic_uv_x.c | |||
@@ -288,7 +288,7 @@ struct apic apic_x2apic_uv_x = { | |||
288 | .send_IPI_all = uv_send_IPI_all, | 288 | .send_IPI_all = uv_send_IPI_all, |
289 | .send_IPI_self = uv_send_IPI_self, | 289 | .send_IPI_self = uv_send_IPI_self, |
290 | 290 | ||
291 | .wakeup_cpu = uv_wakeup_secondary, | 291 | .wakeup_secondary_cpu = uv_wakeup_secondary, |
292 | .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, | 292 | .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, |
293 | .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, | 293 | .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, |
294 | .wait_for_init_deassert = NULL, | 294 | .wait_for_init_deassert = NULL, |
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 9b338aa03b40..249334f5080a 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c | |||
@@ -742,7 +742,8 @@ static void __cpuinit do_fork_idle(struct work_struct *work) | |||
742 | /* | 742 | /* |
743 | * NOTE - on most systems this is a PHYSICAL apic ID, but on multiquad | 743 | * NOTE - on most systems this is a PHYSICAL apic ID, but on multiquad |
744 | * (ie clustered apic addressing mode), this is a LOGICAL apic ID. | 744 | * (ie clustered apic addressing mode), this is a LOGICAL apic ID. |
745 | * Returns zero if CPU booted OK, else error code from ->wakeup_cpu. | 745 | * Returns zero if CPU booted OK, else error code from |
746 | * ->wakeup_secondary_cpu. | ||
746 | */ | 747 | */ |
747 | static int __cpuinit do_boot_cpu(int apicid, int cpu) | 748 | static int __cpuinit do_boot_cpu(int apicid, int cpu) |
748 | { | 749 | { |
@@ -829,9 +830,13 @@ do_rest: | |||
829 | } | 830 | } |
830 | 831 | ||
831 | /* | 832 | /* |
832 | * Starting actual IPI sequence... | 833 | * Kick the secondary CPU. Use the method in the APIC driver |
834 | * if it's defined - or use an INIT boot APIC message otherwise: | ||
833 | */ | 835 | */ |
834 | boot_error = apic->wakeup_cpu(apicid, start_ip); | 836 | if (apic->wakeup_secondary_cpu) |
837 | boot_error = apic->wakeup_secondary_cpu(apicid, start_ip); | ||
838 | else | ||
839 | boot_error = wakeup_secondary_cpu_via_init(apicid, start_ip); | ||
835 | 840 | ||
836 | if (!boot_error) { | 841 | if (!boot_error) { |
837 | /* | 842 | /* |