[PATCH v11 2/3] net/macb: add NEON vectorized Rx/Tx
Stephen Hemminger
stephen at networkplumber.org
Tue Oct 28 14:40:30 CET 2025
On Tue, 28 Oct 2025 08:32:30 +0000
Wencheng Li <liwencheng at phytium.com.cn> wrote:
> +static inline uint8x8_t macb_mbuf_initializer(struct macb_rx_queue *rxq)
> +{
> + uint64x1_t mbuf_initializer;
> + uint8x8_t rearm_data_vec;
> + volatile struct rte_mbuf mbuf = {
> + .buf_addr = 0,
> + .data_off = RTE_PKTMBUF_HEADROOM + MACB_RX_DATA_OFFSET,
> + .nb_segs = 1,
> + .port = rxq->port_id,
> + };
> +
> + mbuf_initializer = vdup_n_u64(0);
> + rte_atomic_store_explicit(&mbuf.refcnt, 1, rte_memory_order_relaxed);
> +
> + /* prevent compiler reordering: rearm_data covers previous fields */
> + rte_compiler_barrier();
> + mbuf_initializer =
> + vset_lane_u64(*(volatile uint64_t *)(&mbuf.rearm_data), mbuf_initializer, 0);
Why is a variable on stack marked volatile.
My understanding is that volatile is for cases where data is accessed
from two contexts (threads or signals). This is not the case for on-stack
variable.
The compiler barrier should be enough protection to prevent reordering.
And setting same variable twice seems wrong as well.
More information about the dev
mailing list