diff options
author | Paul Mackerras <paulus@samba.org> | 2006-10-18 10:11:22 +1000 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-10-18 10:12:53 +1000 |
commit | b0a779debd56514b2b5de7617a1643e5dac2d4dd (patch) | |
tree | e342bf44d34b8944da803efc690197988319fa4f /arch/powerpc/kernel/entry_64.S | |
parent | 035223fb28791f0eb0d5719727355d3f6817d228 (diff) | |
download | linux-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.S | 4 |
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 /* |