powerpc/64: Cleanup __check_irq_replay()
Move the clearing of irq_happened bits into the condition where they were found to be set. This reduces instruction count slightly, and reduces stores into irq_happened. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
c05f0be888
commit
6f881eaeb5
@ -143,9 +143,10 @@ notrace unsigned int __check_irq_replay(void)
|
||||
*/
|
||||
unsigned char happened = local_paca->irq_happened;
|
||||
|
||||
/* Clear bit 0 which we wouldn't clear otherwise */
|
||||
local_paca->irq_happened &= ~PACA_IRQ_HARD_DIS;
|
||||
if (happened & PACA_IRQ_HARD_DIS) {
|
||||
/* Clear bit 0 which we wouldn't clear otherwise */
|
||||
local_paca->irq_happened &= ~PACA_IRQ_HARD_DIS;
|
||||
|
||||
/*
|
||||
* We may have missed a decrementer interrupt if hard disabled.
|
||||
* Check the decrementer register in case we had a rollover
|
||||
@ -173,39 +174,39 @@ notrace unsigned int __check_irq_replay(void)
|
||||
* This is a higher priority interrupt than the others, so
|
||||
* replay it first.
|
||||
*/
|
||||
local_paca->irq_happened &= ~PACA_IRQ_HMI;
|
||||
if (happened & PACA_IRQ_HMI)
|
||||
if (happened & PACA_IRQ_HMI) {
|
||||
local_paca->irq_happened &= ~PACA_IRQ_HMI;
|
||||
return 0xe60;
|
||||
}
|
||||
|
||||
/*
|
||||
* We may have missed a decrementer interrupt. We check the
|
||||
* decrementer itself rather than the paca irq_happened field
|
||||
* in case we also had a rollover while hard disabled
|
||||
*/
|
||||
local_paca->irq_happened &= ~PACA_IRQ_DEC;
|
||||
if (happened & PACA_IRQ_DEC)
|
||||
if (happened & PACA_IRQ_DEC) {
|
||||
local_paca->irq_happened &= ~PACA_IRQ_DEC;
|
||||
return 0x900;
|
||||
}
|
||||
|
||||
/* Finally check if an external interrupt happened */
|
||||
local_paca->irq_happened &= ~PACA_IRQ_EE;
|
||||
if (happened & PACA_IRQ_EE)
|
||||
if (happened & PACA_IRQ_EE) {
|
||||
local_paca->irq_happened &= ~PACA_IRQ_EE;
|
||||
return 0x500;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PPC_BOOK3E
|
||||
/* Finally check if an EPR external interrupt happened
|
||||
* this bit is typically set if we need to handle another
|
||||
* "edge" interrupt from within the MPIC "EPR" handler
|
||||
/*
|
||||
* Check if an EPR external interrupt happened this bit is typically
|
||||
* set if we need to handle another "edge" interrupt from within the
|
||||
* MPIC "EPR" handler.
|
||||
*/
|
||||
local_paca->irq_happened &= ~PACA_IRQ_EE_EDGE;
|
||||
if (happened & PACA_IRQ_EE_EDGE)
|
||||
if (happened & PACA_IRQ_EE_EDGE) {
|
||||
local_paca->irq_happened &= ~PACA_IRQ_EE_EDGE;
|
||||
return 0x500;
|
||||
}
|
||||
|
||||
local_paca->irq_happened &= ~PACA_IRQ_DBELL;
|
||||
if (happened & PACA_IRQ_DBELL)
|
||||
return 0x280;
|
||||
#else
|
||||
local_paca->irq_happened &= ~PACA_IRQ_DBELL;
|
||||
if (happened & PACA_IRQ_DBELL) {
|
||||
local_paca->irq_happened &= ~PACA_IRQ_DBELL;
|
||||
return 0x280;
|
||||
}
|
||||
#else
|
||||
if (happened & PACA_IRQ_DBELL) {
|
||||
local_paca->irq_happened &= ~PACA_IRQ_DBELL;
|
||||
if (cpu_has_feature(CPU_FTR_HVMODE))
|
||||
return 0xe80;
|
||||
return 0xa00;
|
||||
|
Loading…
x
Reference in New Issue
Block a user