summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/entry_64.S
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2006-10-18 10:11:22 +1000
committerPaul Mackerras <paulus@samba.org>2006-10-18 10:12:53 +1000
commitb0a779debd56514b2b5de7617a1643e5dac2d4dd (patch)
treee342bf44d34b8944da803efc690197988319fa4f /arch/powerpc/kernel/entry_64.S
parent035223fb28791f0eb0d5719727355d3f6817d228 (diff)
downloadlinux-stable-b0a779debd56514b2b5de7617a1643e5dac2d4dd.tar.gz
linux-stable-b0a779debd56514b2b5de7617a1643e5dac2d4dd.tar.bz2
linux-stable-b0a779debd56514b2b5de7617a1643e5dac2d4dd.zip
[POWERPC] Make sure interrupt enable gets restored properly
The lazy IRQ disable patch missed a couple of places where the interrupt enable flags need to be restored correctly. First, we weren't restoring the paca->hard_enabled flag on interrupt exit. Instead of saving it on entry, we compute it from the MSR_EE bit in the MSR we are restoring at exit. Secondly, the MMU hash miss code was clearing both paca->soft_enabled and paca->hard_enabled but not restoring them in the case where hash_page was able to resolve the miss from the Linux page tables. Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/kernel/entry_64.S')
-rw-r--r--arch/powerpc/kernel/entry_64.S4
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
index efda48741b29..86e2bdd5afd6 100644
--- a/arch/powerpc/kernel/entry_64.S
+++ b/arch/powerpc/kernel/entry_64.S
@@ -489,6 +489,10 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES)
andi. r0,r3,MSR_RI
beq- unrecov_restore
+ /* extract EE bit and use it to restore paca->hard_enabled */
+ rldicl r4,r3,49,63 /* r0 = (r3 >> 15) & 1 */
+ stb r4,PACAHARDIRQEN(r13)
+
andi. r0,r3,MSR_PR
/*