The timed may_goto fixup now passes the resolved counter pointer through
BPF_REG_AX instead of a stack offset.
Copy the pointer directly into the first argument register rather than
adding it to the BPF frame pointer again.
Fixes: 6ef8ff20c30b ("bpf, riscv: Add support for timed may_goto")
Reported-by: Jeremy Jean <[email protected]>
Link:
https://lore.kernel.org/all/[email protected]/
Assisted-by: Copilot:gpt-5.6-sol
Signed-off-by: Siddharth Chintamaneni <[email protected]>
---
arch/riscv/net/bpf_timed_may_goto.S | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/arch/riscv/net/bpf_timed_may_goto.S
b/arch/riscv/net/bpf_timed_may_goto.S
index 02c637d87420..8c03e272e0bf 100644
--- a/arch/riscv/net/bpf_timed_may_goto.S
+++ b/arch/riscv/net/bpf_timed_may_goto.S
@@ -6,12 +6,11 @@
/*
* Trampoline for the BPF timed may_goto loop bound. Custom calling convention:
- * - input: stack offset in BPF_REG_AX (t0)
+ * - input: count and timestamp pointer in BPF_REG_AX (t0)
* - output: updated count in BPF_REG_AX (t0)
*
- * Calls bpf_check_timed_may_goto(ptr) with the standard RISC-V ABI, where
- * ptr = BPF_REG_FP (s5) + BPF_REG_AX (t0). BPF R0-R5 (a5, a0-a4) are saved
- * across the call; BPF_REG_FP (s5) is callee-saved and needs no saving.
+ * Calls bpf_check_timed_may_goto(ptr) with the standard RISC-V ABI.
+ * BPF R0-R5 (a5, a0-a4) are saved across the call.
*/
SYM_FUNC_START(arch_bpf_timed_may_goto)
@@ -28,7 +27,11 @@ SYM_FUNC_START(arch_bpf_timed_may_goto)
REG_S a3, 1*SZREG(sp)
REG_S a4, 0*SZREG(sp)
- add a0, t0, s5
+ /*
+ * BPF_REG_AX (t0) contains the count and timestamp pointer; pass it as
+ * the first argument in a0.
+ */
+ mv a0, t0
call bpf_check_timed_may_goto
mv t0, a0
--
2.43.0