aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/irq.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/kernel/irq.c')
-rw-r--r--arch/powerpc/kernel/irq.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 77be3d058a65..8f96d3198905 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -64,6 +64,8 @@
64#include <asm/ptrace.h> 64#include <asm/ptrace.h>
65#include <asm/machdep.h> 65#include <asm/machdep.h>
66#include <asm/udbg.h> 66#include <asm/udbg.h>
67#include <asm/dbell.h>
68
67#ifdef CONFIG_PPC64 69#ifdef CONFIG_PPC64
68#include <asm/paca.h> 70#include <asm/paca.h>
69#include <asm/firmware.h> 71#include <asm/firmware.h>
@@ -153,14 +155,28 @@ notrace void raw_local_irq_restore(unsigned long en)
153 if (get_hard_enabled()) 155 if (get_hard_enabled())
154 return; 156 return;
155 157
158#if defined(CONFIG_BOOKE) && defined(CONFIG_SMP)
159 /* Check for pending doorbell interrupts and resend to ourself */
160 doorbell_check_self();
161#endif
162
156 /* 163 /*
157 * Need to hard-enable interrupts here. Since currently disabled, 164 * Need to hard-enable interrupts here. Since currently disabled,
158 * no need to take further asm precautions against preemption; but 165 * no need to take further asm precautions against preemption; but
159 * use local_paca instead of get_paca() to avoid preemption checking. 166 * use local_paca instead of get_paca() to avoid preemption checking.
160 */ 167 */
161 local_paca->hard_enabled = en; 168 local_paca->hard_enabled = en;
169
170#ifndef CONFIG_BOOKE
171 /* On server, re-trigger the decrementer if it went negative since
172 * some processors only trigger on edge transitions of the sign bit.
173 *
174 * BookE has a level sensitive decrementer (latches in TSR) so we
175 * don't need that
176 */
162 if ((int)mfspr(SPRN_DEC) < 0) 177 if ((int)mfspr(SPRN_DEC) < 0)
163 mtspr(SPRN_DEC, 1); 178 mtspr(SPRN_DEC, 1);
179#endif /* CONFIG_BOOKE */
164 180
165 /* 181 /*
166 * Force the delivery of pending soft-disabled interrupts on PS3. 182 * Force the delivery of pending soft-disabled interrupts on PS3.