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

