Skip to content

Commit

Permalink
net/axgbe: fix scattered Rx
Browse files Browse the repository at this point in the history
[ upstream commit 0fda97d ]

Error check needs to be done only for last segment of Jumbo packet.
Freed first_seg and reset eop to 0 in error case

Fixes: 965b312 ("net/axgbe: support scattered Rx")

Signed-off-by: Bhagyada Modali <bhagyada.modali@amd.com>
Acked-by: Chandubabu Namburu <chandu@amd.com>
  • Loading branch information
BhagyadaM authored and kevintraynor committed Oct 11, 2022
1 parent 45ae1b8 commit 77c3e41
Showing 1 changed file with 20 additions and 15 deletions.
35 changes: 20 additions & 15 deletions drivers/net/axgbe/axgbe_rxtx.c
Original file line number Diff line number Diff line change
Expand Up @@ -344,8 +344,8 @@ uint16_t eth_axgbe_recv_scattered_pkts(void *rx_queue,
uint64_t old_dirty = rxq->dirty;
struct rte_mbuf *first_seg = NULL;
struct rte_mbuf *mbuf, *tmbuf;
unsigned int err, etlt;
uint32_t error_status;
unsigned int err = 0, etlt;
uint32_t error_status = 0;
uint16_t idx, pidx, data_len = 0, pkt_len = 0;
uint64_t offloads;

Expand Down Expand Up @@ -382,19 +382,6 @@ uint16_t eth_axgbe_recv_scattered_pkts(void *rx_queue,
}

mbuf = rxq->sw_ring[idx];
/* Check for any errors and free mbuf*/
err = AXGMAC_GET_BITS_LE(desc->write.desc3,
RX_NORMAL_DESC3, ES);
error_status = 0;
if (unlikely(err)) {
error_status = desc->write.desc3 & AXGBE_ERR_STATUS;
if ((error_status != AXGBE_L3_CSUM_ERR)
&& (error_status != AXGBE_L4_CSUM_ERR)) {
rxq->errors++;
rte_pktmbuf_free(mbuf);
goto err_set;
}
}
rte_prefetch1(rte_pktmbuf_mtod(mbuf, void *));

if (!AXGMAC_GET_BITS_LE(desc->write.desc3,
Expand All @@ -407,6 +394,24 @@ uint16_t eth_axgbe_recv_scattered_pkts(void *rx_queue,
pkt_len = AXGMAC_GET_BITS_LE(desc->write.desc3,
RX_NORMAL_DESC3, PL);
data_len = pkt_len - rxq->crc_len;
/* Check for any errors and free mbuf*/
err = AXGMAC_GET_BITS_LE(desc->write.desc3,
RX_NORMAL_DESC3, ES);
error_status = 0;
if (unlikely(err)) {
error_status = desc->write.desc3 &
AXGBE_ERR_STATUS;
if (error_status != AXGBE_L3_CSUM_ERR &&
error_status != AXGBE_L4_CSUM_ERR) {
rxq->errors++;
rte_pktmbuf_free(mbuf);
rte_pktmbuf_free(first_seg);
first_seg = NULL;
eop = 0;
goto err_set;
}
}

}

if (first_seg != NULL) {
Expand Down

0 comments on commit 77c3e41

Please sign in to comment.