ethdev: add device flag to bypass auto-filled queue xstats
[dpdk.git] / drivers / net / avp / avp_ethdev.c
index 1abe96c..5f8187b 100644 (file)
 
 #include "avp_logs.h"
 
-int avp_logtype_driver;
-
 static int avp_dev_create(struct rte_pci_device *pci_dev,
                          struct rte_eth_dev *eth_dev);
 
 static int avp_dev_configure(struct rte_eth_dev *dev);
 static int avp_dev_start(struct rte_eth_dev *dev);
-static void avp_dev_stop(struct rte_eth_dev *dev);
-static void avp_dev_close(struct rte_eth_dev *dev);
+static int avp_dev_stop(struct rte_eth_dev *dev);
+static int avp_dev_close(struct rte_eth_dev *dev);
 static int avp_dev_info_get(struct rte_eth_dev *dev,
                            struct rte_eth_dev_info *dev_info);
 static int avp_vlan_offload_set(struct rte_eth_dev *dev, int mask);
@@ -959,8 +957,6 @@ eth_avp_dev_init(struct rte_eth_dev *eth_dev)
        eth_dev->dev_ops = &avp_eth_dev_ops;
        eth_dev->rx_pkt_burst = &avp_recv_pkts;
        eth_dev->tx_pkt_burst = &avp_xmit_pkts;
-       /* Let rte_eth_dev_close() release the port resources */
-       eth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 
        if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
                /*
@@ -978,6 +974,7 @@ eth_avp_dev_init(struct rte_eth_dev *eth_dev)
        }
 
        rte_eth_copy_pci_info(eth_dev, pci_dev);
+       eth_dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS;
 
        /* Check current migration status */
        if (avp_dev_migration_pending(eth_dev)) {
@@ -2079,7 +2076,7 @@ unlock:
        return ret;
 }
 
-static void
+static int
 avp_dev_stop(struct rte_eth_dev *eth_dev)
 {
        struct avp_dev *avp = AVP_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private);
@@ -2088,6 +2085,7 @@ avp_dev_stop(struct rte_eth_dev *eth_dev)
        rte_spinlock_lock(&avp->lock);
        if (avp->flags & AVP_F_DETACHED) {
                PMD_DRV_LOG(ERR, "Operation not supported during VM live migration\n");
+               ret = -ENOTSUP;
                goto unlock;
        }
 
@@ -2103,14 +2101,18 @@ avp_dev_stop(struct rte_eth_dev *eth_dev)
 
 unlock:
        rte_spinlock_unlock(&avp->lock);
+       return ret;
 }
 
-static void
+static int
 avp_dev_close(struct rte_eth_dev *eth_dev)
 {
        struct avp_dev *avp = AVP_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private);
        int ret;
 
+       if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+               return 0;
+
        rte_spinlock_lock(&avp->lock);
        if (avp->flags & AVP_F_DETACHED) {
                PMD_DRV_LOG(ERR, "Operation not supported during VM live migration\n");
@@ -2141,6 +2143,7 @@ avp_dev_close(struct rte_eth_dev *eth_dev)
 
 unlock:
        rte_spinlock_unlock(&avp->lock);
+       return 0;
 }
 
 static int
@@ -2306,10 +2309,4 @@ avp_dev_stats_reset(struct rte_eth_dev *eth_dev)
 
 RTE_PMD_REGISTER_PCI(net_avp, rte_avp_pmd);
 RTE_PMD_REGISTER_PCI_TABLE(net_avp, pci_id_avp_map);
-
-RTE_INIT(avp_init_log)
-{
-       avp_logtype_driver = rte_log_register("pmd.net.avp.driver");
-       if (avp_logtype_driver >= 0)
-               rte_log_set_level(avp_logtype_driver, RTE_LOG_NOTICE);
-}
+RTE_LOG_REGISTER(avp_logtype_driver, pmd.net.avp.driver, NOTICE);