ethdev: add device flag to bypass auto-filled queue xstats
[dpdk.git] / drivers / net / ark / ark_ethdev.c
index d472ae5..168b365 100644 (file)
@@ -29,8 +29,8 @@ static int ark_config_device(struct rte_eth_dev *dev);
 static int eth_ark_dev_uninit(struct rte_eth_dev *eth_dev);
 static int eth_ark_dev_configure(struct rte_eth_dev *dev);
 static int eth_ark_dev_start(struct rte_eth_dev *dev);
-static void eth_ark_dev_stop(struct rte_eth_dev *dev);
-static void eth_ark_dev_close(struct rte_eth_dev *dev);
+static int eth_ark_dev_stop(struct rte_eth_dev *dev);
+static int eth_ark_dev_close(struct rte_eth_dev *dev);
 static int eth_ark_dev_info_get(struct rte_eth_dev *dev,
                                struct rte_eth_dev_info *dev_info);
 static int eth_ark_dev_link_update(struct rte_eth_dev *dev,
@@ -105,7 +105,7 @@ eth_ark_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 
        ret = eth_ark_dev_init(eth_dev);
        if (ret)
-               rte_eth_dev_pci_release(eth_dev);
+               rte_eth_dev_release_port(eth_dev);
 
        return ret;
 }
@@ -256,12 +256,11 @@ eth_ark_dev_init(struct rte_eth_dev *dev)
                return ret;
        pci_dev = RTE_ETH_DEV_TO_PCI(dev);
        rte_eth_copy_pci_info(dev, pci_dev);
+       dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS;
 
        /* Use dummy function until setup */
        dev->rx_pkt_burst = &eth_ark_recv_pkts_noop;
        dev->tx_pkt_burst = &eth_ark_xmit_pkts_noop;
-       /* Let rte_eth_dev_close() release the port resources */
-       dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
 
        ark->bar0 = (uint8_t *)pci_dev->mem_resource[0].addr;
        ark->a_bar = (uint8_t *)pci_dev->mem_resource[2].addr;
@@ -385,6 +384,7 @@ eth_ark_dev_init(struct rte_eth_dev *dev)
                eth_dev->rx_pkt_burst = ark->eth_dev->rx_pkt_burst;
 
                rte_eth_copy_pci_info(eth_dev, pci_dev);
+               eth_dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS;
 
                eth_dev->data->mac_addrs = rte_zmalloc(name,
                                                RTE_ETHER_ADDR_LEN, 0);
@@ -506,9 +506,6 @@ eth_ark_dev_uninit(struct rte_eth_dev *dev)
        ark_pktgen_uninit(ark->pg);
        ark_pktchkr_uninit(ark->pc);
 
-       dev->dev_ops = NULL;
-       dev->rx_pkt_burst = NULL;
-       dev->tx_pkt_burst = NULL;
        return 0;
 }
 
@@ -586,7 +583,7 @@ eth_ark_dev_start(struct rte_eth_dev *dev)
        return 0;
 }
 
-static void
+static int
 eth_ark_dev_stop(struct rte_eth_dev *dev)
 {
        uint16_t i;
@@ -595,8 +592,9 @@ eth_ark_dev_stop(struct rte_eth_dev *dev)
        struct ark_mpu_t *mpu;
 
        if (ark->started == 0)
-               return;
+               return 0;
        ark->started = 0;
+       dev->data->dev_started = 0;
 
        /* Stop the extension first */
        if (ark->user_ext.dev_stop)
@@ -674,14 +672,19 @@ eth_ark_dev_stop(struct rte_eth_dev *dev)
                ark_pktchkr_dump_stats(ark->pc);
                ark_pktchkr_stop(ark->pc);
        }
+
+       return 0;
 }
 
-static void
+static int
 eth_ark_dev_close(struct rte_eth_dev *dev)
 {
        struct ark_adapter *ark = dev->data->dev_private;
        uint16_t i;
 
+       if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+               return 0;
+
        if (ark->user_ext.dev_close)
                ark->user_ext.dev_close(dev,
                 ark->user_data[dev->data->port_id]);
@@ -704,8 +707,7 @@ eth_ark_dev_close(struct rte_eth_dev *dev)
                dev->data->rx_queues[i] = 0;
        }
 
-       rte_free(dev->data->mac_addrs);
-       dev->data->mac_addrs = 0;
+       return 0;
 }
 
 static int