X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fark%2Fark_ethdev.c;h=168b3659d6646e052349b92eab90bac3be976b19;hb=cb056611a8ed9ab9024f3b91bf26e97255194514;hp=5f2ed4b7b7386ad147c90dd03945da85080b8eda;hpb=b142387b07600c320683255d237b9109299883d5;p=dpdk.git diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c index 5f2ed4b7b7..168b3659d6 100644 --- a/drivers/net/ark/ark_ethdev.c +++ b/drivers/net/ark/ark_ethdev.c @@ -29,7 +29,7 @@ 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 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); @@ -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 = ð_ark_recv_pkts_noop; dev->tx_pkt_burst = ð_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,6 +672,8 @@ eth_ark_dev_stop(struct rte_eth_dev *dev) ark_pktchkr_dump_stats(ark->pc); ark_pktchkr_stop(ark->pc); } + + return 0; } static int @@ -682,6 +682,9 @@ 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,9 +707,6 @@ 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; }