summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorAndrii Nakryiko <andrii@kernel.org>2024-04-03 20:47:26 -0700
committerAlexei Starovoitov <ast@kernel.org>2024-04-03 21:36:35 -0700
commit1e9e0b85255e6eca6036b59d8a5fbca6501905ac (patch)
tree0b90da08e9a36a61517c7e31b761e140234e82b7 /arch
parent519e1de94b719f741e0de42b085b9a4551c5b15c (diff)
bpf: handle CONFIG_SMP=n configuration in x86 BPF JIT
On non-SMP systems, there is no "per-CPU" data, it's just global data. So in such case just don't do this_cpu_off-based per-CPU address adjustment. Reported-by: kernel test robot <lkp@intel.com> Closes: https://lore.kernel.org/oe-kbuild-all/202404040951.d4CUx5S6-lkp@intel.com/ Fixes: 7bdbf7446305 ("bpf: add special internal-only MOV instruction to resolve per-CPU addrs") Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Link: https://lore.kernel.org/r/20240404034726.2766740-1-andrii@kernel.org Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/net/bpf_jit_comp.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
index af89dd117dce..964e8154da66 100644
--- a/arch/x86/net/bpf_jit_comp.c
+++ b/arch/x86/net/bpf_jit_comp.c
@@ -1383,15 +1383,14 @@ static int do_jit(struct bpf_prog *bpf_prog, int *addrs, u8 *image, u8 *rw_image
EMIT3(0x0F, 0x44, add_2reg(0xC0, AUX_REG, dst_reg));
break;
} else if (insn_is_mov_percpu_addr(insn)) {
- u32 off = (u32)(unsigned long)&this_cpu_off;
-
/* mov <dst>, <src> (if necessary) */
EMIT_mov(dst_reg, src_reg);
-
+#ifdef CONFIG_SMP
/* add <dst>, gs:[<off>] */
EMIT2(0x65, add_1mod(0x48, dst_reg));
EMIT3(0x03, add_1reg(0x04, dst_reg), 0x25);
- EMIT(off, 4);
+ EMIT((u32)(unsigned long)&this_cpu_off, 4);
+#endif
break;
}
fallthrough;