From: Leon Hwang <leon.hwang@linux•dev>
To: bpf@vger•kernel.org
Cc: Alexei Starovoitov <ast@kernel•org>,
Daniel Borkmann <daniel@iogearbox•net>,
Andrii Nakryiko <andrii@kernel•org>,
Martin KaFai Lau <martin.lau@linux•dev>,
Eduard Zingerman <eddyz87@gmail•com>, Song Liu <song@kernel•org>,
Yonghong Song <yonghong.song@linux•dev>,
John Fastabend <john.fastabend@gmail•com>,
KP Singh <kpsingh@kernel•org>,
Stanislav Fomichev <sdf@fomichev•me>, Hao Luo <haoluo@google•com>,
Jiri Olsa <jolsa@kernel•org>,
Puranjay Mohan <puranjay@kernel•org>,
Xu Kuohai <xukuohai@huaweicloud•com>,
Catalin Marinas <catalin.marinas@arm•com>,
Will Deacon <will@kernel•org>, Thomas Gleixner <tglx@kernel•org>,
Ingo Molnar <mingo@redhat•com>, Borislav Petkov <bp@alien8•de>,
Dave Hansen <dave.hansen@linux•intel.com>,
x86@kernel•org, "H . Peter Anvin" <hpa@zytor•com>,
Shuah Khan <shuah@kernel•org>, Leon Hwang <leon.hwang@linux•dev>,
Peilin Ye <yepeilin@google•com>,
Luis Gerhorst <luis.gerhorst@fau•de>,
Viktor Malik <vmalik@redhat•com>,
linux-arm-kernel@lists•infradead.org,
linux-kernel@vger•kernel.org, netdev@vger•kernel.org,
linux-kselftest@vger•kernel.org, kernel-patches-bot@fb•com
Subject: [PATCH bpf-next v2 0/6] bpf: Introduce 64-bit bitops kfuncs
Date: Thu, 19 Feb 2026 22:29:22 +0800 [thread overview]
Message-ID: <20260219142933.13904-1-leon.hwang@linux.dev> (raw)
This series adds generic 64-bit bitops kfuncs and JIT inlining support
on x86_64 and arm64.
The new kfuncs are:
* bpf_clz64(): Count leading zeros.
* bpf_ctz64(): Count trailing zeros.
* bpf_ffs64(): Find first set bit, 1-based index, returns 0 when input is 0.
* bpf_fls64(): Find last set bit, 1-based index.
* bpf_bitrev64(): Reverse bits.
* bpf_popcnt64(): Population count.
* bpf_rol64(): Rotate left.
* bpf_ror64(): Rotate right.
Defined zero-input behavior:
* bpf_clz64(0) = 64
* bpf_ctz64(0) = 64
* bpf_ffs64(0) = 0
* bpf_fls64(0) = 0
bpf_ffs64() was previously discussed in
"bpf: Add generic kfunc bpf_ffs64()" [1].
The main concern in that discussion was ABI overhead: a regular kfunc call
follows the BPF calling convention and can introduce extra spill/fill compared
to dedicated instructions.
This series keeps the user-facing API as kfuncs while avoiding that overhead
on hot paths. When the JIT/backend and CPU support it, calls are inlined into
native instructions; otherwise they fall back to regular function calls.
Links:
[1] https://lore.kernel.org/bpf/20240131155607.51157-1-hffilwlqm@gmail.com/
Changes:
v1 -> v2:
* Drop RFC.
* Add __cpu_feature annotation for CPU-feature-gated tests.
* Add JIT disassembly tests for 64-bit bitops kfuncs
* Address comments from Alexei:
* Drop KF_MUST_INLINE.
* Drop internal BPF_ALU64 opcode BPF_BITOPS.
* Mark all of the kfuncs as fastcall and do push/pop in JIT when necessary.
* v1: https://lore.kernel.org/bpf/20260209155919.19015-1-leon.hwang@linux.dev/
Leon Hwang (6):
bpf: Introduce 64-bit bitops kfuncs
bpf, x86: Add 64-bit bitops kfuncs support for x86_64
bpf, arm64: Add 64-bit bitops kfuncs support
selftests/bpf: Add tests for 64-bit bitops kfuncs
selftests/bpf: Add __cpu_feature annotation for CPU-feature-gated
tests
selftests/bpf: Add JIT disassembly tests for 64-bit bitops kfuncs
arch/arm64/net/bpf_jit_comp.c | 123 ++++++++++++
arch/x86/net/bpf_jit_comp.c | 141 +++++++++++++
include/linux/filter.h | 10 +
kernel/bpf/core.c | 6 +
kernel/bpf/helpers.c | 50 +++++
kernel/bpf/verifier.c | 53 ++++-
.../testing/selftests/bpf/bpf_experimental.h | 9 +
.../testing/selftests/bpf/prog_tests/bitops.c | 188 ++++++++++++++++++
tools/testing/selftests/bpf/progs/bitops.c | 68 +++++++
.../testing/selftests/bpf/progs/bitops_jit.c | 153 ++++++++++++++
tools/testing/selftests/bpf/progs/bpf_misc.h | 7 +
tools/testing/selftests/bpf/test_loader.c | 150 ++++++++++++++
12 files changed, 957 insertions(+), 1 deletion(-)
create mode 100644 tools/testing/selftests/bpf/prog_tests/bitops.c
create mode 100644 tools/testing/selftests/bpf/progs/bitops.c
create mode 100644 tools/testing/selftests/bpf/progs/bitops_jit.c
--
2.52.0
next reply other threads:[~2026-02-19 14:30 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-19 14:29 Leon Hwang [this message]
2026-02-19 14:29 ` [PATCH bpf-next v2 1/6] bpf: Introduce 64-bit bitops kfuncs Leon Hwang
2026-02-19 17:50 ` Alexei Starovoitov
2026-02-20 15:34 ` Leon Hwang
2026-02-21 9:58 ` Dan Carpenter
2026-02-21 12:50 ` Leon Hwang
2026-02-19 14:29 ` [PATCH bpf-next v2 2/6] bpf, x86: Add 64-bit bitops kfuncs support for x86_64 Leon Hwang
2026-02-19 17:47 ` Alexei Starovoitov
2026-02-20 15:54 ` Leon Hwang
2026-02-20 17:50 ` Alexei Starovoitov
2026-02-21 12:45 ` Leon Hwang
2026-02-21 16:51 ` Alexei Starovoitov
2026-02-23 16:35 ` Leon Hwang
2026-02-19 22:05 ` kernel test robot
2026-02-20 14:12 ` Leon Hwang
2026-02-20 11:59 ` kernel test robot
2026-02-19 14:29 ` [PATCH bpf-next v2 3/6] bpf, arm64: Add 64-bit bitops kfuncs support Leon Hwang
2026-02-19 15:10 ` Puranjay Mohan
2026-02-19 15:20 ` Puranjay Mohan
2026-02-19 15:25 ` Puranjay Mohan
2026-02-19 15:36 ` Leon Hwang
2026-02-19 14:29 ` [PATCH bpf-next v2 4/6] selftests/bpf: Add tests for 64-bit bitops kfuncs Leon Hwang
2026-02-19 14:29 ` [PATCH bpf-next v2 5/6] selftests/bpf: Add __cpu_feature annotation for CPU-feature-gated tests Leon Hwang
2026-02-19 14:29 ` [PATCH bpf-next v2 6/6] selftests/bpf: Add JIT disassembly tests for 64-bit bitops kfuncs Leon Hwang
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=20260219142933.13904-1-leon.hwang@linux.dev \
--to=leon.hwang@linux$(echo .)dev \
--cc=andrii@kernel$(echo .)org \
--cc=ast@kernel$(echo .)org \
--cc=bp@alien8$(echo .)de \
--cc=bpf@vger$(echo .)kernel.org \
--cc=catalin.marinas@arm$(echo .)com \
--cc=daniel@iogearbox$(echo .)net \
--cc=dave.hansen@linux$(echo .)intel.com \
--cc=eddyz87@gmail$(echo .)com \
--cc=haoluo@google$(echo .)com \
--cc=hpa@zytor$(echo .)com \
--cc=john.fastabend@gmail$(echo .)com \
--cc=jolsa@kernel$(echo .)org \
--cc=kernel-patches-bot@fb$(echo .)com \
--cc=kpsingh@kernel$(echo .)org \
--cc=linux-arm-kernel@lists$(echo .)infradead.org \
--cc=linux-kernel@vger$(echo .)kernel.org \
--cc=linux-kselftest@vger$(echo .)kernel.org \
--cc=luis.gerhorst@fau$(echo .)de \
--cc=martin.lau@linux$(echo .)dev \
--cc=mingo@redhat$(echo .)com \
--cc=netdev@vger$(echo .)kernel.org \
--cc=puranjay@kernel$(echo .)org \
--cc=sdf@fomichev$(echo .)me \
--cc=shuah@kernel$(echo .)org \
--cc=song@kernel$(echo .)org \
--cc=tglx@kernel$(echo .)org \
--cc=vmalik@redhat$(echo .)com \
--cc=will@kernel$(echo .)org \
--cc=x86@kernel$(echo .)org \
--cc=xukuohai@huaweicloud$(echo .)com \
--cc=yepeilin@google$(echo .)com \
--cc=yonghong.song@linux$(echo .)dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
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