]> git.baikalelectronics.ru Git - kernel.git/commitdiff
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>
Wed, 18 Jan 2023 10:41:57 +0000 (11:41 +0100)
[ Upstream commit d530ece70f16f912e1d1bfeea694246ab78b0a4b ]

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

Fixes: f43c3d6c3420 ("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 0442d7e1cd20bd6adc7e98fdceb4cab90876295b..7f705483c1c574f22526e6353ba3fc563d50f470 100644 (file)
@@ -1139,6 +1139,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 4d9062d35930f74bfd7864ff989d0dcf4c054325..530043742a07a6686612c30a6bc42763961c515e 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 156a0bc8ab01d48ad83440e3e690a0541bdb64bf..97167fc9bebe71d53a61d5d897954c211d04c076 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);