X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fszedata2%2Frte_eth_szedata2.c;h=7874c4f4f832ef6768784b5d94293740ddb840a8;hb=c1d4e9d37abdc6c07a05f7d96928e624fea9ebb5;hp=a17c53577c08c404e237655e103af0323d798bf0;hpb=2c65898b4813baba7aadce57b68212d5af82a2fd;p=dpdk.git diff --git a/drivers/net/szedata2/rte_eth_szedata2.c b/drivers/net/szedata2/rte_eth_szedata2.c index a17c53577c..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 @@ -1155,15 +1166,19 @@ eth_tx_queue_release(void *q) } } -static void +static int eth_dev_close(struct rte_eth_dev *dev) { struct pmd_internals *internals = dev->data->dev_private; 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,8 +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 ret; } static int @@ -1486,9 +1500,6 @@ rte_szedata2_eth_dev_init(struct rte_eth_dev *dev, struct port_info *pi) PMD_INIT_LOG(INFO, "Initializing eth_dev %s (driver %s)", data->name, RTE_STR(RTE_SZEDATA2_DRIVER_NAME)); - /* Let rte_eth_dev_close() release the port resources */ - dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE; - /* Fill internal private structure. */ internals->dev = dev; /* Get index of szedata2 device file and create path to device file */ @@ -1537,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); @@ -1911,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) {