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>
This commit is contained in:
Ingo Molnar 2009-02-26 13:51:40 +01:00
parent 0917c01f8e
commit 1f5bcabf1b
11 changed files with 12 additions and 23 deletions

View File

@ -313,7 +313,7 @@ struct apic {
void (*send_IPI_self)(int vector); void (*send_IPI_self)(int vector);
/* wakeup_secondary_cpu */ /* wakeup_secondary_cpu */
int (*wakeup_cpu)(int apicid, unsigned long start_eip); int (*wakeup_secondary_cpu)(int apicid, unsigned long start_eip);
int trampoline_phys_low; int trampoline_phys_low;
int trampoline_phys_high; int trampoline_phys_high;
@ -344,13 +344,6 @@ extern struct apic *apic;
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
extern atomic_t init_deasserted; extern atomic_t init_deasserted;
extern int wakeup_secondary_cpu_via_nmi(int apicid, unsigned long start_eip); extern int wakeup_secondary_cpu_via_nmi(int apicid, unsigned long start_eip);
extern int wakeup_secondary_cpu_via_init(int apicid, unsigned long start_eip);
#else
static inline int
wakeup_secondary_cpu_via_init(int apicid, unsigned long start_eip)
{
return 0;
}
#endif #endif
static inline u32 apic_read(u32 reg) static inline u32 apic_read(u32 reg)

View File

@ -222,7 +222,6 @@ struct apic apic_flat = {
.send_IPI_all = flat_send_IPI_all, .send_IPI_all = flat_send_IPI_all,
.send_IPI_self = apic_send_IPI_self, .send_IPI_self = apic_send_IPI_self,
.wakeup_cpu = wakeup_secondary_cpu_via_init,
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
.wait_for_init_deassert = NULL, .wait_for_init_deassert = NULL,
@ -373,7 +372,6 @@ struct apic apic_physflat = {
.send_IPI_all = physflat_send_IPI_all, .send_IPI_all = physflat_send_IPI_all,
.send_IPI_self = apic_send_IPI_self, .send_IPI_self = apic_send_IPI_self,
.wakeup_cpu = wakeup_secondary_cpu_via_init,
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
.wait_for_init_deassert = NULL, .wait_for_init_deassert = NULL,

View File

@ -256,7 +256,6 @@ struct apic apic_bigsmp = {
.send_IPI_all = bigsmp_send_IPI_all, .send_IPI_all = bigsmp_send_IPI_all,
.send_IPI_self = default_send_IPI_self, .send_IPI_self = default_send_IPI_self,
.wakeup_cpu = wakeup_secondary_cpu_via_init,
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,

View File

@ -741,7 +741,7 @@ struct apic apic_es7000_cluster = {
.send_IPI_all = es7000_send_IPI_all, .send_IPI_all = es7000_send_IPI_all,
.send_IPI_self = default_send_IPI_self, .send_IPI_self = default_send_IPI_self,
.wakeup_cpu = wakeup_secondary_cpu_via_mip, .wakeup_secondary_cpu = wakeup_secondary_cpu_via_mip,
.trampoline_phys_low = 0x467, .trampoline_phys_low = 0x467,
.trampoline_phys_high = 0x469, .trampoline_phys_high = 0x469,
@ -806,8 +806,6 @@ struct apic apic_es7000 = {
.send_IPI_all = es7000_send_IPI_all, .send_IPI_all = es7000_send_IPI_all,
.send_IPI_self = default_send_IPI_self, .send_IPI_self = default_send_IPI_self,
.wakeup_cpu = wakeup_secondary_cpu_via_init,
.trampoline_phys_low = 0x467, .trampoline_phys_low = 0x467,
.trampoline_phys_high = 0x469, .trampoline_phys_high = 0x469,

View File

@ -538,7 +538,7 @@ struct apic apic_numaq = {
.send_IPI_all = numaq_send_IPI_all, .send_IPI_all = numaq_send_IPI_all,
.send_IPI_self = default_send_IPI_self, .send_IPI_self = default_send_IPI_self,
.wakeup_cpu = wakeup_secondary_cpu_via_nmi, .wakeup_secondary_cpu = wakeup_secondary_cpu_via_nmi,
.trampoline_phys_low = NUMAQ_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = NUMAQ_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = NUMAQ_TRAMPOLINE_PHYS_HIGH, .trampoline_phys_high = NUMAQ_TRAMPOLINE_PHYS_HIGH,

View File

@ -138,7 +138,6 @@ struct apic apic_default = {
.send_IPI_all = default_send_IPI_all, .send_IPI_all = default_send_IPI_all,
.send_IPI_self = default_send_IPI_self, .send_IPI_self = default_send_IPI_self,
.wakeup_cpu = wakeup_secondary_cpu_via_init,
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,

View File

@ -574,7 +574,6 @@ struct apic apic_summit = {
.send_IPI_all = summit_send_IPI_all, .send_IPI_all = summit_send_IPI_all,
.send_IPI_self = default_send_IPI_self, .send_IPI_self = default_send_IPI_self,
.wakeup_cpu = wakeup_secondary_cpu_via_init,
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,

View File

@ -224,7 +224,6 @@ struct apic apic_x2apic_cluster = {
.send_IPI_all = x2apic_send_IPI_all, .send_IPI_all = x2apic_send_IPI_all,
.send_IPI_self = x2apic_send_IPI_self, .send_IPI_self = x2apic_send_IPI_self,
.wakeup_cpu = wakeup_secondary_cpu_via_init,
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
.wait_for_init_deassert = NULL, .wait_for_init_deassert = NULL,

View File

@ -213,7 +213,6 @@ struct apic apic_x2apic_phys = {
.send_IPI_all = x2apic_send_IPI_all, .send_IPI_all = x2apic_send_IPI_all,
.send_IPI_self = x2apic_send_IPI_self, .send_IPI_self = x2apic_send_IPI_self,
.wakeup_cpu = wakeup_secondary_cpu_via_init,
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
.wait_for_init_deassert = NULL, .wait_for_init_deassert = NULL,

View File

@ -288,7 +288,7 @@ struct apic apic_x2apic_uv_x = {
.send_IPI_all = uv_send_IPI_all, .send_IPI_all = uv_send_IPI_all,
.send_IPI_self = uv_send_IPI_self, .send_IPI_self = uv_send_IPI_self,
.wakeup_cpu = uv_wakeup_secondary, .wakeup_secondary_cpu = uv_wakeup_secondary,
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW, .trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH, .trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
.wait_for_init_deassert = NULL, .wait_for_init_deassert = NULL,

View File

@ -742,7 +742,8 @@ static void __cpuinit do_fork_idle(struct work_struct *work)
/* /*
* NOTE - on most systems this is a PHYSICAL apic ID, but on multiquad * NOTE - on most systems this is a PHYSICAL apic ID, but on multiquad
* (ie clustered apic addressing mode), this is a LOGICAL apic ID. * (ie clustered apic addressing mode), this is a LOGICAL apic ID.
* Returns zero if CPU booted OK, else error code from ->wakeup_cpu. * Returns zero if CPU booted OK, else error code from
* ->wakeup_secondary_cpu.
*/ */
static int __cpuinit do_boot_cpu(int apicid, int cpu) static int __cpuinit do_boot_cpu(int apicid, int cpu)
{ {
@ -829,9 +830,13 @@ static int __cpuinit do_boot_cpu(int apicid, int cpu)
} }
/* /*
* Starting actual IPI sequence... * Kick the secondary CPU. Use the method in the APIC driver
* if it's defined - or use an INIT boot APIC message otherwise:
*/ */
boot_error = apic->wakeup_cpu(apicid, start_ip); if (apic->wakeup_secondary_cpu)
boot_error = apic->wakeup_secondary_cpu(apicid, start_ip);
else
boot_error = wakeup_secondary_cpu_via_init(apicid, start_ip);
if (!boot_error) { if (!boot_error) {
/* /*