Can you clarify why removal of volatile is safe (visibility, ordering) when the producer thread and consumer thread can be different?
On Wed, Jan 28, 2026 at 9:39 AM Stephen Hemminger <[email protected]> wrote: > > Statistics are only updated from a single thread at a time and > the compiler should not have to worry about optimizing them. > The statistics returned are 64 bit so use uint64_t instead > of arch specific unsigned long. > > Signed-off-by: Stephen Hemminger <[email protected]> > --- > drivers/net/af_packet/rte_eth_af_packet.c | 14 +++++++------- > 1 file changed, 7 insertions(+), 7 deletions(-) > > diff --git a/drivers/net/af_packet/rte_eth_af_packet.c > b/drivers/net/af_packet/rte_eth_af_packet.c > index ef11b8fb6b..158393dd70 100644 > --- a/drivers/net/af_packet/rte_eth_af_packet.c > +++ b/drivers/net/af_packet/rte_eth_af_packet.c > @@ -57,10 +57,10 @@ struct __rte_cache_aligned pkt_rx_queue { > uint8_t vlan_strip; > uint8_t timestamp_offloading; > > - volatile unsigned long rx_pkts; > - volatile unsigned long rx_bytes; > - volatile unsigned long rx_nombuf; > - volatile unsigned long rx_dropped_pkts; > + uint64_t rx_pkts; > + uint64_t rx_bytes; > + uint64_t rx_nombuf; > + uint64_t rx_dropped_pkts; > }; > > struct __rte_cache_aligned pkt_tx_queue { > @@ -72,9 +72,9 @@ struct __rte_cache_aligned pkt_tx_queue { > unsigned int framecount; > unsigned int framenum; > > - volatile unsigned long tx_pkts; > - volatile unsigned long err_pkts; > - volatile unsigned long tx_bytes; > + uint64_t tx_pkts; > + uint64_t tx_bytes; > + uint64_t err_pkts; > }; > > struct pmd_internals { > -- > 2.51.0 >

