[RFC,3/3] net/idpf: adjust RSS LUT to exclude hairpin queue

Message ID 20220905113031.3223290-4-junfeng.guo@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series enable hairpin queue |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Junfeng Guo Sept. 5, 2022, 11:30 a.m. UTC
  RSS should direct traffic only to the normal data Rx queues, so when
hairpin queue configured, RSS LUT should be adjusted to exclude
the hairpin queue.

Signed-off-by: Xiao Wang <xiao.w.wang@intel.com>
Signed-off-by: Junfeng Guo <junfeng.guo@intel.com>
---
 drivers/net/idpf/idpf_ethdev.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)
  

Patch

diff --git a/drivers/net/idpf/idpf_ethdev.c b/drivers/net/idpf/idpf_ethdev.c
index aaca6f4202..fc9663d32e 100644
--- a/drivers/net/idpf/idpf_ethdev.c
+++ b/drivers/net/idpf/idpf_ethdev.c
@@ -625,9 +625,28 @@  idpf_config_rx_queues_irqs(struct rte_eth_dev *dev)
 	return -1;
 }
 
+static int
+idpf_config_rss_lut(struct idpf_vport *vport, uint16_t nb_q)
+{
+	uint16_t lut_size = vport->rss_lut_size;
+	uint16_t i;
+	int ret;
+
+	for (i = 0; i < lut_size; i++)
+		vport->rss_lut[i] = i % nb_q;
+
+	ret = idpf_set_rss_lut(vport);
+	if (ret)
+		PMD_INIT_LOG(ERR, "Failed to configure RSS lut");
+
+	return ret;
+}
+
 static int
 idpf_start_queues(struct rte_eth_dev *dev)
 {
+	struct idpf_vport *vport = (struct idpf_vport *)dev->data->dev_private;
+	uint16_t nb_rxq = dev->data->nb_rx_queues;
 	struct idpf_rx_queue *rxq;
 	struct idpf_tx_queue *txq;
 	int err = 0;
@@ -671,6 +690,11 @@  idpf_start_queues(struct rte_eth_dev *dev)
 		}
 	}
 
+	/* RSS only to the data queues */
+	rxq = dev->data->rx_queues[nb_rxq - 1];
+	if (nb_rxq > 1 && rxq && rxq->hairpin_q)
+		err = idpf_config_rss_lut(vport, nb_rxq - 1);
+
 	return err;
 }