diff options
author | Alex Shi <alex.shi@linaro.org> | 2017-06-30 14:26:00 +0800 |
---|---|---|
committer | Alex Shi <alex.shi@linaro.org> | 2017-06-30 14:26:00 +0800 |
commit | 267aa95e09eec438abf8979b58cded5cbc5586cb (patch) | |
tree | 7401fc52691565f31c0ad96a94a7a54971cc6e6a /arch/powerpc/kernel/kprobes.c | |
parent | d87abdcbf8871b5ee58083b3bdf216ba406224b9 (diff) | |
parent | 6ee496d7218aeccffe5380cb65e9d50d1a61c323 (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.c | 11 |
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; } |