Zero the flags field before setting offload bits and set the
frame-last flag (F) after all descriptor fields are written.
This prevents stale flag bits from a previous packet corrupting
the current descriptor.

Fixes: 72f491f1e53c ("net/enetc: optimize ENETC4 data path")
Cc: [email protected]

Signed-off-by: Gagandeep Singh <[email protected]>
---
 drivers/net/enetc/enetc_rxtx.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/net/enetc/enetc_rxtx.c b/drivers/net/enetc/enetc_rxtx.c
index a2b8153..b44e6f3 100644
--- a/drivers/net/enetc/enetc_rxtx.c
+++ b/drivers/net/enetc/enetc_rxtx.c
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2018-2024 NXP
+ * Copyright 2018-2026 NXP
  */
 
 #include <stdbool.h>
@@ -172,7 +172,7 @@ enetc_xmit_pkts_nc(void *tx_queue,
                        dcbf(data + j);
 
                txbd = ENETC_TXBD(*tx_ring, i);
-               txbd->flags = rte_cpu_to_le_16(ENETC4_TXBD_FLAGS_F);
+               txbd->flags = 0;
                if (tx_ring->q_swbd[i].buffer_addr->ol_flags & 
ENETC4_TX_CKSUM_OFFLOAD_MASK)
                        
enetc4_tx_offload_checksum(tx_ring->q_swbd[i].buffer_addr, txbd);
 
@@ -182,6 +182,7 @@ enetc_xmit_pkts_nc(void *tx_queue,
                txbd->addr = (uint64_t)(uintptr_t)
                rte_cpu_to_le_64((size_t)tx_swbd->buffer_addr->buf_iova +
                                 tx_swbd->buffer_addr->data_off);
+               txbd->flags |= rte_cpu_to_le_16(ENETC4_TXBD_FLAGS_F);
                i++;
                start++;
                if (unlikely(i == tx_ring->bd_count))
-- 
2.25.1

Reply via email to