2019-12-23 08:48:20

by Zong Li

[permalink] [raw]
Subject: [PATCH 0/2] RISC-V: fixes issues of ftrace graph tracer

Ftrace graph tracer is broken now, these patches fix the problem of ftrace graph
tracer and tested on QEMU and HiFive Unleashed board.

Zong Li (2):
riscv: ftrace: correct the condition logic in function graph tracer
clocksource/drivers/riscv: add notrace to riscv_sched_clock

arch/riscv/kernel/ftrace.c | 2 +-
drivers/clocksource/timer-riscv.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)

--
2.24.1


2019-12-23 08:48:51

by Zong Li

[permalink] [raw]
Subject: [PATCH 2/2] clocksource/drivers/riscv: add notrace to riscv_sched_clock

When enabling ftrace graph tracer, it gets the tracing clock in
ftrace_push_return_trace. Eventually, it invokes the riscv_sched_clock to
get the clock. If add mcount instrument in riscv_sched_clock, it will
call ftrace_push_return_trace and cause infinite loop.

The result of failure as follow:

command: echo function_graph >current_tracer
[ 46.176787] Unable to handle kernel paging request at virtual address ffffffe04fb38c48
[ 46.177309] Oops [#1]
[ 46.177478] Modules linked in:
[ 46.177770] CPU: 0 PID: 256 Comm: $d Not tainted 5.5.0-rc1 #47
[ 46.177981] epc: ffffffe00035e59a ra : ffffffe00035e57e sp : ffffffe03a7569b0
[ 46.178216] gp : ffffffe000d29b90 tp : ffffffe03a756180 t0 : ffffffe03a756968
[ 46.178430] t1 : ffffffe00087f408 t2 : ffffffe03a7569a0 s0 : ffffffe03a7569f0
[ 46.178643] s1 : ffffffe00087f408 a0 : 0000000ac054cda4 a1 : 000000000087f411
[ 46.178856] a2 : 0000000ac054cda4 a3 : 0000000000373ca0 a4 : ffffffe04fb38c48
[ 46.179099] a5 : 00000000153e22a8 a6 : 00000000005522ff a7 : 0000000000000005
[ 46.179338] s2 : ffffffe03a756a90 s3 : ffffffe00032811c s4 : ffffffe03a756a58
[ 46.179570] s5 : ffffffe000d29fe0 s6 : 0000000000000001 s7 : 0000000000000003
[ 46.179809] s8 : 0000000000000003 s9 : 0000000000000002 s10: 0000000000000004
[ 46.180053] s11: 0000000000000000 t3 : 0000003fc815749c t4 : 00000000000efc90
[ 46.180293] t5 : ffffffe000d29658 t6 : 0000000000040000
[ 46.180482] status: 0000000000000100 badaddr: ffffffe04fb38c48 cause: 000000000000000f

Signed-off-by: Zong Li <[email protected]>
---
drivers/clocksource/timer-riscv.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/clocksource/timer-riscv.c b/drivers/clocksource/timer-riscv.c
index 4e54856ce2a5..c4f15c4068c0 100644
--- a/drivers/clocksource/timer-riscv.c
+++ b/drivers/clocksource/timer-riscv.c
@@ -56,7 +56,7 @@ static unsigned long long riscv_clocksource_rdtime(struct clocksource *cs)
return get_cycles64();
}

-static u64 riscv_sched_clock(void)
+static u64 notrace riscv_sched_clock(void)
{
return get_cycles64();
}
--
2.24.1

2020-01-02 03:52:45

by Zong Li

[permalink] [raw]
Subject: Re: [PATCH 0/2] RISC-V: fixes issues of ftrace graph tracer

On Mon, Dec 23, 2019 at 4:46 PM Zong Li <[email protected]> wrote:
>
> Ftrace graph tracer is broken now, these patches fix the problem of ftrace graph
> tracer and tested on QEMU and HiFive Unleashed board.
>
> Zong Li (2):
> riscv: ftrace: correct the condition logic in function graph tracer
> clocksource/drivers/riscv: add notrace to riscv_sched_clock
>
> arch/riscv/kernel/ftrace.c | 2 +-
> drivers/clocksource/timer-riscv.c | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
>
> --
> 2.24.1
>

ping

2020-01-02 15:15:36

by Steven Rostedt

[permalink] [raw]
Subject: Re: [PATCH 0/2] RISC-V: fixes issues of ftrace graph tracer

On Thu, 2 Jan 2020 11:50:22 +0800
Zong Li <[email protected]> wrote:

> On Mon, Dec 23, 2019 at 4:46 PM Zong Li <[email protected]> wrote:
> >
> > Ftrace graph tracer is broken now, these patches fix the problem of ftrace graph
> > tracer and tested on QEMU and HiFive Unleashed board.
> >
> > Zong Li (2):
> > riscv: ftrace: correct the condition logic in function graph tracer
> > clocksource/drivers/riscv: add notrace to riscv_sched_clock
> >
> > arch/riscv/kernel/ftrace.c | 2 +-
> > drivers/clocksource/timer-riscv.c | 2 +-
> > 2 files changed, 2 insertions(+), 2 deletions(-)
> >
> > --
> > 2.24.1
> >
>
> ping

Both patches look legit.

Reviewed-by: Steven Rostedt (VMware) <[email protected]>

-- Steve

2020-01-04 00:17:07

by Paul Walmsley

[permalink] [raw]
Subject: Re: [PATCH 2/2] clocksource/drivers/riscv: add notrace to riscv_sched_clock

On Mon, 23 Dec 2019, Zong Li wrote:

> When enabling ftrace graph tracer, it gets the tracing clock in
> ftrace_push_return_trace. Eventually, it invokes the riscv_sched_clock to
> get the clock. If add mcount instrument in riscv_sched_clock, it will
> call ftrace_push_return_trace and cause infinite loop.
>
> The result of failure as follow:
>
> command: echo function_graph >current_tracer
> [ 46.176787] Unable to handle kernel paging request at virtual address ffffffe04fb38c48
> [ 46.177309] Oops [#1]
> [ 46.177478] Modules linked in:
> [ 46.177770] CPU: 0 PID: 256 Comm: $d Not tainted 5.5.0-rc1 #47
> [ 46.177981] epc: ffffffe00035e59a ra : ffffffe00035e57e sp : ffffffe03a7569b0
> [ 46.178216] gp : ffffffe000d29b90 tp : ffffffe03a756180 t0 : ffffffe03a756968
> [ 46.178430] t1 : ffffffe00087f408 t2 : ffffffe03a7569a0 s0 : ffffffe03a7569f0
> [ 46.178643] s1 : ffffffe00087f408 a0 : 0000000ac054cda4 a1 : 000000000087f411
> [ 46.178856] a2 : 0000000ac054cda4 a3 : 0000000000373ca0 a4 : ffffffe04fb38c48
> [ 46.179099] a5 : 00000000153e22a8 a6 : 00000000005522ff a7 : 0000000000000005
> [ 46.179338] s2 : ffffffe03a756a90 s3 : ffffffe00032811c s4 : ffffffe03a756a58
> [ 46.179570] s5 : ffffffe000d29fe0 s6 : 0000000000000001 s7 : 0000000000000003
> [ 46.179809] s8 : 0000000000000003 s9 : 0000000000000002 s10: 0000000000000004
> [ 46.180053] s11: 0000000000000000 t3 : 0000003fc815749c t4 : 00000000000efc90
> [ 46.180293] t5 : ffffffe000d29658 t6 : 0000000000040000
> [ 46.180482] status: 0000000000000100 badaddr: ffffffe04fb38c48 cause: 000000000000000f
>
> Signed-off-by: Zong Li <[email protected]>

Thanks; below is what's been queued for v5.5-rc.


- Paul


From: Zong Li <[email protected]>
Date: Mon, 23 Dec 2019 16:46:14 +0800
Subject: [PATCH 1/2] clocksource/drivers/riscv: add notrace to
riscv_sched_clock

When enabling ftrace graph tracer, it gets the tracing clock in
ftrace_push_return_trace(). Eventually, it invokes riscv_sched_clock()
to get the clock value. If riscv_sched_clock() isn't marked with
'notrace', it will call ftrace_push_return_trace() and cause infinite
loop.

The result of failure as follow:

command: echo function_graph >current_tracer
[ 46.176787] Unable to handle kernel paging request at virtual address ffffffe04fb38c48
[ 46.177309] Oops [#1]
[ 46.177478] Modules linked in:
[ 46.177770] CPU: 0 PID: 256 Comm: $d Not tainted 5.5.0-rc1 #47
[ 46.177981] epc: ffffffe00035e59a ra : ffffffe00035e57e sp : ffffffe03a7569b0
[ 46.178216] gp : ffffffe000d29b90 tp : ffffffe03a756180 t0 : ffffffe03a756968
[ 46.178430] t1 : ffffffe00087f408 t2 : ffffffe03a7569a0 s0 : ffffffe03a7569f0
[ 46.178643] s1 : ffffffe00087f408 a0 : 0000000ac054cda4 a1 : 000000000087f411
[ 46.178856] a2 : 0000000ac054cda4 a3 : 0000000000373ca0 a4 : ffffffe04fb38c48
[ 46.179099] a5 : 00000000153e22a8 a6 : 00000000005522ff a7 : 0000000000000005
[ 46.179338] s2 : ffffffe03a756a90 s3 : ffffffe00032811c s4 : ffffffe03a756a58
[ 46.179570] s5 : ffffffe000d29fe0 s6 : 0000000000000001 s7 : 0000000000000003
[ 46.179809] s8 : 0000000000000003 s9 : 0000000000000002 s10: 0000000000000004
[ 46.180053] s11: 0000000000000000 t3 : 0000003fc815749c t4 : 00000000000efc90
[ 46.180293] t5 : ffffffe000d29658 t6 : 0000000000040000
[ 46.180482] status: 0000000000000100 badaddr: ffffffe04fb38c48 cause: 000000000000000f

Signed-off-by: Zong Li <[email protected]>
Reviewed-by: Steven Rostedt (VMware) <[email protected]>
[[email protected]: cleaned up patch description]
Signed-off-by: Paul Walmsley <[email protected]>
---
drivers/clocksource/timer-riscv.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/clocksource/timer-riscv.c b/drivers/clocksource/timer-riscv.c
index 4e54856ce2a5..c4f15c4068c0 100644
--- a/drivers/clocksource/timer-riscv.c
+++ b/drivers/clocksource/timer-riscv.c
@@ -56,7 +56,7 @@ static unsigned long long riscv_clocksource_rdtime(struct clocksource *cs)
return get_cycles64();
}

-static u64 riscv_sched_clock(void)
+static u64 notrace riscv_sched_clock(void)
{
return get_cycles64();
}
--
2.24.0