net/iavf: support flow pattern for GRE
[dpdk.git] / drivers / net / iavf / iavf_ethdev.c
index 97a2dc7..4725381 100644 (file)
@@ -362,19 +362,11 @@ iavf_init_rss(struct iavf_adapter *adapter)
                PMD_DRV_LOG(DEBUG, "RSS is not supported");
                return -ENOTSUP;
        }
-       if (adapter->eth_dev->data->dev_conf.rxmode.mq_mode != ETH_MQ_RX_RSS) {
-               PMD_DRV_LOG(WARNING, "RSS is enabled by PF by default");
-               /* set all lut items to default queue */
-               for (i = 0; i < vf->vf_res->rss_lut_size; i++)
-                       vf->rss_lut[i] = 0;
-               ret = iavf_configure_rss_lut(adapter);
-               return ret;
-       }
 
        /* configure RSS key */
        if (!rss_conf->rss_key) {
                /* Calculate the default hash key */
-               for (i = 0; i <= vf->vf_res->rss_key_size; i++)
+               for (i = 0; i < vf->vf_res->rss_key_size; i++)
                        vf->rss_key[i] = (uint8_t)rte_rand();
        } else
                rte_memcpy(vf->rss_key, rss_conf->rss_key,
@@ -2364,7 +2356,15 @@ iavf_dev_close(struct rte_eth_dev *dev)
        rte_free(vf->aq_resp);
        vf->aq_resp = NULL;
 
-       vf->vf_reset = false;
+       /*
+        * If the VF is reset via VFLR, the device will be knocked out of bus
+        * master mode, and the driver will fail to recover from the reset. Fix
+        * this by enabling bus mastering after every reset. In a non-VFLR case,
+        * the bus master bit will not be disabled, and this call will have no
+        * effect.
+        */
+       if (vf->vf_reset && !rte_pci_set_bus_master(pci_dev, true))
+               vf->vf_reset = false;
 
        return ret;
 }
@@ -2448,7 +2448,6 @@ static int
 iavf_drv_i40evf_selected(struct rte_devargs *devargs, uint16_t device_id)
 {
        struct rte_kvargs *kvlist;
-       const char *key = "driver";
        int ret = 0;
 
        if (device_id != IAVF_DEV_ID_VF &&
@@ -2464,13 +2463,13 @@ iavf_drv_i40evf_selected(struct rte_devargs *devargs, uint16_t device_id)
        if (kvlist == NULL)
                return 0;
 
-       if (!rte_kvargs_count(kvlist, key))
+       if (!rte_kvargs_count(kvlist, RTE_DEVARGS_KEY_DRIVER))
                goto exit;
 
        /* i40evf driver selected when there's a key-value pair:
         * driver=i40evf
         */
-       if (rte_kvargs_process(kvlist, key,
+       if (rte_kvargs_process(kvlist, RTE_DEVARGS_KEY_DRIVER,
                               iavf_drv_i40evf_check_handler, NULL) < 0)
                goto exit;
 
@@ -2510,11 +2509,11 @@ RTE_PMD_REGISTER_PCI(net_iavf, rte_iavf_pmd);
 RTE_PMD_REGISTER_PCI_TABLE(net_iavf, pci_id_iavf_map);
 RTE_PMD_REGISTER_KMOD_DEP(net_iavf, "* igb_uio | vfio-pci");
 RTE_PMD_REGISTER_PARAM_STRING(net_iavf, "cap=dcf driver=i40evf");
-RTE_LOG_REGISTER(iavf_logtype_init, pmd.net.iavf.init, NOTICE);
-RTE_LOG_REGISTER(iavf_logtype_driver, pmd.net.iavf.driver, NOTICE);
+RTE_LOG_REGISTER_SUFFIX(iavf_logtype_init, init, NOTICE);
+RTE_LOG_REGISTER_SUFFIX(iavf_logtype_driver, driver, NOTICE);
 #ifdef RTE_ETHDEV_DEBUG_RX
-RTE_LOG_REGISTER(iavf_logtype_rx, pmd.net.iavf.rx, DEBUG);
+RTE_LOG_REGISTER_SUFFIX(iavf_logtype_rx, rx, DEBUG);
 #endif
 #ifdef RTE_ETHDEV_DEBUG_TX
-RTE_LOG_REGISTER(iavf_logtype_tx, pmd.net.iavf.tx, DEBUG);
+RTE_LOG_REGISTER_SUFFIX(iavf_logtype_tx, tx, DEBUG);
 #endif