X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fszedata2%2Frte_eth_szedata2.c;h=7874c4f4f832ef6768784b5d94293740ddb840a8;hb=ac61aa646322dc100689e03dbffdc9c5536cc23d;hp=4325b9a30d2478db3f3dc5c3c0ff5b92a535f263;hpb=fbd1913561484b58e155fbefea4e15491ed60c9f;p=dpdk.git diff --git a/drivers/net/szedata2/rte_eth_szedata2.c b/drivers/net/szedata2/rte_eth_szedata2.c index 4325b9a30d..7874c4f4f8 100644 --- a/drivers/net/szedata2/rte_eth_szedata2.c +++ b/drivers/net/szedata2/rte_eth_szedata2.c @@ -1013,18 +1013,29 @@ err_rx: return ret; } -static void +static int eth_dev_stop(struct rte_eth_dev *dev) { uint16_t i; uint16_t nb_rx = dev->data->nb_rx_queues; uint16_t nb_tx = dev->data->nb_tx_queues; + int ret; - for (i = 0; i < nb_tx; i++) - eth_tx_queue_stop(dev, i); + dev->data->dev_started = 0; - for (i = 0; i < nb_rx; i++) - eth_rx_queue_stop(dev, i); + for (i = 0; i < nb_tx; i++) { + ret = eth_tx_queue_stop(dev, i); + if (ret != 0) + return ret; + } + + for (i = 0; i < nb_rx; i++) { + ret = eth_rx_queue_stop(dev, i); + if (ret != 0) + return ret; + } + + return 0; } static int @@ -1162,8 +1173,12 @@ eth_dev_close(struct rte_eth_dev *dev) uint16_t i; uint16_t nb_rx = dev->data->nb_rx_queues; uint16_t nb_tx = dev->data->nb_tx_queues; + int ret; - eth_dev_stop(dev); + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return 0; + + ret = eth_dev_stop(dev); free(internals->sze_dev_path); @@ -1178,10 +1193,7 @@ eth_dev_close(struct rte_eth_dev *dev) } dev->data->nb_tx_queues = 0; - rte_free(dev->data->mac_addrs); - dev->data->mac_addrs = NULL; - - return 0; + return ret; } static int @@ -1536,6 +1548,8 @@ rte_szedata2_eth_dev_init(struct rte_eth_dev *dev, struct port_info *pi) rte_ether_addr_copy(ð_addr, data->mac_addrs); + dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS; + PMD_INIT_LOG(INFO, "%s device %s successfully initialized", RTE_STR(RTE_SZEDATA2_DRIVER_NAME), data->name); @@ -1910,10 +1924,8 @@ static int szedata2_eth_pci_remove(struct rte_pci_device *pci_dev) pci_dev->device.name, i); PMD_DRV_LOG(DEBUG, "Removing eth_dev %s", name); eth_dev = rte_eth_dev_allocated(name); - if (!eth_dev) { - PMD_DRV_LOG(ERR, "eth_dev %s not found", name); - retval = retval ? retval : -ENODEV; - } + if (eth_dev == NULL) + continue; /* port already released */ ret = rte_szedata2_eth_dev_uninit(eth_dev); if (ret != 0) {