]> git.droids-corp.org - dpdk.git/commitdiff
net/vmxnet3: fix RSS setting on v4
authorEduard Serra <eserra@vmware.com>
Wed, 4 Mar 2020 02:35:56 +0000 (02:35 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Wed, 18 Mar 2020 09:21:41 +0000 (10:21 +0100)
When calling to setup RSS on v4 API, ESX will expect
IPv4/6 TCP RSS to be set/requested mandatory.

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 supposed to be most straightforward (testpmd, pktgen).

Bugzilla ID: 400
Fixes: 643fba770705 ("net/vmxnet3: add v4 boot and guest UDP RSS config")
Cc: stable@dpdk.org
Signed-off-by: Eduard Serra <eserra@vmware.com>
Acked-by: Yong Wang <yongwang@vmware.com>
drivers/net/vmxnet3/vmxnet3_ethdev.c
drivers/net/vmxnet3/vmxnet3_ethdev.h
drivers/net/vmxnet3/vmxnet3_rxtx.c

index 6e6efa960323aeb6511398650b9086f2b9f93527..705e9760f4c0c338e088a7f8169b554f61860bad 100644 (file)
@@ -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) {
index 8c2b6f877175a0e3a12eddf3fba13f3dc91fa946..dd685b02b7b474056bd6cc6faca659c2b43967a6 100644 (file)
        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;
index 7794d74214b774edd6aa9f8ba0a3f4103704b5bf..dd99684bee4d5d1dbd91bb3a2b5914b954beb28b 100644 (file)
@@ -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);