Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 6fb86566 authored by Matthias Schiffer's avatar Matthias Schiffer Committed by Paul Burton
Browse files

mips: ftrace: fix static function graph tracing

ftrace_graph_caller was never run after calling ftrace_trace_function,
breaking the function graph tracer. Fix this, bringing it in line with the
x86 implementation.

While we're at it, also streamline the control flow of _mcount a bit to
reduce the number of branches.

This issue was reported before:
https://www.linux-mips.org/archives/linux-mips/2014-11/msg00295.html



Signed-off-by: default avatarMatthias Schiffer <mschiffer@universe-factory.net>
Tested-by: default avatarMatt Redfearn <matt.redfearn@mips.com>
Patchwork: https://patchwork.linux-mips.org/patch/18929/


Signed-off-by: default avatarPaul Burton <paul.burton@mips.com>
Cc: stable@vger.kernel.org # v3.17+
parent 2a027b47
Loading
Loading
Loading
Loading
+12 −15
Original line number Diff line number Diff line
@@ -119,10 +119,20 @@ NESTED(_mcount, PT_SIZE, ra)
EXPORT_SYMBOL(_mcount)
	PTR_LA	t1, ftrace_stub
	PTR_L	t2, ftrace_trace_function /* Prepare t2 for (1) */
	bne	t1, t2, static_trace
	beq	t1, t2, fgraph_trace
	 nop

	MCOUNT_SAVE_REGS

	move	a0, ra		/* arg1: self return address */
	jalr	t2		/* (1) call *ftrace_trace_function */
	 move	a1, AT		/* arg2: parent's return address */

	MCOUNT_RESTORE_REGS

fgraph_trace:
#ifdef	CONFIG_FUNCTION_GRAPH_TRACER
	PTR_LA	t1, ftrace_stub
	PTR_L	t3, ftrace_graph_return
	bne	t1, t3, ftrace_graph_caller
	 nop
@@ -131,24 +141,11 @@ EXPORT_SYMBOL(_mcount)
	bne	t1, t3, ftrace_graph_caller
	 nop
#endif
	b	ftrace_stub
#ifdef CONFIG_32BIT
	 addiu sp, sp, 8
#else
	 nop
#endif

static_trace:
	MCOUNT_SAVE_REGS

	move	a0, ra		/* arg1: self return address */
	jalr	t2		/* (1) call *ftrace_trace_function */
	 move	a1, AT		/* arg2: parent's return address */

	MCOUNT_RESTORE_REGS
#ifdef CONFIG_32BIT
	addiu sp, sp, 8
#endif

	.globl ftrace_stub
ftrace_stub:
	RETURN_BACK