Re: [PATCH bpf-next v2 0/2] bpf, arm64: support for timed may_goto

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 8/10/2025 4:48 AM, Puranjay Mohan wrote:
Changes in v1->v2:
v1: https://lore.kernel.org/bpf/20250724125443.26182-1-puranjay@xxxxxxxxxx/
- Added comment in arch_bpf_timed_may_goto() about BPF_REG_FP setup (Xu
   Kuohai)

This set adds support for the timed may_goto instruction for the arm64.
The timed may_goto instruction is implemented by the verifier by
reserving 2 8byte slots in the program stack and then calling
arch_bpf_timed_may_goto() in a loop with the stack offset of these two
slots in BPF_REG_AX. It expects the function to put a timestamp in the
first slot and the returned count in BPF_REG_AX is put into the second
slot by a store instruction emitted by the verifier.

arch_bpf_timed_may_goto() is special as it receives the parameter in
BPF_REG_AX and is expected to return the result in BPF_REG_AX as well.
It can't clobber any caller saved registers because verifier doesn't
save anything before emitting the call.

So, arch_bpf_timed_may_goto() is implemented in assembly so the exact
registers that are stored/restored can be controlled (BPF caller saved
registers here) and it also needs to take care of moving arguments and
return values to and from BPF_REG_AX <-> arm64 R0.

So, arch_bpf_timed_may_goto() acts as a trampoline to call
bpf_check_timed_may_goto() which does the main logic of placing the
timestamp and returning the count.

All tests that use may_goto instruction pass after the changing some of
them in patch 2

  #404     stream_errors:OK
  [...]
  #406/2   stream_success/stream_cond_break:OK
  [...]
  #494/23  verifier_bpf_fastcall/may_goto_interaction_x86_64:SKIP
  #494/24  verifier_bpf_fastcall/may_goto_interaction_arm64:OK
  [...]
  #539/1   verifier_may_goto_1/may_goto 0:OK
  #539/2   verifier_may_goto_1/batch 2 of may_goto 0:OK
  #539/3   verifier_may_goto_1/may_goto batch with offsets 2/1/0:OK
  #539/4   verifier_may_goto_1/may_goto batch with offsets 2/0:OK
  #539     verifier_may_goto_1:OK
  #540/1   verifier_may_goto_2/C code with may_goto 0:OK
  #540     verifier_may_goto_2:OK
  Summary: 7/16 PASSED, 25 SKIPPED, 0 FAILED

Puranjay Mohan (2):
   bpf, arm64: Add JIT support for timed may_goto
   selftests/bpf: Enable timed may_goto tests for arm64

  arch/arm64/net/Makefile                       |  2 +-
  arch/arm64/net/bpf_jit_comp.c                 | 13 +++++-
  arch/arm64/net/bpf_timed_may_goto.S           | 40 +++++++++++++++++++
  .../testing/selftests/bpf/prog_tests/stream.c |  2 +-
  .../bpf/progs/verifier_bpf_fastcall.c         | 27 ++++++++-----
  .../selftests/bpf/progs/verifier_may_goto_1.c | 34 +++-------------
  6 files changed, 76 insertions(+), 42 deletions(-)
  create mode 100644 arch/arm64/net/bpf_timed_may_goto.S


For the series,

Acked-by: Xu Kuohai <xukuohai@xxxxxxxxxx>





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux