Skip to content

Commit

Permalink
s390/ftrace/jprobes: Fix conflict between jprobes and function graph …
Browse files Browse the repository at this point in the history
…tracing

This fixes the same issue Steven already fixed for x86
in following commit:

  237d28d ftrace/jprobes/x86: Fix conflict between jprobes and function graph tracing

It fixes the crash, that happens when function graph tracing
and jprobes are used simultaneously. Please refer to above
commit for details.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Acked-by: Steven Rostedt <rostedt@goodmis.org>
  • Loading branch information
Jiri Olsa authored and Martin Schwidefsky committed Jul 31, 2016
1 parent 68c5cf5 commit e64a547
Showing 1 changed file with 12 additions and 0 deletions.
12 changes: 12 additions & 0 deletions arch/s390/kernel/kprobes.c
Original file line number Diff line number Diff line change
Expand Up @@ -690,6 +690,15 @@ int setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
stack = (unsigned long) regs->gprs[15];

memcpy(kcb->jprobes_stack, (void *) stack, MIN_STACK_SIZE(stack));

/*
* jprobes use jprobe_return() which skips the normal return
* path of the function, and this messes up the accounting of the
* function graph tracer to get messed up.
*
* Pause function graph tracing while performing the jprobe function.
*/
pause_graph_tracing();
return 1;
}
NOKPROBE_SYMBOL(setjmp_pre_handler);
Expand All @@ -705,6 +714,9 @@ int longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
unsigned long stack;

/* It's OK to start function graph tracing again */
unpause_graph_tracing();

stack = (unsigned long) kcb->jprobe_saved_regs.gprs[15];

/* Put the regs back */
Expand Down

0 comments on commit e64a547

Please sign in to comment.