mirror of https://gitee.com/openkylin/linux.git
x86/apic: Split out spurious handling code
sysvec_spurious_apic_interrupt() calls into the handling body of __spurious_interrupt() which is not obvious as that function is declared inside the DEFINE_IDTENTRY_IRQ(spurious_interrupt) macro. As __spurious_interrupt() is currently always inlined this ends up with two copies of the same code for no reason. Split the handling function out and invoke it from both entry points. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Kees Cook <keescook@chromium.org> Link: https://lore.kernel.org/r/20210210002512.469379641@linutronix.de
This commit is contained in:
parent
951c2a51ae
commit
3c5e0267ec
|
@ -2133,18 +2133,11 @@ void __init register_lapic_address(unsigned long address)
|
|||
* Local APIC interrupts
|
||||
*/
|
||||
|
||||
/**
|
||||
* spurious_interrupt - Catch all for interrupts raised on unused vectors
|
||||
* @regs: Pointer to pt_regs on stack
|
||||
* @vector: The vector number
|
||||
*
|
||||
* This is invoked from ASM entry code to catch all interrupts which
|
||||
* trigger on an entry which is routed to the common_spurious idtentry
|
||||
* point.
|
||||
*
|
||||
* Also called from sysvec_spurious_apic_interrupt().
|
||||
/*
|
||||
* Common handling code for spurious_interrupt and spurious_vector entry
|
||||
* points below. No point in allowing the compiler to inline it twice.
|
||||
*/
|
||||
DEFINE_IDTENTRY_IRQ(spurious_interrupt)
|
||||
static noinline void handle_spurious_interrupt(u8 vector)
|
||||
{
|
||||
u32 v;
|
||||
|
||||
|
@ -2179,9 +2172,23 @@ DEFINE_IDTENTRY_IRQ(spurious_interrupt)
|
|||
trace_spurious_apic_exit(vector);
|
||||
}
|
||||
|
||||
/**
|
||||
* spurious_interrupt - Catch all for interrupts raised on unused vectors
|
||||
* @regs: Pointer to pt_regs on stack
|
||||
* @vector: The vector number
|
||||
*
|
||||
* This is invoked from ASM entry code to catch all interrupts which
|
||||
* trigger on an entry which is routed to the common_spurious idtentry
|
||||
* point.
|
||||
*/
|
||||
DEFINE_IDTENTRY_IRQ(spurious_interrupt)
|
||||
{
|
||||
handle_spurious_interrupt(vector);
|
||||
}
|
||||
|
||||
DEFINE_IDTENTRY_SYSVEC(sysvec_spurious_apic_interrupt)
|
||||
{
|
||||
__spurious_interrupt(regs, SPURIOUS_APIC_VECTOR);
|
||||
handle_spurious_interrupt(SPURIOUS_APIC_VECTOR);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue