[v2,4/6] common/idpf: add rss_offload hash in singleq rx

Message ID 20230111071545.504706-5-mingxia.liu@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Qi Zhang
Headers
Series add idpf pmd enhancement features |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Liu, Mingxia Jan. 11, 2023, 7:15 a.m. UTC
  This patch add rss valid flag and hash value parsing of rx descriptor.

Signed-off-by: Mingxia Liu <mingxia.liu@intel.com>
---
 drivers/common/idpf/idpf_common_rxtx.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
  

Patch

diff --git a/drivers/common/idpf/idpf_common_rxtx.c b/drivers/common/idpf/idpf_common_rxtx.c
index 6bd40c4b0c..65bbcd0f1b 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)];