diff options
| author | Michael Ellerman <michael@ellerman.id.au> | 2012-02-20 16:32:30 -0500 |
|---|---|---|
| committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2012-02-22 00:48:49 -0500 |
| commit | 922b9f86a020258d3ea3bfed27251efaed7a03a3 (patch) | |
| tree | 5cdb92aed142e9d96c0e38352cbc0d6cb2dd581f /arch/powerpc | |
| parent | 07d2f1a54a78a648093f4f3a33aa86b03cf9e25f (diff) | |
powerpc: Fix program check handling when lockdep is enabled
In commit 54321242afe ("Disable interrupts early in Program Check"), we
switched from enabling to disabling interrupts in program_check_common.
Whereas ENABLE_INTS leaves r3 untouched, if lockdep is enabled DISABLE_INTS
calls into lockdep code and will clobber r3. That means we pass a bogus
struct pt_regs* into program_check_exception() and all hell breaks loose.
So load our regs pointer into r3 after we call DISABLE_INTS.
Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc')
| -rw-r--r-- | arch/powerpc/kernel/exceptions-64s.S | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S index 3844ca7c5099..15c5a4f6de01 100644 --- a/arch/powerpc/kernel/exceptions-64s.S +++ b/arch/powerpc/kernel/exceptions-64s.S | |||
| @@ -774,8 +774,8 @@ alignment_common: | |||
| 774 | program_check_common: | 774 | program_check_common: |
| 775 | EXCEPTION_PROLOG_COMMON(0x700, PACA_EXGEN) | 775 | EXCEPTION_PROLOG_COMMON(0x700, PACA_EXGEN) |
| 776 | bl .save_nvgprs | 776 | bl .save_nvgprs |
| 777 | addi r3,r1,STACK_FRAME_OVERHEAD | ||
| 778 | DISABLE_INTS | 777 | DISABLE_INTS |
| 778 | addi r3,r1,STACK_FRAME_OVERHEAD | ||
| 779 | bl .program_check_exception | 779 | bl .program_check_exception |
| 780 | b .ret_from_except | 780 | b .ret_from_except |
| 781 | 781 | ||
