linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] wifi: mt76: disable napi on driver removal
@ 2025-05-06 11:55 Fedor Pchelkin
  2025-05-12  5:40 ` Mingyen Hsieh (謝明諺)
  0 siblings, 1 reply; 2+ messages in thread
From: Fedor Pchelkin @ 2025-05-06 11:55 UTC (permalink / raw)
  To: Felix Fietkau, Lorenzo Bianconi
  Cc: Fedor Pchelkin, Ryder Lee, Shayne Chen, Sean Wang,
	Matthias Brugger, AngeloGioacchino Del Regno, linux-wireless,
	linux-kernel, linux-arm-kernel, linux-mediatek, Jakub Kicinski,
	Joe Damato, Eric Dumazet, lvc-project, stable

A warning on driver removal started occurring after commit 9dd05df8403b
("net: warn if NAPI instance wasn't shut down"). Disable tx napi before
deleting it in mt76_dma_cleanup().

 WARNING: CPU: 4 PID: 18828 at net/core/dev.c:7288 __netif_napi_del_locked+0xf0/0x100
 CPU: 4 UID: 0 PID: 18828 Comm: modprobe Not tainted 6.15.0-rc4 #4 PREEMPT(lazy)
 Hardware name: ASUS System Product Name/PRIME X670E-PRO WIFI, BIOS 3035 09/05/2024
 RIP: 0010:__netif_napi_del_locked+0xf0/0x100
 Call Trace:
 <TASK>
 mt76_dma_cleanup+0x54/0x2f0 [mt76]
 mt7921_pci_remove+0xd5/0x190 [mt7921e]
 pci_device_remove+0x47/0xc0
 device_release_driver_internal+0x19e/0x200
 driver_detach+0x48/0x90
 bus_remove_driver+0x6d/0xf0
 pci_unregister_driver+0x2e/0xb0
 __do_sys_delete_module.isra.0+0x197/0x2e0
 do_syscall_64+0x7b/0x160
 entry_SYSCALL_64_after_hwframe+0x76/0x7e

Tested with mt7921e but the same pattern can be actually applied to other
mt76 drivers calling mt76_dma_cleanup() during removal. Tx napi is enabled
in their *_dma_init() functions and only toggled off and on again inside
their suspend/resume/reset paths. So it should be okay to disable tx
napi in such a generic way.

Found by Linux Verification Center (linuxtesting.org).

Fixes: 2ac515a5d74f ("mt76: mt76x02: use napi polling for tx cleanup")
Cc: stable@vger.kernel.org
Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru>
---
 drivers/net/wireless/mediatek/mt76/dma.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/wireless/mediatek/mt76/dma.c b/drivers/net/wireless/mediatek/mt76/dma.c
index 844af16ee551..35b4ec91979e 100644
--- a/drivers/net/wireless/mediatek/mt76/dma.c
+++ b/drivers/net/wireless/mediatek/mt76/dma.c
@@ -1011,6 +1011,7 @@ void mt76_dma_cleanup(struct mt76_dev *dev)
 	int i;
 
 	mt76_worker_disable(&dev->tx_worker);
+	napi_disable(&dev->tx_napi);
 	netif_napi_del(&dev->tx_napi);
 
 	for (i = 0; i < ARRAY_SIZE(dev->phys); i++) {
-- 
2.49.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] wifi: mt76: disable napi on driver removal
  2025-05-06 11:55 [PATCH] wifi: mt76: disable napi on driver removal Fedor Pchelkin
@ 2025-05-12  5:40 ` Mingyen Hsieh (謝明諺)
  0 siblings, 0 replies; 2+ messages in thread
From: Mingyen Hsieh (謝明諺) @ 2025-05-12  5:40 UTC (permalink / raw)
  To: nbd@nbd.name, lorenzo@kernel.org, pchelkin@ispras.ru
  Cc: stable@vger.kernel.org, Shayne Chen (陳軒丞),
	jdamato@fastly.com, Ryder Lee, AngeloGioacchino Del Regno,
	linux-kernel@vger.kernel.org, linux-wireless@vger.kernel.org,
	Sean Wang, linux-arm-kernel@lists.infradead.org,
	matthias.bgg@gmail.com, linux-mediatek@lists.infradead.org,
	lvc-project@linuxtesting.org, edumazet@google.com,
	kuba@kernel.org

On Tue, 2025-05-06 at 14:55 +0300, Fedor Pchelkin wrote:
> A warning on driver removal started occurring after commit
> 9dd05df8403b
> ("net: warn if NAPI instance wasn't shut down"). Disable tx napi
> before
> deleting it in mt76_dma_cleanup().
> 
>  WARNING: CPU: 4 PID: 18828 at net/core/dev.c:7288
> __netif_napi_del_locked+0xf0/0x100
>  CPU: 4 UID: 0 PID: 18828 Comm: modprobe Not tainted 6.15.0-rc4 #4
> PREEMPT(lazy)
>  Hardware name: ASUS System Product Name/PRIME X670E-PRO WIFI, BIOS
> 3035 09/05/2024
>  RIP: 0010:__netif_napi_del_locked+0xf0/0x100
>  Call Trace:
>  <TASK>
>  mt76_dma_cleanup+0x54/0x2f0 [mt76]
>  mt7921_pci_remove+0xd5/0x190 [mt7921e]
>  pci_device_remove+0x47/0xc0
>  device_release_driver_internal+0x19e/0x200
>  driver_detach+0x48/0x90
>  bus_remove_driver+0x6d/0xf0
>  pci_unregister_driver+0x2e/0xb0
>  __do_sys_delete_module.isra.0+0x197/0x2e0
>  do_syscall_64+0x7b/0x160
>  entry_SYSCALL_64_after_hwframe+0x76/0x7e
> 
> Tested with mt7921e but the same pattern can be actually applied to
> other
> mt76 drivers calling mt76_dma_cleanup() during removal. Tx napi is
> enabled
> in their *_dma_init() functions and only toggled off and on again
> inside
> their suspend/resume/reset paths. So it should be okay to disable tx
> napi in such a generic way.
> 
> Found by Linux Verification Center (linuxtesting.org).
> 
> Fixes: 2ac515a5d74f ("mt76: mt76x02: use napi polling for tx
> cleanup")
> Cc: stable@vger.kernel.org
> Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru>
> ---
>  drivers/net/wireless/mediatek/mt76/dma.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/net/wireless/mediatek/mt76/dma.c
> b/drivers/net/wireless/mediatek/mt76/dma.c
> index 844af16ee551..35b4ec91979e 100644
> --- a/drivers/net/wireless/mediatek/mt76/dma.c
> +++ b/drivers/net/wireless/mediatek/mt76/dma.c
> @@ -1011,6 +1011,7 @@ void mt76_dma_cleanup(struct mt76_dev *dev)
>  	int i;
>  
>  	mt76_worker_disable(&dev->tx_worker);
> +	napi_disable(&dev->tx_napi);
>  	netif_napi_del(&dev->tx_napi);
>  
>  	for (i = 0; i < ARRAY_SIZE(dev->phys); i++) {

Tested-by: Ming Yen Hsieh <mingyen.hsieh@mediatek.com>

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2025-05-12  5:40 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-06 11:55 [PATCH] wifi: mt76: disable napi on driver removal Fedor Pchelkin
2025-05-12  5:40 ` Mingyen Hsieh (謝明諺)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).