[PATCH v3] selftests/bpf: Use the new NMI_BITS definition

From: Boqun Feng

Date: Fri Oct 02 2026 - 06:37:35 EST


The definition of NMI_BITS was out of sync after the introduction of
HAS_SEPARATE_PREEMPT_RESCHED_BITS, hence adjust it.

Reported-by: Shrikanth Hegde <sshegde@xxxxxxxxxxxxx>
Fixes: 3b0e2a22d408 ("preempt: Introduce HAS_SEPARATE_PREEMPT_RESCHED_BITS")
Reviewed-by: Shrikanth Hegde <sshegde@xxxxxxxxxxxxx>
Cc: Leon Hwang <leon.hwang@xxxxxxxxx>
Cc: Alexei Starovoitov <ast@xxxxxxxxxx>
Signed-off-by: Boqun Feng <boqun@xxxxxxxxxx>
---
v2: https://lore.kernel.org/lkml/20261001082519.16195-4-boqun@xxxxxxxxxx/
v2 -> v3:

* Add Fixes tag.
* Add CONFIG_HAS_SEPARATE_PREEMPT_RESCHED_BITS weak symbol because
CONFIG_* is not available in bpf programs.


tools/testing/selftests/bpf/bpf_experimental.h | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/bpf/bpf_experimental.h b/tools/testing/selftests/bpf/bpf_experimental.h
index 2893bf06ff25..a09448347966 100644
--- a/tools/testing/selftests/bpf/bpf_experimental.h
+++ b/tools/testing/selftests/bpf/bpf_experimental.h
@@ -367,11 +367,16 @@ extern int bpf_cgroup_read_xattr(struct cgroup *cgroup, const char *name__str,
extern int bpf_sock_read_xattr(struct socket *sock, const char *name__str,
struct bpf_dynptr *value_p) __weak __ksym;

+extern bool CONFIG_HAS_SEPARATE_PREEMPT_RESCHED_BITS __kconfig __weak;
+
+/* A trivial macro to make NMI_BITS exactly the same as in <linux/preempt.h> */
+#define IS_ENABLED(cfg) (cfg)
+
#define PREEMPT_BITS 8
#define SOFTIRQ_BITS 8
#define HARDIRQ_DISABLE_BITS 8
#define HARDIRQ_BITS 4
-#define NMI_BITS 1
+#define NMI_BITS (1 + 3*IS_ENABLED(CONFIG_HAS_SEPARATE_PREEMPT_RESCHED_BITS))

#define PREEMPT_SHIFT 0
#define SOFTIRQ_SHIFT (PREEMPT_SHIFT + PREEMPT_BITS)
--
2.51.0