Feng Jiang <[email protected]> writes:

> Implement arch_bpf_timed_may_goto() for the RV64 JIT. The argument and
> return value are carried in BPF_REG_AX, and BPF R0-R5 are preserved
> across the call to the generic bpf_check_timed_may_goto().
>
> Enable bpf_jit_supports_timed_may_goto() so the verifier uses the timed
> expansion path.

Thanks for working on this!

> diff --git a/arch/riscv/net/bpf_jit_comp64.c b/arch/riscv/net/bpf_jit_comp64.c
> index c03c1de16b79..4f88a446278a 100644
> --- a/arch/riscv/net/bpf_jit_comp64.c
> +++ b/arch/riscv/net/bpf_jit_comp64.c
> @@ -1841,7 +1841,13 @@ int bpf_jit_emit_insn(const struct bpf_insn *insn, 
> struct rv_jit_context *ctx,
>               if (ret)
>                       return ret;
>  
> -             if (insn->src_reg != BPF_PSEUDO_CALL)
> +             /*
> +              * arch_bpf_timed_may_goto() is emitted by the verifier and
> +              * returns its result in BPF_REG_AX instead of BPF_REG_0, so
> +              * skip the normal "move return register into R0".
> +              */
> +             if (insn->src_reg != BPF_PSEUDO_CALL &&
> +                 addr != (u64)arch_bpf_timed_may_goto)

Nit: In the future, please use full 100 chars lines, instead of breaking
the line.

Would it be possible to add a test for this custom ABI? The fact that it
was missed in v1 hints that it would be good.

I asked an LLM to suggest a test [1]. Feel free to be inspired by it.
;-)


Björn

[1] https://paste.debian.net/hidden/9dd769d6

Reply via email to