net: amd-xgbe: add missed tasklet_kill
authorJiguang Xiao <jiguang.xiao@windriver.com>
Wed, 28 Dec 2022 08:14:47 +0000 (16:14 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 12 Jan 2023 10:59:12 +0000 (11:59 +0100)
[ Upstream commit d530ece70f16f912e1d1bfeea694246ab78b0a4b ]

The driver does not call tasklet_kill in several places.
Add the calls to fix it.

Fixes: 85b85c853401 ("amd-xgbe: Re-issue interrupt if interrupt status not cleared")
Signed-off-by: Jiguang Xiao <jiguang.xiao@windriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/amd/xgbe/xgbe-drv.c
drivers/net/ethernet/amd/xgbe/xgbe-i2c.c
drivers/net/ethernet/amd/xgbe/xgbe-mdio.c

index e6883d5..555db18 100644 (file)
@@ -1064,6 +1064,9 @@ static void xgbe_free_irqs(struct xgbe_prv_data *pdata)
 
        devm_free_irq(pdata->dev, pdata->dev_irq, pdata);
 
+       tasklet_kill(&pdata->tasklet_dev);
+       tasklet_kill(&pdata->tasklet_ecc);
+
        if (pdata->vdata->ecc_support && (pdata->dev_irq != pdata->ecc_irq))
                devm_free_irq(pdata->dev, pdata->ecc_irq, pdata);
 
index 22d4fc5..a9ccc42 100644 (file)
@@ -447,8 +447,10 @@ static void xgbe_i2c_stop(struct xgbe_prv_data *pdata)
        xgbe_i2c_disable(pdata);
        xgbe_i2c_clear_all_interrupts(pdata);
 
-       if (pdata->dev_irq != pdata->i2c_irq)
+       if (pdata->dev_irq != pdata->i2c_irq) {
                devm_free_irq(pdata->dev, pdata->i2c_irq, pdata);
+               tasklet_kill(&pdata->tasklet_i2c);
+       }
 }
 
 static int xgbe_i2c_start(struct xgbe_prv_data *pdata)
index 4e97b48..0c5c1b1 100644 (file)
@@ -1390,8 +1390,10 @@ static void xgbe_phy_stop(struct xgbe_prv_data *pdata)
        /* Disable auto-negotiation */
        xgbe_an_disable_all(pdata);
 
-       if (pdata->dev_irq != pdata->an_irq)
+       if (pdata->dev_irq != pdata->an_irq) {
                devm_free_irq(pdata->dev, pdata->an_irq, pdata);
+               tasklet_kill(&pdata->tasklet_an);
+       }
 
        pdata->phy_if.phy_impl.stop(pdata);