public inbox for bpf@vger.kernel.org
 help / color / mirror / Atom feed
From: Yonghong Song <yonghong.song@linux.dev>
To: Alexei Starovoitov <ast@kernel.org>,
	Andrii Nakryiko <andrii@kernel.org>,
	bpf@vger.kernel.org, Daniel Borkmann <daniel@iogearbox.net>,
	Martin KaFai Lau <martin.lau@kernel.org>
Cc: David Faust <david.faust@oracle.com>,
	Fangrui Song <maskray@google.com>,
	"Jose E . Marchesi" <jose.marchesi@oracle.com>,
	kernel-team@fb.com
Subject: [PATCH bpf-next v4 00/17] bpf: Support new insns from cpu v4
Date: Wed, 26 Jul 2023 15:07:26 -0700	[thread overview]
Message-ID: <20230726220726.1089817-1-yonghong.song@linux.dev> (raw)

In previous discussion ([1]), it is agreed that we should introduce
cpu version 4 (llvm flag -mcpu=v4) which contains some instructions
which can simplify code, make code easier to understand, fix the
existing problem, or simply for feature completeness. More specifically,
the following new insns are proposed:
  . sign extended load
  . sign extended mov
  . bswap
  . signed div/mod
  . ja with 32-bit offset

This patch set added kernel support for insns proposed in [1] except
BPF_ST which already has full kernel support. Beside the above proposed
insns, LLVM will generate BPF_ST insn as well under -mcpu=v4.
The llvm patch ([2]) has been merged into llvm-project 'main' branch.

The patchset implements interpreter, jit and verifier support for these new
insns.

For this patch set, I tested cpu v2/v3/v4 and the selftests are all passed.
I also tested selftests introduced in this patch set with additional changes
beside normal jit testing (bpf_jit_enable = 1 and bpf_jit_harden = 0)
  - bpf_jit_enable = 0
  - bpf_jit_enable = 1 and bpf_jit_harden = 1
and both testing passed.

  [1] https://lore.kernel.org/bpf/4bfe98be-5333-1c7e-2f6d-42486c8ec039@meta.com/
  [2] https://reviews.llvm.org/D144829

Changelogs:
  v3 -> v4:
   . some minor asm syntax adjustment based on llvm change.
   . add clang version and target arch guard for new tests
     so they can still compile with old llvm compilers.
   . some changes to the bpf doc.
  v2 -> v3:
   . add missed disasm change from v2.
   . handle signed load of ctx fields properly.
   . fix some interpreter sdiv/smod error when bpf_jit_enable = 0.
   . fix some verifier range bounding errors.
   . add more C tests.
  RFCv1 -> v2:
   . add more verifier supports for signed extend load and mov insns.
   . rename some insn names to be more consistent with intel practice.
   . add cpuv4 test runner for test progs.
   . add more unit and C tests.
   . add documentation.

Yonghong Song (17):
  bpf: Support new sign-extension load insns
  bpf: Support new sign-extension mov insns
  bpf: Handle sign-extenstin ctx member accesses
  bpf: Support new unconditional bswap instruction
  bpf: Support new signed div/mod instructions.
  bpf: Fix jit blinding with new sdiv/smov insns
  bpf: Support new 32bit offset jmp instruction
  bpf: Add kernel/bpftool asm support for new instructions
  selftests/bpf: Fix a test_verifier failure
  selftests/bpf: Add a cpuv4 test runner for cpu=v4 testing
  selftests/bpf: Add unit tests for new sign-extension load insns
  selftests/bpf: Add unit tests for new sign-extension mov insns
  selftests/bpf: Add unit tests for new bswap insns
  selftests/bpf: Add unit tests for new sdiv/smod insns
  selftests/bpf: Add unit tests for new gotol insn
  selftests/bpf: Test ldsx with more complex cases
  docs/bpf: Add documentation for new instructions

 Documentation/bpf/bpf_design_QA.rst           |   5 -
 .../bpf/standardization/instruction-set.rst   | 115 ++-
 arch/x86/net/bpf_jit_comp.c                   | 141 +++-
 include/linux/filter.h                        |  17 +-
 include/uapi/linux/bpf.h                      |   1 +
 kernel/bpf/core.c                             | 196 ++++-
 kernel/bpf/disasm.c                           |  57 +-
 kernel/bpf/verifier.c                         | 348 ++++++--
 tools/include/uapi/linux/bpf.h                |   1 +
 tools/testing/selftests/bpf/.gitignore        |   2 +
 tools/testing/selftests/bpf/Makefile          |  28 +-
 .../selftests/bpf/bpf_testmod/bpf_testmod.c   |   9 +-
 .../selftests/bpf/prog_tests/test_ldsx_insn.c | 139 ++++
 .../selftests/bpf/prog_tests/verifier.c       |  10 +
 .../selftests/bpf/progs/test_ldsx_insn.c      | 118 +++
 .../selftests/bpf/progs/verifier_bswap.c      |  59 ++
 .../selftests/bpf/progs/verifier_gotol.c      |  44 +
 .../selftests/bpf/progs/verifier_ldsx.c       | 131 +++
 .../selftests/bpf/progs/verifier_movsx.c      | 213 +++++
 .../selftests/bpf/progs/verifier_sdiv.c       | 781 ++++++++++++++++++
 .../selftests/bpf/verifier/basic_instr.c      |   6 +-
 21 files changed, 2251 insertions(+), 170 deletions(-)
 create mode 100644 tools/testing/selftests/bpf/prog_tests/test_ldsx_insn.c
 create mode 100644 tools/testing/selftests/bpf/progs/test_ldsx_insn.c
 create mode 100644 tools/testing/selftests/bpf/progs/verifier_bswap.c
 create mode 100644 tools/testing/selftests/bpf/progs/verifier_gotol.c
 create mode 100644 tools/testing/selftests/bpf/progs/verifier_ldsx.c
 create mode 100644 tools/testing/selftests/bpf/progs/verifier_movsx.c
 create mode 100644 tools/testing/selftests/bpf/progs/verifier_sdiv.c

