Commit 1d607bb3 authored by Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt Committed by Michael Ellerman

powerpc/irq: Add mechanism to force a replay of interrupts

Calling this function with interrupts soft-disabled will cause
a replay of the external interrupt vector when they are re-enabled.

This will be used by the OPAL XICS backend (and latter by the native
XIVE code) to handle EOI signaling that there are more interrupts to
fetch from the hardware since the hardware won't issue another HW
interrupt in that case.
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent 9baaef0a
...@@ -130,6 +130,8 @@ static inline bool arch_irq_disabled_regs(struct pt_regs *regs) ...@@ -130,6 +130,8 @@ static inline bool arch_irq_disabled_regs(struct pt_regs *regs)
extern bool prep_irq_for_idle(void); extern bool prep_irq_for_idle(void);
extern void force_external_irq_replay(void);
#else /* CONFIG_PPC64 */ #else /* CONFIG_PPC64 */
#define SET_MSR_EE(x) mtmsr(x) #define SET_MSR_EE(x) mtmsr(x)
......
...@@ -342,6 +342,21 @@ bool prep_irq_for_idle(void) ...@@ -342,6 +342,21 @@ bool prep_irq_for_idle(void)
return true; return true;
} }
/*
* Force a replay of the external interrupt handler on this CPU.
*/
void force_external_irq_replay(void)
{
/*
* This must only be called with interrupts soft-disabled,
* the replay will happen when re-enabling.
*/
WARN_ON(!arch_irqs_disabled());
/* Indicate in the PACA that we have an interrupt to replay */
local_paca->irq_happened |= PACA_IRQ_EE;
}
#endif /* CONFIG_PPC64 */ #endif /* CONFIG_PPC64 */
int arch_show_interrupts(struct seq_file *p, int prec) int arch_show_interrupts(struct seq_file *p, int prec)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment