[PATCH v4 03/27] ring: unify memory model on C11, remove atomic32
Stephen Hemminger
stephen at networkplumber.org
Tue Jun 2 00:07:10 CEST 2026
On Tue, 26 May 2026 16:23:53 -0700
Stephen Hemminger <stephen at networkplumber.org> wrote:
> Remove the RTE_USE_C11_MEM_MODEL build switch; C11 atomics are now
> the default for all platforms. Unifies __rte_ring_update_tail into
> the C11 form (atomic_store_release replaces the older rte_smp_wmb +
> plain store on the generic path) and renames rte_ring_generic_pvt.h
> to rte_ring_x86_pvt.h to reflect its new scope.
>
> Also splits the head-move helper into separate ST and MT variants,
> removing the runtime is_st branch from the MT retry loop.
> This gets small boost and scopes the following exception
> more tightly.
>
> Exception: on x86 with GCC, atomic_compare_exchange on the head CAS
> regresses MP/MC contended throughput by ~20% existing hand-written
> cmpxchg. As a workaround, GCC-on-x86 builds use the older
> __sync_bool_compare_and_swap builtin, which generates equivalent
> code to the original asm. Can be reverted if/when GCC gets
> fixed; similar issue was observed in Linux kernel.
>
> Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
> ---
This is a big enough change, going to split it up as its own series.
More information about the dev
mailing list