Re: [PATCH wireless] Revert "wifi: mt76: Disable napi when removing device"

Nicolas Cavallari <[email protected]>
Newsgroups dev.linux.lists.regressions,org.kernel.vger.linux-kernel,org.kernel.vger.linux-wireless
Message-ID <[email protected]>
Le 04/08/2026 à 14:00, Mikhail Gavrilov a écrit :
> This reverts commit 13b7e6a96a005c656d38f3da51581deaf9866375.
> 
> That commit made mt76_dma_cleanup() disable every RX NAPI instance before
> deleting it, to silence WARNs in __netif_napi_del_locked() and
> page_pool_disable_direct_recycling() seen when unloading mt7915e with an
> MT7916.
> 
> On mt7921e and mt7925e the same instances are already disabled earlier,
> in mt7921e_unregister_device() and mt7925e_unregister_device(), which
> only afterwards call mt792x_dma_cleanup() -> mt76_dma_cleanup().  Each
> instance is therefore disabled twice, and napi_disable() is not
> idempotent: on return it leaves NAPIF_STATE_SCHED and NAPIF_STATE_NPSVC
> set, so the second call spins in usleep_range() forever, waiting for bits
> that nobody will clear.
> 
> mt7921_pci_shutdown() and mt7925_pci_shutdown() reuse the remove path, so
> this is hit on every reboot, poweroff and module unload.  It is silent:
> the stuck task keeps sleeping and rescheduling, so neither the hung task
> detector nor the lockup detectors fire, and the last line on the console
> is "systemd-shutdown[1]: Rebooting."
> 
>    task:modprobe        state:D stack:25720 pid:7954  tgid:7954
>    Call Trace:
>     <TASK>
>     __schedule+0x11b8/0x26d0
>     schedule+0xe7/0x2f0
>     schedule_hrtimeout_range_clock+0x218/0x330
>     usleep_range_state+0x133/0x1b0
>     napi_disable_locked+0x37d/0x5f0
>     napi_disable+0x43/0x80
>     mt76_dma_cleanup+0x2b4/0x860 [mt76]
>     mt7921_pci_remove+0x17f/0x350 [mt7921e]
>     pci_device_remove+0xb6/0x1e0
>     device_release_driver_internal+0x38d/0x540
>     driver_detach+0xd0/0x1b0
>     bus_remove_driver+0x127/0x2d0
>     pci_unregister_driver+0x2a/0x280
>     __do_sys_delete_module+0x36a/0x5b0
>     do_syscall_64+0x11c/0x6d0
>     entry_SYSCALL_64_after_hwframe+0x76/0x7e
>     </TASK>
> 
> Dropping the two driver-side loops instead was tried and rejected: with
> them gone, the RX poll can reach mt76_token_release() via
> PKT_TYPE_TXRX_NOTIFY and mt7921_mac_tx_free() while
> mt76_connac2_tx_token_put() is running idr_destroy(&dev->token) outside
> token_lock, which is a use-after-free rather than a hang [1].
> 
> Revert for now, so that reboot, poweroff and module unload work again.
> The WARNs on mt7915e are a less severe problem than an unbootable
> machine, and fixing them belongs in the drivers that delete the NAPI
> instances, where each one can pick a point that is safe for its own
> teardown order, rather than in the shared mt76_dma_cleanup().
> 
> Reported-by: Bert Karwatzki <[email protected]>
> Closes: https://lore.kernel.org/all/[email protected]/
> Closes: https://bugzilla.kernel.org/show_bug.cgi?id=221818
> Link: https://lore.kernel.org/all/20260730050428.GA73812@sol/ [1]
> Signed-off-by: Mikhail Gavrilov <[email protected]>
Acked-by: Nicolas Cavallari <[email protected]>

Sorry for the trouble.

For what is it worth, wifibot reports: "Series targets non-next tree, 
but doesn't contain any Fixes tags"

https://patchwork.kernel.org/project/linux-wireless/patch/[email protected]/

Fixes: 13b7e6a96a00 ("wifi: mt76: Disable napi when removing device")

> Sending this because the regression is now in its second week with four
> independent reporters, and the two-part alternative (this revert plus
> napi_disable() added inside mt7915_unregister_device()) needs MT7916
> hardware that I do not have.  I deliberately left the mt7915 side out;
> Nicolas is best placed to do it, since MT7916 is what he reported
> against.

Did that here: 
https://patchwork.kernel.org/project/linux-wireless/patch/[email protected]/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.