summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/freescale/dpa/dpaa_eth.c5
-rw-r--r--drivers/net/ethernet/freescale/dpa/dpaa_eth_common.c6
-rw-r--r--drivers/net/ethernet/freescale/dpa/dpaa_eth_common.h1
3 files changed, 12 insertions, 0 deletions
diff --git a/drivers/net/ethernet/freescale/dpa/dpaa_eth.c b/drivers/net/ethernet/freescale/dpa/dpaa_eth.c
index 6ef3bdf..4167268 100644
--- a/drivers/net/ethernet/freescale/dpa/dpaa_eth.c
+++ b/drivers/net/ethernet/freescale/dpa/dpaa_eth.c
@@ -1170,6 +1170,11 @@ static void __exit __cold dpa_unload(void)
dpa_debugfs_module_exit();
#endif /* CONFIG_FSL_DPAA_ETH_DEBUGFS */
+ /* Only one channel is used and needs to be relased after all
+ * interfaces are removed
+ */
+ dpa_release_channel();
+
pr_debug(KBUILD_MODNAME ": %s:%s() ->\n",
KBUILD_BASENAME".c", __func__);
}
diff --git a/drivers/net/ethernet/freescale/dpa/dpaa_eth_common.c b/drivers/net/ethernet/freescale/dpa/dpaa_eth_common.c
index 60e8d08..370381a 100644
--- a/drivers/net/ethernet/freescale/dpa/dpaa_eth_common.c
+++ b/drivers/net/ethernet/freescale/dpa/dpaa_eth_common.c
@@ -1025,6 +1025,12 @@ int dpa_get_channel(void)
}
EXPORT_SYMBOL(dpa_get_channel);
+void dpa_release_channel(void)
+{
+ qman_release_pool(rx_pool_channel);
+}
+EXPORT_SYMBOL(dpa_release_channel);
+
int dpaa_eth_add_channel(void *__arg)
{
const cpumask_t *cpus = qman_affine_cpus();
diff --git a/drivers/net/ethernet/freescale/dpa/dpaa_eth_common.h b/drivers/net/ethernet/freescale/dpa/dpaa_eth_common.h
index cabe0c9..ee1c853 100644
--- a/drivers/net/ethernet/freescale/dpa/dpaa_eth_common.h
+++ b/drivers/net/ethernet/freescale/dpa/dpaa_eth_common.h
@@ -177,6 +177,7 @@ int dpa_fq_probe_mac(struct device *dev, struct list_head *list,
bool tx_conf_fqs_per_core,
enum port_type ptype);
int dpa_get_channel(void);
+void dpa_release_channel(void);
int dpaa_eth_add_channel(void *__arg);
int dpaa_eth_cgr_init(struct dpa_priv_s *priv);
void dpa_fq_setup(struct dpa_priv_s *priv, const struct dpa_fq_cbs_t *fq_cbs,