]> git.droids-corp.org - dpdk.git/commitdiff
net/iavf: relax RSS virtual channel commands
authorAlvin Zhang <alvinx.zhang@intel.com>
Mon, 26 Jul 2021 09:17:24 +0000 (17:17 +0800)
committerQi Zhang <qi.z.zhang@intel.com>
Tue, 27 Jul 2021 11:56:22 +0000 (13:56 +0200)
Kernel PF may not respond to virtual channel commands
VIRTCHNL_OP_GET_RSS_HENA_CAPS and VIRTCHNL_OP_SET_RSS_HENA, which
will cause VF to fail to start.

RSS offload type configuration is not a necessary feature for VF,
so in order to improve VF compatibility, in this patch the PMD will
ignore the error result of above two commands and will print warnings
instead.

Fixes: 5a038d19962d ("net/iavf: fix RSS configuration on i40e VF")
Cc: stable@dpdk.org
Signed-off-by: Alvin Zhang <alvinx.zhang@intel.com>
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
drivers/net/iavf/iavf_ethdev.c

index 41382c6d669b13ba7b03da26c36cce28a0feee7a..574cfe055e7c6eceb39bc25d1f8dfc736a4bd6ee 100644 (file)
@@ -259,7 +259,7 @@ iavf_set_mc_addr_list(struct rte_eth_dev *dev,
        return err;
 }
 
-static int
+static void
 iavf_config_rss_hf(struct iavf_adapter *adapter, uint64_t rss_hf)
 {
        static const uint64_t map_hena_rss[] = {
@@ -319,8 +319,16 @@ iavf_config_rss_hf(struct iavf_adapter *adapter, uint64_t rss_hf)
        int ret;
 
        ret = iavf_get_hena_caps(adapter, &caps);
-       if (ret)
-               return ret;
+       if (ret) {
+               /**
+                * RSS offload type configuration is not a necessary feature
+                * for VF, so here just print a warning and return.
+                */
+               PMD_DRV_LOG(WARNING,
+                           "fail to get RSS offload type caps, ret: %d", ret);
+               return;
+       }
+
        /**
         * ETH_RSS_IPV4 and ETH_RSS_IPV6 can be considered as 2
         * generalizations of all other IPv4 and IPv6 RSS types.
@@ -343,8 +351,15 @@ iavf_config_rss_hf(struct iavf_adapter *adapter, uint64_t rss_hf)
        }
 
        ret = iavf_set_hena(adapter, hena);
-       if (ret)
-               return ret;
+       if (ret) {
+               /**
+                * RSS offload type configuration is not a necessary feature
+                * for VF, so here just print a warning and return.
+                */
+               PMD_DRV_LOG(WARNING,
+                           "fail to set RSS offload types, ret: %d", ret);
+               return;
+       }
 
        if (valid_rss_hf & ipv4_rss)
                valid_rss_hf |= rss_hf & ETH_RSS_IPV4;
@@ -357,7 +372,6 @@ iavf_config_rss_hf(struct iavf_adapter *adapter, uint64_t rss_hf)
                            rss_hf & ~valid_rss_hf);
 
        vf->rss_hf = valid_rss_hf;
-       return 0;
 }
 
 static int
@@ -409,9 +423,7 @@ iavf_init_rss(struct iavf_adapter *adapter)
                        return ret;
                }
        } else {
-               ret = iavf_config_rss_hf(adapter, rss_conf->rss_hf);
-               if (ret != -ENOTSUP)
-                       return ret;
+               iavf_config_rss_hf(adapter, rss_conf->rss_hf);
        }
 
        return 0;
@@ -1400,9 +1412,7 @@ iavf_dev_rss_hash_update(struct rte_eth_dev *dev,
                        return ret;
                }
        } else {
-               ret = iavf_config_rss_hf(adapter, rss_conf->rss_hf);
-               if (ret != -ENOTSUP)
-                       return ret;
+               iavf_config_rss_hf(adapter, rss_conf->rss_hf);
        }
 
        return 0;