aboutsummaryrefslogtreecommitdiff
path: root/arch/powerpc/kernel/kprobes.c
diff options
context:
space:
mode:
authorAlex Shi <alex.shi@linaro.org>2017-06-30 14:26:00 +0800
committerAlex Shi <alex.shi@linaro.org>2017-06-30 14:26:00 +0800
commit267aa95e09eec438abf8979b58cded5cbc5586cb (patch)
tree7401fc52691565f31c0ad96a94a7a54971cc6e6a /arch/powerpc/kernel/kprobes.c
parentd87abdcbf8871b5ee58083b3bdf216ba406224b9 (diff)
parent6ee496d7218aeccffe5380cb65e9d50d1a61c323 (diff)
Merge tag 'v4.4.75' into linux-linaro-lsk-v4.4lsk-v4.4-17.06
This is the 4.4.75 stable release
Diffstat (limited to 'arch/powerpc/kernel/kprobes.c')
-rw-r--r--arch/powerpc/kernel/kprobes.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c
index 7c053f281406..1138fec3dd65 100644
--- a/arch/powerpc/kernel/kprobes.c
+++ b/arch/powerpc/kernel/kprobes.c
@@ -514,6 +514,15 @@ int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
#endif
#endif
+ /*
+ * jprobes use jprobe_return() which skips the normal return
+ * path of the function, and this messes up the accounting of the
+ * function graph tracer.
+ *
+ * Pause function graph tracing while performing the jprobe function.
+ */
+ pause_graph_tracing();
+
return 1;
}
@@ -536,6 +545,8 @@ int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
* saved regs...
*/
memcpy(regs, &kcb->jprobe_saved_regs, sizeof(struct pt_regs));
+ /* It's OK to start function graph tracing again */
+ unpause_graph_tracing();
preempt_enable_no_resched();
return 1;
}