X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fszedata2%2Frte_eth_szedata2.c;h=6eaeadf1c828ffb63f1b7478527185c330f2623b;hb=d38b62cd6ccffd1e269dbf9942f4f60022c38040;hp=5f589dfa4c93de11c590a7957d246e7de2bd4ca5;hpb=68f578bf9bf87ed72447054e0b49928d82b55689;p=dpdk.git diff --git a/drivers/net/szedata2/rte_eth_szedata2.c b/drivers/net/szedata2/rte_eth_szedata2.c index 5f589dfa4c..6eaeadf1c8 100644 --- a/drivers/net/szedata2/rte_eth_szedata2.c +++ b/drivers/net/szedata2/rte_eth_szedata2.c @@ -15,8 +15,8 @@ #include #include -#include -#include +#include +#include #include #include #include @@ -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);