diff options
author | Xu Kuohai <xukuohai@huawei.com> | 2024-04-16 14:42:08 +0800 |
---|---|---|
committer | Daniel Borkmann <daniel@iogearbox.net> | 2024-04-16 17:19:41 +0200 |
commit | 10541b374aa05c8118cc6a529a615882e53f261b (patch) | |
tree | 59373141f5538e6004c743c0a6c0493ce6b7ca79 /arch | |
parent | dc7d7447b56bcc9cf79a9c22e4edad200a298e4c (diff) | |
download | linux-stable-10541b374aa05c8118cc6a529a615882e53f261b.tar.gz linux-stable-10541b374aa05c8118cc6a529a615882e53f261b.tar.bz2 linux-stable-10541b374aa05c8118cc6a529a615882e53f261b.zip |
riscv, bpf: Fix incorrect runtime stats
When __bpf_prog_enter() returns zero, the s1 register is not set to zero,
resulting in incorrect runtime stats. Fix it by setting s1 immediately upon
the return of __bpf_prog_enter().
Fixes: 49b5e77ae3e2 ("riscv, bpf: Add bpf trampoline support for RV64")
Signed-off-by: Xu Kuohai <xukuohai@huawei.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Reviewed-by: Pu Lehui <pulehui@huawei.com>
Acked-by: Björn Töpel <bjorn@kernel.org>
Link: https://lore.kernel.org/bpf/20240416064208.2919073-3-xukuohai@huaweicloud.com
Diffstat (limited to 'arch')
-rw-r--r-- | arch/riscv/net/bpf_jit_comp64.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/arch/riscv/net/bpf_jit_comp64.c b/arch/riscv/net/bpf_jit_comp64.c index 1adf2f39ce59..ec9d692838fc 100644 --- a/arch/riscv/net/bpf_jit_comp64.c +++ b/arch/riscv/net/bpf_jit_comp64.c @@ -722,6 +722,9 @@ static int invoke_bpf_prog(struct bpf_tramp_link *l, int args_off, int retval_of if (ret) return ret; + /* store prog start time */ + emit_mv(RV_REG_S1, RV_REG_A0, ctx); + /* if (__bpf_prog_enter(prog) == 0) * goto skip_exec_of_prog; */ @@ -729,9 +732,6 @@ static int invoke_bpf_prog(struct bpf_tramp_link *l, int args_off, int retval_of /* nop reserved for conditional jump */ emit(rv_nop(), ctx); - /* store prog start time */ - emit_mv(RV_REG_S1, RV_REG_A0, ctx); - /* arg1: &args_off */ emit_addi(RV_REG_A0, RV_REG_FP, -args_off, ctx); if (!p->jited) |