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:
parent
0917c01f8e
commit
1f5bcabf1b
11 changed files with 12 additions and 23 deletions
|
@ -313,7 +313,7 @@ struct apic {
|
|||
void (*send_IPI_self)(int vector);
|
||||
|
||||
/* 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_high;
|
||||
|
@ -344,13 +344,6 @@ extern struct apic *apic;
|
|||
#ifdef CONFIG_SMP
|
||||
extern atomic_t init_deasserted;
|
||||
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
|
||||
|
||||
static inline u32 apic_read(u32 reg)
|
||||
|
|
|
@ -222,7 +222,6 @@ struct apic apic_flat = {
|
|||
.send_IPI_all = flat_send_IPI_all,
|
||||
.send_IPI_self = apic_send_IPI_self,
|
||||
|
||||
.wakeup_cpu = wakeup_secondary_cpu_via_init,
|
||||
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
|
||||
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
|
||||
.wait_for_init_deassert = NULL,
|
||||
|
@ -373,7 +372,6 @@ struct apic apic_physflat = {
|
|||
.send_IPI_all = physflat_send_IPI_all,
|
||||
.send_IPI_self = apic_send_IPI_self,
|
||||
|
||||
.wakeup_cpu = wakeup_secondary_cpu_via_init,
|
||||
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
|
||||
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
|
||||
.wait_for_init_deassert = NULL,
|
||||
|
|
|
@ -256,7 +256,6 @@ struct apic apic_bigsmp = {
|
|||
.send_IPI_all = bigsmp_send_IPI_all,
|
||||
.send_IPI_self = default_send_IPI_self,
|
||||
|
||||
.wakeup_cpu = wakeup_secondary_cpu_via_init,
|
||||
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
|
||||
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
|
||||
|
||||
|
|
|
@ -741,7 +741,7 @@ struct apic apic_es7000_cluster = {
|
|||
.send_IPI_all = es7000_send_IPI_all,
|
||||
.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_high = 0x469,
|
||||
|
@ -806,8 +806,6 @@ struct apic apic_es7000 = {
|
|||
.send_IPI_all = es7000_send_IPI_all,
|
||||
.send_IPI_self = default_send_IPI_self,
|
||||
|
||||
.wakeup_cpu = wakeup_secondary_cpu_via_init,
|
||||
|
||||
.trampoline_phys_low = 0x467,
|
||||
.trampoline_phys_high = 0x469,
|
||||
|
||||
|
|
|
@ -538,7 +538,7 @@ struct apic apic_numaq = {
|
|||
.send_IPI_all = numaq_send_IPI_all,
|
||||
.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_high = NUMAQ_TRAMPOLINE_PHYS_HIGH,
|
||||
|
||||
|
|
|
@ -138,7 +138,6 @@ struct apic apic_default = {
|
|||
.send_IPI_all = default_send_IPI_all,
|
||||
.send_IPI_self = default_send_IPI_self,
|
||||
|
||||
.wakeup_cpu = wakeup_secondary_cpu_via_init,
|
||||
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
|
||||
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
|
||||
|
||||
|
|
|
@ -574,7 +574,6 @@ struct apic apic_summit = {
|
|||
.send_IPI_all = summit_send_IPI_all,
|
||||
.send_IPI_self = default_send_IPI_self,
|
||||
|
||||
.wakeup_cpu = wakeup_secondary_cpu_via_init,
|
||||
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
|
||||
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
|
||||
|
||||
|
|
|
@ -224,7 +224,6 @@ struct apic apic_x2apic_cluster = {
|
|||
.send_IPI_all = x2apic_send_IPI_all,
|
||||
.send_IPI_self = x2apic_send_IPI_self,
|
||||
|
||||
.wakeup_cpu = wakeup_secondary_cpu_via_init,
|
||||
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
|
||||
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
|
||||
.wait_for_init_deassert = NULL,
|
||||
|
|
|
@ -213,7 +213,6 @@ struct apic apic_x2apic_phys = {
|
|||
.send_IPI_all = x2apic_send_IPI_all,
|
||||
.send_IPI_self = x2apic_send_IPI_self,
|
||||
|
||||
.wakeup_cpu = wakeup_secondary_cpu_via_init,
|
||||
.trampoline_phys_low = DEFAULT_TRAMPOLINE_PHYS_LOW,
|
||||
.trampoline_phys_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
|
||||
.wait_for_init_deassert = NULL,
|
||||
|
|
|
@ -288,7 +288,7 @@ struct apic apic_x2apic_uv_x = {
|
|||
.send_IPI_all = uv_send_IPI_all,
|
||||
.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_high = DEFAULT_TRAMPOLINE_PHYS_HIGH,
|
||||
.wait_for_init_deassert = NULL,
|
||||
|
|
|
@ -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
|
||||
* (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)
|
||||
{
|
||||
|
@ -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) {
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue