[PATCH v3 4/6] common/idpf: add rss_offload hash in singleq rx
Mingxia Liu
mingxia.liu at intel.com
Wed Jan 18 08:14:38 CET 2023
This patch add rss valid flag and hash value parsing of rx descriptor.
Signed-off-by: Mingxia Liu <mingxia.liu at intel.com>
---
drivers/common/idpf/idpf_common_rxtx.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/drivers/common/idpf/idpf_common_rxtx.c b/drivers/common/idpf/idpf_common_rxtx.c
index 9dbf0f4764..0ebb390842 100644
--- a/drivers/common/idpf/idpf_common_rxtx.c
+++ b/drivers/common/idpf/idpf_common_rxtx.c
@@ -1030,6 +1030,20 @@ idpf_update_rx_tail(struct idpf_rx_queue *rxq, uint16_t nb_hold,
rxq->nb_rx_hold = nb_hold;
}
+static inline void
+idpf_singleq_rx_rss_offload(struct rte_mbuf *mb,
+ volatile struct virtchnl2_rx_flex_desc_nic *rx_desc,
+ uint64_t *pkt_flags)
+{
+ uint16_t rx_status0 = rte_le_to_cpu_16(rx_desc->status_error0);
+
+ if (rx_status0 & RTE_BIT32(VIRTCHNL2_RX_FLEX_DESC_STATUS0_RSS_VALID_S)) {
+ *pkt_flags |= RTE_MBUF_F_RX_RSS_HASH;
+ mb->hash.rss = rte_le_to_cpu_32(rx_desc->rss_hash);
+ }
+
+}
+
uint16_t
idpf_singleq_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
uint16_t nb_pkts)
@@ -1118,6 +1132,7 @@ idpf_singleq_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
rxm->port = rxq->port_id;
rxm->ol_flags = 0;
pkt_flags = idpf_rxd_to_pkt_flags(rx_status0);
+ idpf_singleq_rx_rss_offload(rxm, &rxd.flex_nic_wb, &pkt_flags);
rxm->packet_type =
ptype_tbl[(uint8_t)(rte_cpu_to_le_16(rxd.flex_nic_wb.ptype_flex_flags0) &
VIRTCHNL2_RX_FLEX_DESC_PTYPE_M)];
@@ -1248,6 +1263,7 @@ idpf_singleq_recv_scatter_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
first_seg->port = rxq->port_id;
first_seg->ol_flags = 0;
pkt_flags = idpf_rxd_to_pkt_flags(rx_status0);
+ idpf_singleq_rx_rss_offload(first_seg, &rxd.flex_nic_wb, &pkt_flags);
first_seg->packet_type =
ptype_tbl[(uint8_t)(rte_cpu_to_le_16(rxd.flex_nic_wb.ptype_flex_flags0) &
VIRTCHNL2_RX_FLEX_DESC_PTYPE_M)];
--
2.25.1
More information about the dev
mailing list