[1/3] net/axgbe: reset the end of packet in scattered rx
Checks
Commit Message
Reset the eop in the failure scenario and also after the last segment.
Removed the packet length updation explicitly as it is done in Chaining.
Fixes: 965b3127d425 ("net/axgbe: support scattered Rx")
Cc: stable@dpdk.org
Signed-off-by: Bhagyada Modali <bhagyada.modali@amd.com>
---
drivers/net/axgbe/axgbe_rxtx.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
@@ -346,10 +346,11 @@ uint16_t eth_axgbe_recv_scattered_pkts(void *rx_queue,
uint32_t error_status = 0;
uint16_t idx, pidx, data_len = 0, pkt_len = 0;
uint64_t offloads;
+ bool eop = 0;
idx = AXGBE_GET_DESC_IDX(rxq, rxq->cur);
+
while (nb_rx < nb_pkts) {
- bool eop = 0;
next_desc:
idx = AXGBE_GET_DESC_IDX(rxq, rxq->cur);
@@ -416,9 +417,12 @@ uint16_t eth_axgbe_recv_scattered_pkts(void *rx_queue,
mbuf->pkt_len = data_len;
if (first_seg != NULL) {
- if (rte_pktmbuf_chain(first_seg, mbuf) != 0)
+ if (rte_pktmbuf_chain(first_seg, mbuf) != 0) {
rte_mempool_put(rxq->mb_pool,
first_seg);
+ eop = 0;
+ break;
+ }
} else {
first_seg = mbuf;
}
@@ -462,8 +466,8 @@ uint16_t eth_axgbe_recv_scattered_pkts(void *rx_queue,
rte_pktmbuf_free(mbuf);
goto next_desc;
}
+ eop = 0;
- first_seg->pkt_len = pkt_len;
rxq->bytes += pkt_len;
mbuf->next = NULL;