* [PATCH] x86/bpf: Avoid emitting LOCK prefix for XCHG atomic ops
@ 2025-12-08 16:33 Uros Bizjak
2025-12-22 0:56 ` Alexei Starovoitov
0 siblings, 1 reply; 2+ messages in thread
From: Uros Bizjak @ 2025-12-08 16:33 UTC (permalink / raw)
To: bpf, x86, linux-kernel
Cc: Uros Bizjak, Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen,
H. Peter Anvin
The x86 XCHG instruction is implicitly locked when one of the
operands is a memory location, making an explicit LOCK prefix
unnecessary.
Stop emitting the LOCK prefix for BPF_XCHG in the JIT atomic
read-modify-write helpers. This avoids redundant instruction
prefixes while preserving correct atomic semantics.
No functional change for other atomic operations.
Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: Andrii Nakryiko <andrii@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
---
arch/x86/net/bpf_jit_comp.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
index b69dc7194e2c..77d724525808 100644
--- a/arch/x86/net/bpf_jit_comp.c
+++ b/arch/x86/net/bpf_jit_comp.c
@@ -1305,7 +1305,8 @@ static int emit_atomic_rmw(u8 **pprog, u32 atomic_op,
{
u8 *prog = *pprog;
- EMIT1(0xF0); /* lock prefix */
+ if (atomic_op != BPF_XCHG)
+ EMIT1(0xF0); /* lock prefix */
maybe_emit_mod(&prog, dst_reg, src_reg, bpf_size == BPF_DW);
@@ -1347,7 +1348,9 @@ static int emit_atomic_rmw_index(u8 **pprog, u32 atomic_op, u32 size,
{
u8 *prog = *pprog;
- EMIT1(0xF0); /* lock prefix */
+ if (atomic_op != BPF_XCHG)
+ EMIT1(0xF0); /* lock prefix */
+
switch (size) {
case BPF_W:
EMIT1(add_3mod(0x40, dst_reg, src_reg, index_reg));
--
2.52.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] x86/bpf: Avoid emitting LOCK prefix for XCHG atomic ops
2025-12-08 16:33 [PATCH] x86/bpf: Avoid emitting LOCK prefix for XCHG atomic ops Uros Bizjak
@ 2025-12-22 0:56 ` Alexei Starovoitov
0 siblings, 0 replies; 2+ messages in thread
From: Alexei Starovoitov @ 2025-12-22 0:56 UTC (permalink / raw)
To: Uros Bizjak
Cc: bpf, X86 ML, LKML, Alexei Starovoitov, Daniel Borkmann,
Andrii Nakryiko, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
Dave Hansen, H. Peter Anvin
On Mon, Dec 8, 2025 at 6:34 AM Uros Bizjak <ubizjak@gmail.com> wrote:
>
> The x86 XCHG instruction is implicitly locked when one of the
> operands is a memory location, making an explicit LOCK prefix
> unnecessary.
>
> Stop emitting the LOCK prefix for BPF_XCHG in the JIT atomic
> read-modify-write helpers. This avoids redundant instruction
> prefixes while preserving correct atomic semantics.
>
> No functional change for other atomic operations.
>
> Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
> Cc: Alexei Starovoitov <ast@kernel.org>
> Cc: Daniel Borkmann <daniel@iogearbox.net>
> Cc: Andrii Nakryiko <andrii@kernel.org>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Ingo Molnar <mingo@kernel.org>
> Cc: Borislav Petkov <bp@alien8.de>
> Cc: Dave Hansen <dave.hansen@linux.intel.com>
> Cc: "H. Peter Anvin" <hpa@zytor.com>
> ---
> arch/x86/net/bpf_jit_comp.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
Applied to bpf-next.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-12-22 0:56 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-08 16:33 [PATCH] x86/bpf: Avoid emitting LOCK prefix for XCHG atomic ops Uros Bizjak
2025-12-22 0:56 ` Alexei Starovoitov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox