diff options
author | Paul Mackerras <paulus@samba.org> | 2006-10-17 20:11:22 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-10-17 20:12:53 -0400 |
commit | b0a779debd56514b2b5de7617a1643e5dac2d4dd (patch) | |
tree | e342bf44d34b8944da803efc690197988319fa4f /arch/powerpc/kernel/entry_64.S | |
parent | 035223fb28791f0eb0d5719727355d3f6817d228 (diff) |
[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) | |||
489 | andi. r0,r3,MSR_RI | 489 | andi. r0,r3,MSR_RI |
490 | beq- unrecov_restore | 490 | beq- unrecov_restore |
491 | 491 | ||
492 | /* extract EE bit and use it to restore paca->hard_enabled */ | ||
493 | rldicl r4,r3,49,63 /* r0 = (r3 >> 15) & 1 */ | ||
494 | stb r4,PACAHARDIRQEN(r13) | ||
495 | |||
492 | andi. r0,r3,MSR_PR | 496 | andi. r0,r3,MSR_PR |
493 | 497 | ||
494 | /* | 498 | /* |