mirror of https://gitee.com/openkylin/linux.git
x86/apic: Add a single-target IPI function to the apic
We still fall back on the "send mask" versions if an apic definition doesn't have the single-target version, but at least this allows the (trivial) case for the common clustered x2apic case. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Reviewed-by: Ingo Molnar <mingo@kernel.org> Cc: Borislav Petkov <bp@alien.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Mike Travis <travis@sgi.com> Cc: Daniel J Blueman <daniel@numascale.com> Link: http://lkml.kernel.org/r/20151104220848.737120838@linutronix.de Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
parent
66ef3493d4
commit
539da78772
|
@ -303,6 +303,7 @@ struct apic {
|
|||
unsigned int *apicid);
|
||||
|
||||
/* ipi */
|
||||
void (*send_IPI)(int cpu, int vector);
|
||||
void (*send_IPI_mask)(const struct cpumask *mask, int vector);
|
||||
void (*send_IPI_mask_allbutself)(const struct cpumask *mask,
|
||||
int vector);
|
||||
|
|
|
@ -114,6 +114,18 @@
|
|||
static atomic_t stopping_cpu = ATOMIC_INIT(-1);
|
||||
static bool smp_no_nmi_ipi = false;
|
||||
|
||||
/*
|
||||
* Helper wrapper: not all apic definitions support sending to
|
||||
* a single CPU, so we fall back to sending to a mask.
|
||||
*/
|
||||
static void send_IPI_cpu(int cpu, int vector)
|
||||
{
|
||||
if (apic->send_IPI)
|
||||
apic->send_IPI(cpu, vector);
|
||||
else
|
||||
apic->send_IPI_mask(cpumask_of(cpu), vector);
|
||||
}
|
||||
|
||||
/*
|
||||
* this function sends a 'reschedule' IPI to another CPU.
|
||||
* it goes straight through and wastes no time serializing
|
||||
|
@ -125,12 +137,12 @@ static void native_smp_send_reschedule(int cpu)
|
|||
WARN_ON(1);
|
||||
return;
|
||||
}
|
||||
apic->send_IPI_mask(cpumask_of(cpu), RESCHEDULE_VECTOR);
|
||||
send_IPI_cpu(cpu, RESCHEDULE_VECTOR);
|
||||
}
|
||||
|
||||
void native_send_call_func_single_ipi(int cpu)
|
||||
{
|
||||
apic->send_IPI_mask(cpumask_of(cpu), CALL_FUNCTION_SINGLE_VECTOR);
|
||||
send_IPI_cpu(cpu, CALL_FUNCTION_SINGLE_VECTOR);
|
||||
}
|
||||
|
||||
void native_send_call_func_ipi(const struct cpumask *mask)
|
||||
|
|
Loading…
Reference in New Issue