<html><body><p>
<pre>
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>
</pre>
</p></body></html><!--type:text--><!--{--><pre>************* MEDIATEK Confidentiality Notice ********************
The information contained in this e-mail message (including any
attachments) may be confidential, proprietary, privileged, or otherwise
exempt from disclosure under applicable laws. It is intended to be
conveyed only to the designated recipient(s). Any use, dissemination,
distribution, printing, retaining or copying of this e-mail (including its
attachments) by unintended recipient(s) is strictly prohibited and may
be unlawful. If you are not an intended recipient of this e-mail, or believe
that you have received this e-mail in error, please notify the sender
immediately (by replying to this e-mail), delete any and all copies of
this e-mail (including any attachments) from your system, and do not
disclose the content of this e-mail to any other person. Thank you!
</pre><!--}-->