On 10/30/2023 10:51 AM, Jiawen Wu wrote: > Refer to commit 85e46c532bc7 ("net/ixgbe: add proper memory barriers in > Rx"). Fix the same issue as ixgbe. > > Segmentation fault has been observed while running the > txgbe_recv_pkts_lro() function to receive packets on the Loongson 3A5000 > processor. It's caused by the out-of-order execution of CPU. So add a > proper memory barrier to ensure the read ordering be correct. > > We also did the same thing in the txgbe_recv_pkts() function to make the > rxd data be valid even though we did not find segmentation fault in this > function. > > Fixes: 0e484278c85f ("net/txgbe: support Rx") > Cc: sta...@dpdk.org > > Signed-off-by: Jiawen Wu <jiawe...@trustnetic.com> > --- > drivers/net/txgbe/txgbe_rxtx.c | 47 +++++++++++++++------------------- > 1 file changed, 21 insertions(+), 26 deletions(-) > > diff --git a/drivers/net/txgbe/txgbe_rxtx.c b/drivers/net/txgbe/txgbe_rxtx.c > index 834ada886a..24fc34d3c4 100644 > --- a/drivers/net/txgbe/txgbe_rxtx.c > +++ b/drivers/net/txgbe/txgbe_rxtx.c > @@ -1476,11 +1476,22 @@ txgbe_recv_pkts(void *rx_queue, struct rte_mbuf > **rx_pkts, > * of accesses cannot be reordered by the compiler. If they were > * not volatile, they could be reordered which could lead to > * using invalid descriptor fields when read from rxd. > + * > + * Meanwhile, to prevent the CPU from executing out of order, we > + * need to use a proper memory barrier to ensure the memory > + * ordering below. > */ > rxdp = &rx_ring[rx_id]; > staterr = rxdp->qw1.lo.status; > if (!(staterr & rte_cpu_to_le_32(TXGBE_RXD_STAT_DD))) > break; > + > + /* > + * Use acquire fence to ensure that status_error which includes > + * DD bit is loaded before loading of other descriptor words. > + */ > + rte_atomic_thread_fence(__ATOMIC_ACQUIRE); >
Hi Jiawen, Can you please check the checkpatch warning: Warning in drivers/net/txgbe/txgbe_rxtx.c: Using __atomic_xxx/__ATOMIC_XXX built-ins, prefer rte_atomic_xxx/rte_memory_order_xxx For your case please use 'rte_memory_order_xxx' instead of '__ATOMIC_XXX'. Same for both patches in the set.