-- 
2.34.1


             reply	other threads:[~2023-07-26 22:26 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-26 22:07 Yonghong Song [this message]
2023-07-26 22:07 ` [PATCH bpf-next v4 01/17] bpf: Support new sign-extension load insns Yonghong Song
2023-07-26 22:07 ` [PATCH bpf-next v4 02/17] bpf: Support new sign-extension mov insns Yonghong Song
2023-07-26 22:07 ` [PATCH bpf-next v4 03/17] bpf: Handle sign-extenstin ctx member accesses Yonghong Song
2023-07-26 22:07 ` [PATCH bpf-next v4 04/17] bpf: Support new unconditional bswap instruction Yonghong Song
2023-07-26 22:07 ` [PATCH bpf-next v4 05/17] bpf: Support new signed div/mod instructions Yonghong Song
2023-07-26 22:07 ` [PATCH bpf-next v4 06/17] bpf: Fix jit blinding with new sdiv/smov insns Yonghong Song
2023-07-26 22:08 ` [PATCH bpf-next v4 07/17] bpf: Support new 32bit offset jmp instruction Yonghong Song
2023-07-26 22:08 ` [PATCH bpf-next v4 09/17] selftests/bpf: Fix a test_verifier failure Yonghong Song
2023-07-26 22:08 ` [PATCH bpf-next v4 10/17] selftests/bpf: Add a cpuv4 test runner for cpu=v4 testing Yonghong Song
2023-07-26 22:08 ` [PATCH bpf-next v4 11/17] selftests/bpf: Add unit tests for new sign-extension load insns Yonghong Song
2023-07-26 22:08 ` [PATCH bpf-next v4 12/17] selftests/bpf: Add unit tests for new sign-extension mov insns Yonghong Song
2023-07-26 22:08 ` [PATCH bpf-next v4 13/17] selftests/bpf: Add unit tests for new bswap insns Yonghong Song
2023-07-26 22:08 ` [PATCH bpf-next v4 14/17] selftests/bpf: Add unit tests for new sdiv/smod insns Yonghong Song
2023-07-26 22:08 ` [PATCH bpf-next v4 15/17] selftests/bpf: Add unit tests for new gotol insn Yonghong Song
2023-07-26 22:08 ` [PATCH bpf-next v4 16/17] selftests/bpf: Test ldsx with more complex cases Yonghong Song
2023-07-26 22:08 ` [PATCH bpf-next v4 17/17] docs/bpf: Add documentation for new instructions Yonghong Song
2023-07-26 22:19   ` Dave Thaler
2023-07-26 22:19     ` [Bpf] " Dave Thaler

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230726220726.1089817-1-yonghong.song@linux.dev \
    --to=yonghong.song@linux.dev \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=david.faust@oracle.com \
    --cc=jose.marchesi@oracle.com \
    --cc=kernel-team@fb.com \
    --cc=martin.lau@kernel.org \
    --cc=maskray@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox