Skip to content

Commit 5f66e18

Browse files
Merge patch series "RISC-V: Dynamic ftrace support for RV32I"
Jamie Iles <[email protected]> says: This series enables dynamic ftrace support for RV32I bringing it to parity with RV64I. Most of the work is already there, this is largely just assembly fixes to handle register sizes, correct handling of the psABI calling convention and Kconfig change. Validated with all ftrace boot time self test with qemu for RV32I and RV64I in addition to real tracing on an RV32I FPGA design. * b4-shazam-merge: RISC-V: enable dynamic ftrace for RV32I RISC-V: preserve a1 in mcount RISC-V: reduce mcount save space on RV32 RISC-V: use REG_S/REG_L for mcount Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Palmer Dabbelt <[email protected]>
2 parents 41555cc + f32b4b4 commit 5f66e18

File tree

2 files changed

+28
-26
lines changed

2 files changed

+28
-26
lines changed

arch/riscv/Kconfig

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,11 @@ config RISCV
131131
select TRACE_IRQFLAGS_SUPPORT
132132
select UACCESS_MEMCPY if !MMU
133133
select ZONE_DMA32 if 64BIT
134+
select HAVE_DYNAMIC_FTRACE if !XIP_KERNEL && MMU && $(cc-option,-fpatchable-function-entry=8)
135+
select HAVE_DYNAMIC_FTRACE_WITH_REGS if HAVE_DYNAMIC_FTRACE
136+
select HAVE_FTRACE_MCOUNT_RECORD if !XIP_KERNEL
137+
select HAVE_FUNCTION_GRAPH_TRACER
138+
select HAVE_FUNCTION_TRACER if !XIP_KERNEL
134139

135140
config ARCH_MMAP_RND_BITS_MIN
136141
default 18 if 64BIT
@@ -276,11 +281,6 @@ config ARCH_RV64I
276281
bool "RV64I"
277282
select 64BIT
278283
select ARCH_SUPPORTS_INT128 if CC_HAS_INT128
279-
select HAVE_DYNAMIC_FTRACE if !XIP_KERNEL && MMU && $(cc-option,-fpatchable-function-entry=8)
280-
select HAVE_DYNAMIC_FTRACE_WITH_REGS if HAVE_DYNAMIC_FTRACE
281-
select HAVE_FTRACE_MCOUNT_RECORD if !XIP_KERNEL
282-
select HAVE_FUNCTION_GRAPH_TRACER
283-
select HAVE_FUNCTION_TRACER if !XIP_KERNEL
284284
select SWIOTLB if MMU
285285

286286
endchoice

arch/riscv/kernel/mcount.S

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515

1616
.macro SAVE_ABI_STATE
1717
addi sp, sp, -16
18-
sd s0, 0(sp)
19-
sd ra, 8(sp)
18+
REG_S s0, 0*SZREG(sp)
19+
REG_S ra, 1*SZREG(sp)
2020
addi s0, sp, 16
2121
.endm
2222

@@ -25,24 +25,26 @@
2525
* register if a0 was not saved.
2626
*/
2727
.macro SAVE_RET_ABI_STATE
28-
addi sp, sp, -32
29-
sd s0, 16(sp)
30-
sd ra, 24(sp)
31-
sd a0, 8(sp)
32-
addi s0, sp, 32
28+
addi sp, sp, -4*SZREG
29+
REG_S s0, 2*SZREG(sp)
30+
REG_S ra, 3*SZREG(sp)
31+
REG_S a0, 1*SZREG(sp)
32+
REG_S a1, 0*SZREG(sp)
33+
addi s0, sp, 4*SZREG
3334
.endm
3435

3536
.macro RESTORE_ABI_STATE
36-
ld ra, 8(sp)
37-
ld s0, 0(sp)
37+
REG_L ra, 1*SZREG(sp)
38+
REG_L s0, 0*SZREG(sp)
3839
addi sp, sp, 16
3940
.endm
4041

4142
.macro RESTORE_RET_ABI_STATE
42-
ld ra, 24(sp)
43-
ld s0, 16(sp)
44-
ld a0, 8(sp)
45-
addi sp, sp, 32
43+
REG_L ra, 3*SZREG(sp)
44+
REG_L s0, 2*SZREG(sp)
45+
REG_L a0, 1*SZREG(sp)
46+
REG_L a1, 0*SZREG(sp)
47+
addi sp, sp, 4*SZREG
4648
.endm
4749

4850
ENTRY(ftrace_stub)
@@ -71,9 +73,9 @@ ENTRY(return_to_handler)
7173
mv a0, t6
7274
#endif
7375
call ftrace_return_to_handler
74-
mv a1, a0
76+
mv a2, a0
7577
RESTORE_RET_ABI_STATE
76-
jalr a1
78+
jalr a2
7779
ENDPROC(return_to_handler)
7880
#endif
7981

@@ -82,16 +84,16 @@ ENTRY(MCOUNT_NAME)
8284
la t4, ftrace_stub
8385
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
8486
la t0, ftrace_graph_return
85-
ld t1, 0(t0)
87+
REG_L t1, 0(t0)
8688
bne t1, t4, do_ftrace_graph_caller
8789

8890
la t3, ftrace_graph_entry
89-
ld t2, 0(t3)
91+
REG_L t2, 0(t3)
9092
la t6, ftrace_graph_entry_stub
9193
bne t2, t6, do_ftrace_graph_caller
9294
#endif
9395
la t3, ftrace_trace_function
94-
ld t5, 0(t3)
96+
REG_L t5, 0(t3)
9597
bne t5, t4, do_trace
9698
ret
9799

@@ -101,10 +103,10 @@ ENTRY(MCOUNT_NAME)
101103
* prepare_to_return(&ra_to_caller_of_caller, ra_to_caller)
102104
*/
103105
do_ftrace_graph_caller:
104-
addi a0, s0, -8
106+
addi a0, s0, -SZREG
105107
mv a1, ra
106108
#ifdef HAVE_FUNCTION_GRAPH_FP_TEST
107-
ld a2, -16(s0)
109+
REG_L a2, -2*SZREG(s0)
108110
#endif
109111
SAVE_ABI_STATE
110112
call prepare_ftrace_return
@@ -117,7 +119,7 @@ do_ftrace_graph_caller:
117119
* (*ftrace_trace_function)(ra_to_caller, ra_to_caller_of_caller)
118120
*/
119121
do_trace:
120-
ld a1, -8(s0)
122+
REG_L a1, -SZREG(s0)
121123
mv a0, ra
122124

123125
SAVE_ABI_STATE

0 commit comments

Comments
 (0)