Commit 06ca2188eccbd7932636ac5bde2837297800480e

Authored by Steven Rostedt
Committed by Benjamin Herrenschmidt
1 parent 3cb5f1a3e5

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 */