Consolidate FM deconfiguration to avoid duplicate calls.
Move the fm_deconfig call to a single location and remove
redundant checks in the device close path.

Signed-off-by: Hemant Agrawal <[email protected]>
---
 drivers/net/dpaa/dpaa_ethdev.c | 37 +++++++++++++++++++++++++---------
 drivers/net/dpaa/dpaa_flow.c   |  9 +++++----
 2 files changed, 32 insertions(+), 14 deletions(-)

diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c
index 3b66fbe18a..a223703421 100644
--- a/drivers/net/dpaa/dpaa_ethdev.c
+++ b/drivers/net/dpaa/dpaa_ethdev.c
@@ -526,10 +526,12 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev)
 
        /* DPAA FM deconfig */
        if (!(default_q || fmc_q)) {
-               ret = dpaa_fm_deconfig(dpaa_intf, dev->process_private);
-               if (ret) {
-                       DPAA_PMD_WARN("%s: FM deconfig failed(%d)",
-                               dev->data->name, ret);
+               if (dpaa_intf->port_handle) {
+                       ret = dpaa_fm_deconfig(dpaa_intf, dev->process_private);
+                       if (ret) {
+                               DPAA_PMD_WARN("%s: FM deconfig failed(%d)",
+                                       dev->data->name, ret);
+                       }
                }
        }
 
@@ -575,6 +577,23 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev)
        rte_free(dpaa_intf->fc_conf);
        dpaa_intf->fc_conf = NULL;
 
+       /** For FMCLESS mode of share MAC, deconfig FM to direct
+        * ingress traffic to kernel before fq shutdown.
+        */
+       if (!(default_q || fmc_q)) {
+               ret = dpaa_fm_deconfig(dpaa_intf, dev->process_private);
+               if (ret) {
+                       DPAA_PMD_WARN("%s: FM deconfig failed(%d)",
+                               dev->data->name, ret);
+               }
+       }
+       if (fif->num_profiles) {
+               ret = dpaa_port_vsp_cleanup(dpaa_intf, fif);
+               if (ret) {
+                       DPAA_PMD_WARN("%s: cleanup VSP failed(%d)",
+                               dev->data->name, ret);
+               }
+       }
        /** Release congestion Groups after releasing FQIDs*/
        /* Release RX congestion Groups */
        if (dpaa_intf->cgr_rx) {
@@ -647,12 +666,10 @@ static int dpaa_eth_dev_close(struct rte_eth_dev *dev)
        rte_free(dpaa_intf->tx_conf_queues);
        dpaa_intf->tx_conf_queues = NULL;
 
-       if (dpaa_intf->port_handle) {
-               ret = dpaa_fm_deconfig(dpaa_intf, fif);
-               if (ret) {
-                       DPAA_PMD_WARN("%s: FM deconfig failed(%d)",
-                               dev->data->name, ret);
-               }
+       ret = dpaa_fm_deconfig(dpaa_intf, fif);
+       if (ret) {
+               DPAA_PMD_WARN("%s: FM deconfig failed(%d)",
+                       dev->data->name, ret);
        }
        if (fif->num_profiles) {
                ret = dpaa_port_vsp_cleanup(dpaa_intf, fif);
diff --git a/drivers/net/dpaa/dpaa_flow.c b/drivers/net/dpaa/dpaa_flow.c
index f21950f64d..bfe294d21d 100644
--- a/drivers/net/dpaa/dpaa_flow.c
+++ b/drivers/net/dpaa/dpaa_flow.c
@@ -728,6 +728,9 @@ int dpaa_fm_deconfig(struct dpaa_if *dpaa_intf,
 
        PMD_INIT_FUNC_TRACE();
 
+       if (!dpaa_intf->port_handle)
+               return 0;
+
        /* FM PORT Disable */
        ret = fm_port_disable(dpaa_intf->port_handle);
        if (ret != E_OK) {
@@ -787,10 +790,8 @@ int dpaa_fm_config(struct rte_eth_dev *dev, uint64_t 
req_dist_set)
        unsigned int i = 0;
        PMD_INIT_FUNC_TRACE();
 
-       if (dpaa_intf->port_handle) {
-               if (dpaa_fm_deconfig(dpaa_intf, fif))
-                       DPAA_PMD_ERR("DPAA FM deconfig failed");
-       }
+       if (dpaa_fm_deconfig(dpaa_intf, fif))
+               DPAA_PMD_ERR("DPAA FM deconfig failed");
 
        if (!dev->data->nb_rx_queues)
                return 0;
-- 
2.25.1

Reply via email to