mask = rep_rxr->rx_ring_struct->ring_mask;
/* Put this mbuf on the RxQ of the Representor */
- prod_rx_buf = &rep_rxr->rx_buf_ring[rep_rxr->rx_prod++ & mask];
+ prod_rx_buf = &rep_rxr->rx_buf_ring[rep_rxr->rx_prod & mask];
if (!*prod_rx_buf) {
*prod_rx_buf = mbuf;
vfr_bp->rx_bytes[que] += mbuf->pkt_len;
vfr_bp->rx_pkts[que]++;
+ rep_rxr->rx_prod++;
} else {
+ /* Representor Rx ring full, drop pkt */
vfr_bp->rx_drop_bytes[que] += mbuf->pkt_len;
vfr_bp->rx_drop_pkts[que]++;
- rte_pktmbuf_free(mbuf); /* Representor Rx ring full, drop pkt */
+ rte_pktmbuf_free(mbuf);
}
return 0;
goto rx;
}
rxr->rx_prod = prod;
+
+ if (BNXT_TRUFLOW_EN(bp) && (BNXT_VF_IS_TRUSTED(bp) || BNXT_PF(bp)) &&
+ vfr_flag) {
+ bnxt_vfr_recv(mark_id, rxq->queue_id, mbuf);
+ /* Now return an error so that nb_rx_pkts is not
+ * incremented.
+ * This packet was meant to be given to the representor.
+ * So no need to account the packet and give it to
+ * parent Rx burst function.
+ */
+ rc = -ENODEV;
+ goto next_rx;
+ }
/*
* All MBUFs are allocated with the same size under DPDK,
* no optimization for rx_copy_thresh
rx:
*rx_pkt = mbuf;
- if (BNXT_TRUFLOW_EN(bp) &&
- (BNXT_VF_IS_TRUSTED(bp) || BNXT_PF(bp)) &&
- vfr_flag) {
- if (!bnxt_vfr_recv(mark_id, rxq->queue_id, mbuf)) {
- /* Now return an error so that nb_rx_pkts is not
- * incremented.
- * This packet was meant to be given to the representor.
- * So no need to account the packet and give it to
- * parent Rx burst function.
- */
- rc = -ENODEV;
- }
- }
-
next_rx:
*raw_cons = tmp_raw_cons;