x86/entry: Convert reschedule interrupt to IDTENTRY_SYSVEC_SIMPLE
The scheduler IPI does not need the full interrupt entry handling logic when the entry is from kernel mode. Use IDTENTRY_SYSVEC_SIMPLE and spare all the overhead. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@kernel.org> Acked-by: Andy Lutomirski <luto@kernel.org> Link: https://lore.kernel.org/r/20200521202119.835425642@linutronix.de
This commit is contained in:
@@ -112,7 +112,7 @@ static const __initconst struct idt_data def_idts[] = {
|
||||
*/
|
||||
static const __initconst struct idt_data apic_idts[] = {
|
||||
#ifdef CONFIG_SMP
|
||||
INTG(RESCHEDULE_VECTOR, reschedule_interrupt),
|
||||
INTG(RESCHEDULE_VECTOR, asm_sysvec_reschedule_ipi),
|
||||
INTG(CALL_FUNCTION_VECTOR, asm_sysvec_call_function),
|
||||
INTG(CALL_FUNCTION_SINGLE_VECTOR, asm_sysvec_call_function_single),
|
||||
INTG(IRQ_MOVE_CLEANUP_VECTOR, asm_sysvec_irq_move_cleanup),
|
||||
|
@@ -220,26 +220,15 @@ static void native_stop_other_cpus(int wait)
|
||||
|
||||
/*
|
||||
* Reschedule call back. KVM uses this interrupt to force a cpu out of
|
||||
* guest mode
|
||||
* guest mode.
|
||||
*/
|
||||
__visible void __irq_entry smp_reschedule_interrupt(struct pt_regs *regs)
|
||||
DEFINE_IDTENTRY_SYSVEC_SIMPLE(sysvec_reschedule_ipi)
|
||||
{
|
||||
ack_APIC_irq();
|
||||
trace_reschedule_entry(RESCHEDULE_VECTOR);
|
||||
inc_irq_stat(irq_resched_count);
|
||||
|
||||
if (trace_resched_ipi_enabled()) {
|
||||
/*
|
||||
* scheduler_ipi() might call irq_enter() as well, but
|
||||
* nested calls are fine.
|
||||
*/
|
||||
irq_enter();
|
||||
trace_reschedule_entry(RESCHEDULE_VECTOR);
|
||||
scheduler_ipi();
|
||||
trace_reschedule_exit(RESCHEDULE_VECTOR);
|
||||
irq_exit();
|
||||
return;
|
||||
}
|
||||
scheduler_ipi();
|
||||
trace_reschedule_exit(RESCHEDULE_VECTOR);
|
||||
}
|
||||
|
||||
DEFINE_IDTENTRY_SYSVEC(sysvec_call_function)
|
||||
|
@@ -25,20 +25,3 @@ void trace_pagefault_unreg(void)
|
||||
{
|
||||
static_branch_dec(&trace_pagefault_key);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
|
||||
DEFINE_STATIC_KEY_FALSE(trace_resched_ipi_key);
|
||||
|
||||
int trace_resched_ipi_reg(void)
|
||||
{
|
||||
static_branch_inc(&trace_resched_ipi_key);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void trace_resched_ipi_unreg(void)
|
||||
{
|
||||
static_branch_dec(&trace_resched_ipi_key);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user