aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/kernel/irq.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 0bcec745a672..f291f7826abc 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -145,6 +145,19 @@ notrace unsigned int __check_irq_replay(void)
145 145
146 /* Clear bit 0 which we wouldn't clear otherwise */ 146 /* Clear bit 0 which we wouldn't clear otherwise */
147 local_paca->irq_happened &= ~PACA_IRQ_HARD_DIS; 147 local_paca->irq_happened &= ~PACA_IRQ_HARD_DIS;
148 if (happened & PACA_IRQ_HARD_DIS) {
149 /*
150 * We may have missed a decrementer interrupt if hard disabled.
151 * Check the decrementer register in case we had a rollover
152 * while hard disabled.
153 */
154 if (!(happened & PACA_IRQ_DEC)) {
155 if (decrementer_check_overflow()) {
156 local_paca->irq_happened |= PACA_IRQ_DEC;
157 happened |= PACA_IRQ_DEC;
158 }
159 }
160 }
148 161
149 /* 162 /*
150 * Force the delivery of pending soft-disabled interrupts on PS3. 163 * Force the delivery of pending soft-disabled interrupts on PS3.
@@ -170,7 +183,7 @@ notrace unsigned int __check_irq_replay(void)
170 * in case we also had a rollover while hard disabled 183 * in case we also had a rollover while hard disabled
171 */ 184 */
172 local_paca->irq_happened &= ~PACA_IRQ_DEC; 185 local_paca->irq_happened &= ~PACA_IRQ_DEC;
173 if ((happened & PACA_IRQ_DEC) || decrementer_check_overflow()) 186 if (happened & PACA_IRQ_DEC)
174 return 0x900; 187 return 0x900;
175 188
176 /* Finally check if an external interrupt happened */ 189 /* Finally check if an external interrupt happened */