diff mbox series

[net] net: e100: cancel timeout work during removal

Message ID 20260928134121.826-1-getshell@seu.edu.cn
State Changes Requested
Headers show
Series [net] net: e100: cancel timeout work during removal | expand

Commit Message

Hongyan Xu Sept. 28, 2026, 1:41 p.m. UTC
Transmit timeout and command submission paths can queue tx_timeout_task.
The worker accesses the MMIO mapping and netdev private state, but
device removal releases both without draining a pending instance.

Cancel the work after unregister_netdev(), when the network stack can no
longer publish it and after any RTNL serialization used by the worker
has completed.

Fixes: 2acdb1e05c1a ("[PATCH] e100: Execute tx_timeout task outside interrupt context")
Signed-off-by: Hongyan Xu <getshell@seu.edu.cn>
---
 drivers/net/ethernet/intel/e100.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Loktionov, Aleksandr Sept. 29, 2026, 7:07 a.m. UTC | #1
> -----Original Message-----
> From: Hongyan Xu <getshell@seu.edu.cn>
> Sent: Monday, September 28, 2026 3:41 PM
> To: Nguyen, Anthony L <anthony.l.nguyen@intel.com>; Kitszel,
> Przemyslaw <przemyslaw.kitszel@intel.com>
> Cc: andrew+netdev@lunn.ch; davem@davemloft.net; edumazet@kernel.org;
> kuba@kernel.org; pabeni@redhat.com; intel-wired-lan@lists.osuosl.org;
> netdev@vger.kernel.org; linux-kernel@vger.kernel.org;
> jianhao.xu@seu.edu.cn; Hongyan Xu <getshell@seu.edu.cn>
> Subject: [PATCH net] net: e100: cancel timeout work during removal
> 
> Transmit timeout and command submission paths can queue
> tx_timeout_task.
> The worker accesses the MMIO mapping and netdev private state, but
> device removal releases both without draining a pending instance.
> 
> Cancel the work after unregister_netdev(), when the network stack can
> no longer publish it and after any RTNL serialization used by the
> worker has completed.
> 
> Fixes: 2acdb1e05c1a ("[PATCH] e100: Execute tx_timeout task outside
> interrupt context")
> Signed-off-by: Hongyan Xu <getshell@seu.edu.cn>
> ---
>  drivers/net/ethernet/intel/e100.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/net/ethernet/intel/e100.c
> b/drivers/net/ethernet/intel/e100.c
> index 29960762e64a..710c2c30d9ed 100644
> --- a/drivers/net/ethernet/intel/e100.c
> +++ b/drivers/net/ethernet/intel/e100.c
> @@ -2988,6 +2988,7 @@ static void e100_remove(struct pci_dev *pdev)
>  	if (netdev) {
>  		struct nic *nic = netdev_priv(netdev);
>  		unregister_netdev(netdev);
> +		cancel_work_sync(&nic->tx_timeout_task);
>  		e100_free(nic);
>  		pci_iounmap(pdev, nic->csr);
>  		dma_pool_destroy(nic->cbs_pool);
> --
> 2.50.1.windows.1

Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
diff mbox series

Patch

diff --git a/drivers/net/ethernet/intel/e100.c b/drivers/net/ethernet/intel/e100.c
index 29960762e64a..710c2c30d9ed 100644
--- a/drivers/net/ethernet/intel/e100.c
+++ b/drivers/net/ethernet/intel/e100.c
@@ -2988,6 +2988,7 @@  static void e100_remove(struct pci_dev *pdev)
 	if (netdev) {
 		struct nic *nic = netdev_priv(netdev);
 		unregister_netdev(netdev);
+		cancel_work_sync(&nic->tx_timeout_task);
 		e100_free(nic);
 		pci_iounmap(pdev, nic->csr);
 		dma_pool_destroy(nic->cbs_pool);