| From 120c8834b3596e8c4b4c11818e5915f0e1d6b7f0 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 16 Jun 2020 06:35:29 +0200 |
| Subject: mvpp2: remove module bugfix |
| |
| From: Sven Auhagen <sven.auhagen@voleatech.de> |
| |
| [ Upstream commit 807eaf99688ce162a98a7501477644782d4af098 ] |
| |
| The remove function does not destroy all |
| BM Pools when per cpu pool is active. |
| |
| When reloading the mvpp2 as a module the BM Pools |
| are still active in hardware and due to the bug |
| have twice the size now old + new. |
| |
| This eventually leads to a kernel crash. |
| |
| v2: |
| * add Fixes tag |
| |
| Fixes: 7d04b0b13b11 ("mvpp2: percpu buffers") |
| Signed-off-by: Sven Auhagen <sven.auhagen@voleatech.de> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 7 +++++-- |
| 1 file changed, 5 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c |
| index 373b8c8328501..cf5d447af7db2 100644 |
| --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c |
| +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c |
| @@ -5925,8 +5925,8 @@ static int mvpp2_remove(struct platform_device *pdev) |
| { |
| struct mvpp2 *priv = platform_get_drvdata(pdev); |
| struct fwnode_handle *fwnode = pdev->dev.fwnode; |
| + int i = 0, poolnum = MVPP2_BM_POOLS_NUM; |
| struct fwnode_handle *port_fwnode; |
| - int i = 0; |
| |
| mvpp2_dbgfs_cleanup(priv); |
| |
| @@ -5940,7 +5940,10 @@ static int mvpp2_remove(struct platform_device *pdev) |
| |
| destroy_workqueue(priv->stats_queue); |
| |
| - for (i = 0; i < MVPP2_BM_POOLS_NUM; i++) { |
| + if (priv->percpu_pools) |
| + poolnum = mvpp2_get_nrxqs(priv) * 2; |
| + |
| + for (i = 0; i < poolnum; i++) { |
| struct mvpp2_bm_pool *bm_pool = &priv->bm_pools[i]; |
| |
| mvpp2_bm_pool_destroy(&pdev->dev, priv, bm_pool); |
| -- |
| 2.25.1 |
| |