net/hns3: fix flow director lock
[dpdk.git] / drivers / net / hns3 / hns3_ethdev.c
index f5dfa47..95be141 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)
@@ -7360,8 +7356,8 @@ hns3_dev_init(struct rte_eth_dev *eth_dev)
                PMD_INIT_LOG(ERR, "Failed to alloc memory for process private");
                return -ENOMEM;
        }
-       /* initialize flow filter lists */
-       hns3_filterlist_init(eth_dev);
+
+       hns3_flow_init(eth_dev);
 
        hns3_set_rxtx_function(eth_dev);
        eth_dev->dev_ops = &hns3_eth_dev_ops;