]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: mt76: Disable napi when removing device
authorNicolas Cavallari <nicolas.cavallari@green-communications.fr>
Wed, 8 Jul 2026 14:43:47 +0000 (16:43 +0200)
committerFelix Fietkau <nbd@nbd.name>
Wed, 22 Jul 2026 06:09:05 +0000 (06:09 +0000)
Unloading the mt7915e module with a MT7916 triggers multiples WARN in
__netif_napi_del_locked() and in page_pool_disable_direct_recycling()
because the driver does not disable the napi before destroying it.

This is troublesome since on MT7916 it is required to unload the module
and reinsert it with a different enable_6ghz parameter to change the
frequency.  The system generally becomes unstable after reinserting the
module.

Fix it by disabling napi before deleting it.  Also, do not delete napi
on WED queues since napi is neither used nor initialized on them.

Fixes: 17f1de56df05 ("mt76: add common code shared between multiple chipsets")
Signed-off-by: Nicolas Cavallari <nicolas.cavallari@green-communications.fr>
Link: https://patch.msgid.link/20260708144615.24092-1-nicolas.cavallari@green-communications.fr
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/dma.c

index f8c2fe5f2f58772c39719fc97e8e8d721613cf28..322041859217463422c677378b1f4fa053f96599 100644 (file)
@@ -1189,7 +1189,10 @@ void mt76_dma_cleanup(struct mt76_dev *dev)
        mt76_for_each_q_rx(dev, i) {
                struct mt76_queue *q = &dev->q_rx[i];
 
-               netif_napi_del(&dev->napi[i]);
+               if (!mt76_queue_is_wed_rro(q)) {
+                       napi_disable(&dev->napi[i]);
+                       netif_napi_del(&dev->napi[i]);
+               }
                mt76_dma_rx_cleanup(dev, q);
 
                page_pool_destroy(q->page_pool);