aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2009-02-26 07:51:40 -0500
committerIngo Molnar <mingo@elte.hu>2009-02-26 07:58:26 -0500
commit1f5bcabf1b997d6b76a09114b5a79423495a1263 (patch)
treee933ed3b2f534d6014fdbaa9d8210d7d1919f7cb
parent0917c01f8e793f57a53cf886533d4c75c67f6e89 (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.h9
-rw-r--r--arch/x86/kernel/apic/apic_flat_64.c2
-rw-r--r--arch/x86/kernel/apic/bigsmp_32.c1
-rw-r--r--arch/x86/kernel/apic/es7000_32.c4
-rw-r--r--arch/x86/kernel/apic/numaq_32.c2
-rw-r--r--arch/x86/kernel/apic/probe_32.c1
-rw-r--r--arch/x86/kernel/apic/summit_32.c1
-rw-r--r--arch/x86/kernel/apic/x2apic_cluster.c1
-rw-r--r--arch/x86/kernel/apic/x2apic_phys.c1
-rw-r--r--arch/x86/kernel/apic/x2apic_uv_x.c2
-rw-r--r--arch/x86/kernel/smpboot.c11
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
345extern atomic_t init_deasserted; 345extern atomic_t init_deasserted;
346extern int wakeup_secondary_cpu_via_nmi(int apicid, unsigned long start_eip); 346extern int wakeup_secondary_cpu_via_nmi(int apicid, unsigned long start_eip);
347extern int wakeup_secondary_cpu_via_init(int apicid, unsigned long start_eip);
348#else
349static inline int
350wakeup_secondary_cpu_via_init(int apicid, unsigned long start_eip)
351{
352 return 0;
353}
354#endif 347#endif
355 348
356static inline u32 apic_read(u32 reg) 349static 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 */
747static int __cpuinit do_boot_cpu(int apicid, int cpu) 748static 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 /*