mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-16 18:26:42 +00:00
x86/irq: Factor out handler invocation from common_interrupt()
Prepare for calling external interrupt handlers directly from the posted MSI demultiplexing loop. Extract the common code from common_interrupt() to avoid code duplication. Signed-off-by: Jacob Pan <jacob.jun.pan@linux.intel.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lore.kernel.org/r/20240423174114.526704-8-jacob.jun.pan@linux.intel.com
This commit is contained in:
parent
43650dcf6d
commit
6087c7f36a
@ -242,18 +242,10 @@ static __always_inline void handle_irq(struct irq_desc *desc,
|
||||
__handle_irq(desc, regs);
|
||||
}
|
||||
|
||||
/*
|
||||
* common_interrupt() handles all normal device IRQ's (the special SMP
|
||||
* cross-CPU interrupts have their own entry points).
|
||||
*/
|
||||
DEFINE_IDTENTRY_IRQ(common_interrupt)
|
||||
static __always_inline void call_irq_handler(int vector, struct pt_regs *regs)
|
||||
{
|
||||
struct pt_regs *old_regs = set_irq_regs(regs);
|
||||
struct irq_desc *desc;
|
||||
|
||||
/* entry code tells RCU that we're not quiescent. Check it. */
|
||||
RCU_LOCKDEP_WARN(!rcu_is_watching(), "IRQ failed to wake up RCU");
|
||||
|
||||
desc = __this_cpu_read(vector_irq[vector]);
|
||||
if (likely(!IS_ERR_OR_NULL(desc))) {
|
||||
handle_irq(desc, regs);
|
||||
@ -268,7 +260,20 @@ DEFINE_IDTENTRY_IRQ(common_interrupt)
|
||||
__this_cpu_write(vector_irq[vector], VECTOR_UNUSED);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* common_interrupt() handles all normal device IRQ's (the special SMP
|
||||
* cross-CPU interrupts have their own entry points).
|
||||
*/
|
||||
DEFINE_IDTENTRY_IRQ(common_interrupt)
|
||||
{
|
||||
struct pt_regs *old_regs = set_irq_regs(regs);
|
||||
|
||||
/* entry code tells RCU that we're not quiescent. Check it. */
|
||||
RCU_LOCKDEP_WARN(!rcu_is_watching(), "IRQ failed to wake up RCU");
|
||||
|
||||
call_irq_handler(vector, regs);
|
||||
set_irq_regs(old_regs);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user