aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>2017-06-01 06:48:16 -0400
committerMichael Ellerman <mpe@ellerman.id.au>2017-06-16 05:49:43 -0400
commita4979a7e71eb8da976cbe4a0a1fa50636e76b04f (patch)
treec1d6326297af819f36aab35528efd17f714d9aaa
parenta9f8553e935f26cb5447f67e280946b0923cd2dc (diff)
powerpc/ftrace: Pass the correct stack pointer for DYNAMIC_FTRACE_WITH_REGS
For DYNAMIC_FTRACE_WITH_REGS, we should be passing-in the original set of registers in pt_regs, to capture the state _before_ ftrace_caller. However, we are instead passing the stack pointer *after* allocating a stack frame in ftrace_caller. Fix this by saving the proper value of r1 in pt_regs. Also, use SAVE_10GPRS() to simplify the code. Fixes: 153086644fd1 ("powerpc/ftrace: Add support for -mprofile-kernel ftrace ABI") Cc: stable@vger.kernel.org # v4.6+ Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
-rw-r--r--arch/powerpc/kernel/trace/ftrace_64_mprofile.S20
1 files changed, 12 insertions, 8 deletions
diff --git a/arch/powerpc/kernel/trace/ftrace_64_mprofile.S b/arch/powerpc/kernel/trace/ftrace_64_mprofile.S
index 7c933a99f5d5..fa0921410fa4 100644
--- a/arch/powerpc/kernel/trace/ftrace_64_mprofile.S
+++ b/arch/powerpc/kernel/trace/ftrace_64_mprofile.S
@@ -45,10 +45,14 @@ _GLOBAL(ftrace_caller)
45 stdu r1,-SWITCH_FRAME_SIZE(r1) 45 stdu r1,-SWITCH_FRAME_SIZE(r1)
46 46
47 /* Save all gprs to pt_regs */ 47 /* Save all gprs to pt_regs */
48 SAVE_8GPRS(0,r1) 48 SAVE_GPR(0, r1)
49 SAVE_8GPRS(8,r1) 49 SAVE_10GPRS(2, r1)
50 SAVE_8GPRS(16,r1) 50 SAVE_10GPRS(12, r1)
51 SAVE_8GPRS(24,r1) 51 SAVE_10GPRS(22, r1)
52
53 /* Save previous stack pointer (r1) */
54 addi r8, r1, SWITCH_FRAME_SIZE
55 std r8, GPR1(r1)
52 56
53 /* Load special regs for save below */ 57 /* Load special regs for save below */
54 mfmsr r8 58 mfmsr r8
@@ -103,10 +107,10 @@ ftrace_call:
103#endif 107#endif
104 108
105 /* Restore gprs */ 109 /* Restore gprs */
106 REST_8GPRS(0,r1) 110 REST_GPR(0,r1)
107 REST_8GPRS(8,r1) 111 REST_10GPRS(2,r1)
108 REST_8GPRS(16,r1) 112 REST_10GPRS(12,r1)
109 REST_8GPRS(24,r1) 113 REST_10GPRS(22,r1)
110 114
111 /* Restore possibly modified LR */ 115 /* Restore possibly modified LR */
112 ld r0, _LINK(r1) 116 ld r0, _LINK(r1)