[PATCH] net: ns83820: drain RX tasklet when stopping the device
From: Jiale Yao
Date: Sun Oct 18 2026 - 00:08:17 EST
The receive interrupt handler schedules rx_tasklet after masking RX
completion interrupts. synchronize_irq() waits for the hard IRQ, but it
does not drain a tasklet that was already queued.
The stop path then cleans the RX descriptors, and device removal later
frees the rings and netdev. Kill the tasklet after resetting the device
and synchronizing the IRQ, before cleaning the descriptor state.
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Jiale Yao <yaojiale02@xxxxxxx>
---
drivers/net/ethernet/natsemi/ns83820.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/ethernet/natsemi/ns83820.c b/drivers/net/ethernet/natsemi/ns83820.c
index cdbf82affa7b..f31c15cb2f51 100644
--- a/drivers/net/ethernet/natsemi/ns83820.c
+++ b/drivers/net/ethernet/natsemi/ns83820.c
@@ -1536,6 +1536,7 @@ static int ns83820_stop(struct net_device *ndev)
ns83820_do_reset(dev, CR_RST);
synchronize_irq(dev->pci_dev->irq);
+ tasklet_kill(&dev->rx_tasklet);
spin_lock_irq(&dev->misc_lock);
dev->IMR_cache &= ~(ISR_TXURN | ISR_TXIDLE | ISR_TXERR | ISR_TXDESC | ISR_TXOK);
--
2.34.1