[v3] net/vmxnet3: fix RSS setting on v4

Message ID 1583289349-21583-1-git-send-email-eserra@vmware.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers
Series [v3] net/vmxnet3: fix RSS setting on v4 |

Checks

Context Check Description
ci/checkpatch warning coding style issues
ci/iol-testing success Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/travis-robot success Travis build: passed
ci/Intel-compilation success Compilation OK

Commit Message

Eduard Serra March 4, 2020, 2:35 a.m. UTC
  When calling to setup RSS on v4 API, ESX will expect
IPv4/6 TCP RSS to be set/requested mandatorily.

This patch will:
- Set IPv4/6 TCP RSS when these have not been set. A warning
message is thrown to make sure we warn the application we are
setting IPv4/6 TCP RSS when not set.
- An additional check has been added to dodge RSS configuration
altogether unless MQ_RSS has been requested, similar to v3.

The alternative (returning error) was considered, the intent
is to ease the task of setting up and running vmxnet3 in situations
where it's supposted to be most strightforward (testpmd, pktgen).

Open bug for this:
https://bugs.dpdk.org/show_bug.cgi?id=400

Signed-off-by: Eduard Serra <eserra@vmware.com>
Acked-by: Yong Wang <yongwang@vmware.com>
Fixes: 643fba770705 ("net/vmxnet3: v4 boot and guest UDP RSS configuration")
---
 drivers/net/vmxnet3/vmxnet3_ethdev.c | 3 ++-
 drivers/net/vmxnet3/vmxnet3_ethdev.h | 4 ++++
 drivers/net/vmxnet3/vmxnet3_rxtx.c   | 8 ++++++++
 3 files changed, 14 insertions(+), 1 deletion(-)
  

Comments

Ferruh Yigit March 5, 2020, 2:19 p.m. UTC | #1
On 3/4/2020 2:35 AM, Eduard Serra Miralles wrote:
> When calling to setup RSS on v4 API, ESX will expect
> IPv4/6 TCP RSS to be set/requested mandatorily.
> 
> This patch will:
> - Set IPv4/6 TCP RSS when these have not been set. A warning
> message is thrown to make sure we warn the application we are
> setting IPv4/6 TCP RSS when not set.
> - An additional check has been added to dodge RSS configuration
> altogether unless MQ_RSS has been requested, similar to v3.
> 
> The alternative (returning error) was considered, the intent
> is to ease the task of setting up and running vmxnet3 in situations
> where it's supposted to be most strightforward (testpmd, pktgen).
> 
> Open bug for this:
> https://bugs.dpdk.org/show_bug.cgi?id=400
> 
> Signed-off-by: Eduard Serra <eserra@vmware.com>
> Acked-by: Yong Wang <yongwang@vmware.com>
> Fixes: 643fba770705 ("net/vmxnet3: v4 boot and guest UDP RSS configuration")

    Bugzilla ID: 400
    Fixes: 643fba770705 ("net/vmxnet3: add v4 boot and guest UDP RSS config")
    Cc: stable@dpdk.org

Applied to dpdk-next-net/master, thanks.
  

Patch

diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c
index 6e6efa9..705e976 100644
--- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
+++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
@@ -771,7 +771,8 @@  vmxnet3_dev_start(struct rte_eth_dev *dev)
 		PMD_INIT_LOG(DEBUG, "Failed to setup memory region\n");
 	}
 
-	if (VMXNET3_VERSION_GE_4(hw)) {
+	if (VMXNET3_VERSION_GE_4(hw) &&
+	    dev->data->dev_conf.rxmode.mq_mode == ETH_MQ_RX_RSS) {
 		/* Check for additional RSS  */
 		ret = vmxnet3_v4_rss_configure(dev);
 		if (ret != VMXNET3_SUCCESS) {
diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.h b/drivers/net/vmxnet3/vmxnet3_ethdev.h
index 8c2b6f8..dd685b0 100644
--- a/drivers/net/vmxnet3/vmxnet3_ethdev.h
+++ b/drivers/net/vmxnet3/vmxnet3_ethdev.h
@@ -38,6 +38,10 @@ 
 	ETH_RSS_NONFRAG_IPV4_UDP | \
 	ETH_RSS_NONFRAG_IPV6_UDP)
 
+#define VMXNET3_MANDATORY_V4_RSS ( \
+	ETH_RSS_NONFRAG_IPV4_TCP | \
+	ETH_RSS_NONFRAG_IPV6_TCP)
+
 /* RSS configuration structure - shared with device through GPA */
 typedef struct VMXNET3_RSSConf {
 	uint16_t   hashType;
diff --git a/drivers/net/vmxnet3/vmxnet3_rxtx.c b/drivers/net/vmxnet3/vmxnet3_rxtx.c
index 7794d74..dd99684 100644
--- a/drivers/net/vmxnet3/vmxnet3_rxtx.c
+++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c
@@ -1311,6 +1311,14 @@  vmxnet3_v4_rss_configure(struct rte_eth_dev *dev)
 
 	cmdInfo->setRSSFields = 0;
 	port_rss_conf = &dev->data->dev_conf.rx_adv_conf.rss_conf;
+
+	if ((port_rss_conf->rss_hf & VMXNET3_MANDATORY_V4_RSS) !=
+	    VMXNET3_MANDATORY_V4_RSS) {
+		PMD_INIT_LOG(WARNING, "RSS: IPv4/6 TCP is required for vmxnet3 v4 RSS,"
+			     "automatically setting it");
+		port_rss_conf->rss_hf |= VMXNET3_MANDATORY_V4_RSS;
+	}
+
 	rss_hf = port_rss_conf->rss_hf &
 		(VMXNET3_V4_RSS_MASK | VMXNET3_RSS_OFFLOAD_ALL);