> -----Original Message-----
> From: Stephen Hemminger <[email protected]>
> Sent: Wednesday 27 May 2026 00:24
> To: [email protected]
> Cc: Stephen Hemminger <[email protected]>; Konstantin Ananyev 
> <[email protected]>;
> Marat Khalili <[email protected]>
> Subject: [PATCH v4 04/27] bpf: use C11 atomics in BPF_ST_ATOMIC_REG
> 
> The BPF_ST_ATOMIC_REG macro generated code with deprecated
> rte_atomicNN_add and rte_atomicNN_exchange.
> 
> Replace this with the equivalent rte_stdatomic definitions.
> Use memory order seq_cst to preserve the previous behavior of
> rte_atomicNN_add() / rte_atomicNN_exchange() and matches
> the Linux kernel BPF interpreter for these opcodes.
> 
> Signed-off-by: Stephen Hemminger <[email protected]>
> ---
>  lib/bpf/bpf_exec.c | 13 +++++++------
>  1 file changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/lib/bpf/bpf_exec.c b/lib/bpf/bpf_exec.c
> index 18013753b1..ee6ec7516f 100644
> --- a/lib/bpf/bpf_exec.c
> +++ b/lib/bpf/bpf_exec.c
> @@ -10,6 +10,7 @@
>  #include <rte_log.h>
>  #include <rte_debug.h>
>  #include <rte_byteorder.h>
> +#include <rte_stdatomic.h>
> 
>  #include "bpf_impl.h"
> 
> @@ -65,16 +66,16 @@
>               (type)(reg)[(ins)->src_reg])
> 
>  #define BPF_ST_ATOMIC_REG(reg, ins, tp)      do { \
> +     RTE_ATOMIC(uint##tp##_t) *dst = (RTE_ATOMIC(uint##tp##_t) *) \
> +             (uintptr_t)((reg)[(ins)->dst_reg] + (ins)->off); \
>       switch (ins->imm) { \
>       case BPF_ATOMIC_ADD: \
> -             rte_atomic##tp##_add((rte_atomic##tp##_t *) \
> -                     (uintptr_t)((reg)[(ins)->dst_reg] + (ins)->off), \
> -                     (reg)[(ins)->src_reg]); \
> +             rte_atomic_fetch_add_explicit(dst, \
> +                     (reg)[(ins)->src_reg], rte_memory_order_seq_cst); \
>               break; \
>       case BPF_ATOMIC_XCHG: \
> -             (reg)[(ins)->src_reg] = rte_atomic##tp##_exchange((uint##tp##_t 
> *) \
> -                     (uintptr_t)((reg)[(ins)->dst_reg] + (ins)->off), \
> -                     (reg)[(ins)->src_reg]); \
> +             (reg)[(ins)->src_reg] = rte_atomic_exchange_explicit(dst, \
> +                     (reg)[(ins)->src_reg], rte_memory_order_seq_cst); \
>               break; \
>       default: \
>               /* this should be caught by validator and never reach here */ \
> --
> 2.53.0

Reviewed-by: Marat Khalili <[email protected]>

nit: in the last sentence of the commit message `s` is not needed in `matches`,
and some word like `behavior` can be added for clarity after `interpreter`.

FWIW whole patchset builds on our amd64 and arm64 machines and passes our 
subset of tests.

Reply via email to