forked from Minki/linux
powerpc/trace: Add a dummy stack frame for trace_hardirqs_off
The trace_hardirqs_off will use CALLER_ADDR0 and CALLER_ADDR1. If an exception occurs in user mode, there is only one stack frame on the stack and accessing the CALLER_ADDR1 will causes the following call trace. So we create a dummy stack frame to make trace_hardirqs_off happy. WARNING: at kernel/smp.c:459 Modules linked in: NIP: c0093280 LR: c00930a0 CTR: c0010780 REGS: edb87ae0 TRAP: 0700 Not tainted (3.1.0) MSR: 00021002 <ME,CE> CR: 28002888 XER: 00000000 TASK = edce2ac0[17658] 'mthread-lock-on' THREAD: edb86000 CPU: 5 GPR00: 00000001 edb87b90 edce2ac0 00000005 c0019594 edb87bd8 00000001 00000fe3 GPR08: 00041000 c084138c 4e20120d edb87b90 48002888 1001aa7c 00000000 00000000 GPR16: 48830000 10012a8c 00000000 10000af4 00000001 c0810000 00000000 00000000 GPR24: ee9aa920 c0816a18 00000000 00000005 c0019594 edb87bd8 ee20178c edb87b90 NIP [c0093280] smp_call_function_many+0x214/0x2b4 LR [c00930a0] smp_call_function_many+0x34/0x2b4 Call Trace: [edb87b90] [c00930a0] smp_call_function_many+0x34/0x2b4 (unreliable) [edb87bd0] [c00194ec] __flush_tlb_page+0xac/0x100 [edb87c00] [c001957c] flush_tlb_page+0x3c/0x54 [edb87c10] [c00180ac] ptep_set_access_flags+0x74/0x12c [edb87c40] [c0128068] handle_pte_fault+0x2f0/0x9ac [edb87cb0] [c0128c3c] handle_mm_fault+0x104/0x1dc [edb87ce0] [c05f40f4] do_page_fault+0x2dc/0x630 [edb87e50] [c001078c] handle_page_fault+0xc/0x80 Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
d715e433b7
commit
2cd76629f6
@ -215,7 +215,22 @@ reenable_mmu: /* re-enable mmu so we can */
|
|||||||
stw r9,8(r1)
|
stw r9,8(r1)
|
||||||
stw r11,12(r1)
|
stw r11,12(r1)
|
||||||
stw r3,ORIG_GPR3(r1)
|
stw r3,ORIG_GPR3(r1)
|
||||||
|
/*
|
||||||
|
* The trace_hardirqs_off will use CALLER_ADDR0 and CALLER_ADDR1.
|
||||||
|
* If from user mode there is only one stack frame on the stack, and
|
||||||
|
* accessing CALLER_ADDR1 will cause oops. So we need create a dummy
|
||||||
|
* stack frame to make trace_hardirqs_off happy.
|
||||||
|
*/
|
||||||
|
andi. r12,r12,MSR_PR
|
||||||
|
beq 11f
|
||||||
|
stwu r1,-16(r1)
|
||||||
bl trace_hardirqs_off
|
bl trace_hardirqs_off
|
||||||
|
addi r1,r1,16
|
||||||
|
b 12f
|
||||||
|
|
||||||
|
11:
|
||||||
|
bl trace_hardirqs_off
|
||||||
|
12:
|
||||||
lwz r0,GPR0(r1)
|
lwz r0,GPR0(r1)
|
||||||
lwz r3,ORIG_GPR3(r1)
|
lwz r3,ORIG_GPR3(r1)
|
||||||
lwz r4,GPR4(r1)
|
lwz r4,GPR4(r1)
|
||||||
|
Loading…
Reference in New Issue
Block a user