Signed-off-by: Hemant Agrawal <hemant.agra...@nxp.com> --- drivers/net/dpaa2/dpaa2_ethdev.c | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-)
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c index f4c73de..e9800f4 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.c +++ b/drivers/net/dpaa2/dpaa2_ethdev.c @@ -54,6 +54,7 @@ #include "dpaa2_ethdev.h" static struct rte_dpaa2_driver rte_dpaa2_pmd; +static int dpaa2_dev_uninit(struct rte_eth_dev *eth_dev); /** * Atomically reads the link status information from global @@ -783,6 +784,7 @@ void dpaa2_dev_stats_reset(struct rte_eth_dev *dev) if (ret) { PMD_INIT_LOG(ERR, "Failure in opening dpni@%d device with" " error code %d\n", hw_id, ret); + free(dpni_dev); return -1; } @@ -791,14 +793,14 @@ void dpaa2_dev_stats_reset(struct rte_eth_dev *dev) if (ret) { PMD_INIT_LOG(ERR, "Failure cleaning dpni@%d device with" " error code %d\n", hw_id, ret); - return -1; + goto init_err; } ret = dpni_get_attributes(dpni_dev, CMD_PRI_LOW, priv->token, &attr); if (ret) { PMD_INIT_LOG(ERR, "Failure in getting dpni@%d attribute, " " error code %d\n", hw_id, ret); - return -1; + goto init_err; } priv->num_tc = attr.num_tcs; @@ -831,7 +833,7 @@ void dpaa2_dev_stats_reset(struct rte_eth_dev *dev) ret = dpaa2_alloc_rx_tx_queues(eth_dev); if (ret) { PMD_INIT_LOG(ERR, "dpaa2_alloc_rx_tx_queuesFailed\n"); - return -ret; + goto init_err; } /* Allocate memory for storing MAC addresses */ @@ -841,7 +843,8 @@ void dpaa2_dev_stats_reset(struct rte_eth_dev *dev) PMD_INIT_LOG(ERR, "Failed to allocate %d bytes needed to " "store MAC addresses", ETHER_ADDR_LEN * attr.mac_filter_entries); - return -ENOMEM; + ret = -ENOMEM; + goto init_err; } ret = dpni_get_primary_mac_addr(dpni_dev, CMD_PRI_LOW, @@ -850,10 +853,9 @@ void dpaa2_dev_stats_reset(struct rte_eth_dev *dev) if (ret) { PMD_INIT_LOG(ERR, "DPNI get mac address failed:" " Error Code = %d\n", ret); - return -ret; + goto init_err; } - /* ... tx buffer layout ... */ memset(&layout, 0, sizeof(struct dpni_buffer_layout)); layout.options = DPNI_BUF_LAYOUT_OPT_FRAME_STATUS; @@ -863,7 +865,7 @@ void dpaa2_dev_stats_reset(struct rte_eth_dev *dev) if (ret) { PMD_INIT_LOG(ERR, "Error (%d) in setting tx buffer" " layout", ret); - return -1; + goto init_err; } /* ... tx-conf and error buffer layout ... */ @@ -875,7 +877,7 @@ void dpaa2_dev_stats_reset(struct rte_eth_dev *dev) if (ret) { PMD_INIT_LOG(ERR, "Error (%d) in setting tx-conf buffer" " layout", ret); - return -1; + goto init_err; } eth_dev->dev_ops = &dpaa2_ethdev_ops; @@ -886,6 +888,9 @@ void dpaa2_dev_stats_reset(struct rte_eth_dev *dev) rte_fslmc_vfio_dmamap(); return 0; +init_err: + dpaa2_dev_uninit(eth_dev); + return ret; } static int @@ -893,7 +898,7 @@ void dpaa2_dev_stats_reset(struct rte_eth_dev *dev) { struct dpaa2_dev_priv *priv = eth_dev->data->dev_private; struct fsl_mc_io *dpni = (struct fsl_mc_io *)priv->hw; - int i, ret; + int i; struct dpaa2_queue *dpaa2_q; PMD_INIT_FUNC_TRACE(); @@ -920,23 +925,12 @@ void dpaa2_dev_stats_reset(struct rte_eth_dev *dev) priv->rx_vq[0] = NULL; } - /* Allocate memory for storing MAC addresses */ + /* free memory for storing MAC addresses */ if (eth_dev->data->mac_addrs) { rte_free(eth_dev->data->mac_addrs); eth_dev->data->mac_addrs = NULL; } - /*Close the device at underlying layer*/ - ret = dpni_close(dpni, CMD_PRI_LOW, priv->token); - if (ret) { - PMD_INIT_LOG(ERR, "Failure closing dpni device with" - " error code %d\n", ret); - } - - /*Free the allocated memory for ethernet private data and dpni*/ - priv->hw = NULL; - free(dpni); - eth_dev->dev_ops = NULL; eth_dev->rx_pkt_burst = NULL; eth_dev->tx_pkt_burst = NULL; -- 1.9.1