net/hns3: fix VMDq mode check
authorHuisong Li <lihuisong@huawei.com>
Sat, 17 Apr 2021 09:54:57 +0000 (17:54 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 20 Apr 2021 00:40:43 +0000 (02:40 +0200)
HNS3 PF driver only supports RSS, DCB or NONE multiple queues mode.
Currently, driver doesn't verify the VMDq multi-queue mode completely.
This patch fixes the verification for VMDq mode.

Fixes: 62e3ccc2b94c ("net/hns3: support flow control")
Cc: stable@dpdk.org
Signed-off-by: Huisong Li <lihuisong@huawei.com>
Signed-off-by: Min Hu (Connor) <humin29@huawei.com>
drivers/net/hns3/hns3_ethdev.c

index f5dfa47..3f5cbef 100644 (file)
@@ -2222,23 +2222,16 @@ hns3_check_mq_mode(struct rte_eth_dev *dev)
        int max_tc = 0;
        int i;
 
-       dcb_rx_conf = &dev->data->dev_conf.rx_adv_conf.dcb_rx_conf;
-       dcb_tx_conf = &dev->data->dev_conf.tx_adv_conf.dcb_tx_conf;
-
-       if (rx_mq_mode == ETH_MQ_RX_VMDQ_DCB_RSS) {
-               hns3_err(hw, "ETH_MQ_RX_VMDQ_DCB_RSS is not supported. "
-                        "rx_mq_mode = %d", rx_mq_mode);
-               return -EINVAL;
-       }
-
-       if (rx_mq_mode == ETH_MQ_RX_VMDQ_DCB ||
-           tx_mq_mode == ETH_MQ_TX_VMDQ_DCB) {
-               hns3_err(hw, "ETH_MQ_RX_VMDQ_DCB and ETH_MQ_TX_VMDQ_DCB "
-                        "is not supported. rx_mq_mode = %d, tx_mq_mode = %d",
+       if ((rx_mq_mode & ETH_MQ_RX_VMDQ_FLAG) ||
+           (tx_mq_mode == ETH_MQ_TX_VMDQ_DCB ||
+            tx_mq_mode == ETH_MQ_TX_VMDQ_ONLY)) {
+               hns3_err(hw, "VMDQ is not supported, rx_mq_mode = %d, tx_mq_mode = %d.",
                         rx_mq_mode, tx_mq_mode);
-               return -EINVAL;
+               return -EOPNOTSUPP;
        }
 
+       dcb_rx_conf = &dev->data->dev_conf.rx_adv_conf.dcb_rx_conf;
+       dcb_tx_conf = &dev->data->dev_conf.tx_adv_conf.dcb_tx_conf;
        if (rx_mq_mode & ETH_MQ_RX_DCB_FLAG) {
                if (dcb_rx_conf->nb_tcs > pf->tc_max) {
                        hns3_err(hw, "nb_tcs(%u) > max_tc(%u) driver supported.",
@@ -2297,8 +2290,7 @@ hns3_check_dcb_cfg(struct rte_eth_dev *dev)
                return -EOPNOTSUPP;
        }
 
-       /* Check multiple queue mode */
-       return hns3_check_mq_mode(dev);
+       return 0;
 }
 
 static int
@@ -2471,6 +2463,10 @@ hns3_dev_configure(struct rte_eth_dev *dev)
        }
 
        hw->adapter_state = HNS3_NIC_CONFIGURING;
+       ret = hns3_check_mq_mode(dev);
+       if (ret)
+               goto cfg_err;
+
        if ((uint32_t)mq_mode & ETH_MQ_RX_DCB_FLAG) {
                ret = hns3_check_dcb_cfg(dev);
                if (ret)