Commit 06ca2188eccbd7932636ac5bde2837297800480e
Committed by
Benjamin Herrenschmidt
1 parent
3cb5f1a3e5
Exists in
master
and in
7 other branches
powerpc/ppc32/tracing: Add stack frame to calls of trace_hardirqs_on/off
32-bit variant of the previous patch for 64-bit: << When an interrupt occurs in userspace, we can call trace_hardirqs_on/off() With one level stack. But if we have irqsoff tracing enabled, it checks both CALLER_ADDR0 and CALLER_ADDR1. The second call goes two stack frames up. If this is from user space, then there may not exist a second stack.... >> Signed-off-by: Steven Rostedt <rostedt@goodmis.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Showing 1 changed file with 11 additions and 0 deletions Side-by-side Diff
arch/powerpc/kernel/entry_32.S
... | ... | @@ -880,7 +880,18 @@ |
880 | 880 | */ |
881 | 881 | andi. r10,r9,MSR_EE |
882 | 882 | beq 1f |
883 | + /* | |
884 | + * Since the ftrace irqsoff latency trace checks CALLER_ADDR1, | |
885 | + * which is the stack frame here, we need to force a stack frame | |
886 | + * in case we came from user space. | |
887 | + */ | |
888 | + stwu r1,-32(r1) | |
889 | + mflr r0 | |
890 | + stw r0,4(r1) | |
891 | + stwu r1,-32(r1) | |
883 | 892 | bl trace_hardirqs_on |
893 | + lwz r1,0(r1) | |
894 | + lwz r1,0(r1) | |
884 | 895 | lwz r9,_MSR(r1) |
885 | 896 | 1: |
886 | 897 | #endif /* CONFIG_TRACE_IRQFLAGS */ |