Re: [PATCH] wifi: mt76: disable rx napi before queue cleanup
From: Sean Wang <sean.wang@kernel.org>
Date: 2026-05-22 21:43:10
Hi, On Sun, May 17, 2026 at 5:46 PM Ruslan Isaev [off-list ref] wrote:
Gentle ping for review May 11, 2026 02:58:02 Ruslan Isaev [off-list ref]:quoted
mt76_dma_cleanup() already disables tx napi before deleting it, but it still removes rx napi instances while they can remain enabled on the normal device remove path. On mt7915 this triggers a warning. Disable each rx napi instance before netif_napi_del() and page pool destruction. This fixes repeated warnings on rmmod mt7915e on mt7915e/mt7981b. Signed-off-by: Ruslan Isaev <redacted> --- 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 f8c2fe5f2..12183142f 100644 --- a/drivers/net/wireless/mediatek/mt76/dma.c +++ b/drivers/net/wireless/mediatek/mt76/dma.c@@ -1189,6 +1189,7 @@ void mt76_dma_cleanup(struct mt76_dev *dev) mt76_for_each_q_rx(dev, i) { struct mt76_queue *q = &dev->q_rx[i]; + napi_disable(&dev->napi[i]); netif_napi_del(&dev->napi[i]); mt76_dma_rx_cleanup(dev, q);
I do not think this is safe as-is.
1. I tested this on mt7925, and removing the module causes a machine
hang. I found that we can end up disabling NAPI twice on mt7921 and
mt7925. If we still need this patch, it
should be fixed together with the mt7921/mt7925 cleanup paths.
2. mt76_dma_init() skips WED RRO queues when adding RX NAPI, but
this patch disables NAPI for every allocated RX queue during cleanup.
On mt7996/mt7992 HWRRO, WED RRO queues may have
ndesc != 0, so cleanup can call napi_disable() on queues where
mt76 never added/enabled NAPI.
Please make the cleanup path use the same condition as init, for
example by skipping NAPI operations for mt76_queue_is_wed_rro(q), or
by adding a shared helper for the init/cleanup
condition.
quoted
-- 2.39.5