From nobody Mon Feb 9 13:58:37 2026 Received: from mail-dy1-f179.google.com (mail-dy1-f179.google.com [74.125.82.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C5ECA3803D1 for ; Tue, 20 Jan 2026 06:29:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768890548; cv=none; b=kQEQclKXqjD//40od4d5QDPdfuFRoT51RJmkeV/8l/qBtKfo+jJzRqS5PY2qWAQzjY1Bo9aRfwpTIvvQhXDIPL0o9UzFdFjCfWAxTTPJgaAWlgaLXcs9Evvz282TXxCkM9w+en7/fHxAWjEpJBvb5R1zi7YgvG+oHC1Wntz2/e8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768890548; c=relaxed/simple; bh=IkGS2pbb9DGLGXEWPJhYUmq0EJShmdW9s055oJTD1fM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=r62XJxiWPv6S/2hQzpHY56Xjegt3Zf3yRF8WiEEhLTuoiDb4/UiCfn+87yP/fWj7E2CDtwdIeF199QWk++RLJ3DU5OS2b9z3l+7wP6yItU/dOee1J7l0oBvpV4abiet7FIKwaiI1ZSSKRmxV5ieMMtYM8mR6PU72SJdmMYxVCAQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=zacbowling.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Ef7RKXMl; arc=none smtp.client-ip=74.125.82.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=zacbowling.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Ef7RKXMl" Received: by mail-dy1-f179.google.com with SMTP id 5a478bee46e88-2ae38f81be1so5614218eec.0 for ; Mon, 19 Jan 2026 22:29:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768890545; x=1769495345; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=gq8BwtBE3udkhb8xxJaDge5ayHDcllBWREYlF8lWPK8=; b=Ef7RKXMlRU6Wl/SKant8GmP849OnO+ckbTBrRC/vbhy+QBuGwkcVg2KqHc1OlGIvKb 43KGyqAxELOBcjPrlPHLoZwBjI1t8wDXj1zTHVf8w0CcngZ2sVTKCe5OheDXFZ4O0d/G Dj2nMdtQLIzStvO1cGLqxmZCGBfMWl2tcOop/OHmDj4DhvqnWsVXQt6eeP0nSkHu9Hwu 3kuJVbLdqCyKG9sdPeu0NrIxn4XO37qXIqZr/v/yx3CTw5+V0QxCMpUQb4ecLC14b4WE B+Ev7W4quQ/TC8dLEprOi/No1f7icosDUtaFP3gR4j9EDpsjFUybAer8i8dD+5H9nd2l Bobw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768890545; x=1769495345; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=gq8BwtBE3udkhb8xxJaDge5ayHDcllBWREYlF8lWPK8=; b=Vcs12lOzZmP40e8bcTF+LTQkDpLFaJbAJUseNZH+TEowKoEJ7522dejAX4fscuT4Qx nCYAc6vti5W+e305JkfK2a3LW7ci4tZf1HLolY9KFMIaQRCzwyI1HnDRpabzGrKW7Hve zmAwB/ALrh2+LZZZw+WrsFLYys4Zkh/8Ign6KxAdufySsCcS7MbYaj7Jg3cxwWfH9wDu wHTNjZRrNsCLFKqrK/pAVgu+fXMjIpz4fB3U92ol73lQQc2nI7dpaVQrjMPX8M9pzMSQ Gj+mcyQaUs9GcOqytTKwnGN4UIc+j6xS84IPB0EHaAMw6mtJu8fW54nPfCj1LFVzEt/e tv7A== X-Forwarded-Encrypted: i=1; AJvYcCWIMGqk3N8G4cpds3KC0yWaExvdqL+Wmh2b+WSEf1/QkYFku3Vahq+I2AR2tOy3kXiYPrH/MICcQYRLKh4=@vger.kernel.org X-Gm-Message-State: AOJu0YzVO6c3a1lLfhm0lcp2+gtIeV+JmvRwKHBgAQf+LhAkqb9ux3Mc XH76jROhvMbA3gSar7F9HCQMHr9C0zN622O6FJV+6x9fkoic8XQgz31J X-Gm-Gg: AZuq6aJaX/U03nhpX7WbmIP1YXCLU7phTSGKJQLRh3Naj8YBKeNmkngY4medZHVa7b7 yEiBG/rUZ8J2a+Ze8QAK9rsGTEMqDp/g38JdfjD75jjTUYChFbZvayPyd/rRvDuQZlR4rdxLQ3e XCPPFzfJARz73IQLGowfG1r6Eu+93xh+/Sbqs68TEnVZLpO0bjyT07XG5pjbkrd+zFgahPepyn2 DD3LBbGFIL+8P4SWCmwjFjGVgs29sRilXGAdNmUSJdCcSjd2qzs/ao2YsP3rnFyzNcTifsNTqpQ awbp1O+YbyiEWIzhMko8gWz2CP8HhZEsaXDHPyFE1YlcoVJ8tpU0+x7Bur/33O3gUiu6vZt42DJ AYuCWwm+KWdz0OpcO672uCtJYGQKc3I5GnhhhsZ9L6iLwvK2KC3ElDfGp+ScoUPY2k250JOHYhe 0AfwQnI/sOl92fdysrUEZpAp9AvgqmF8BEgukXGQekq5OJt4I80WzsDgzNtICc X-Received: by 2002:a05:7301:290a:b0:2ae:60fd:6f18 with SMTP id 5a478bee46e88-2b6b4e8a496mr11903860eec.22.1768890544990; Mon, 19 Jan 2026 22:29:04 -0800 (PST) Received: from zcache.home.zacbowling.com ([2001:5a8:60d:bc9:f31e:1cb:296a:cc2a]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2b6b3502c91sm15706784eec.9.2026.01.19.22.29.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Jan 2026 22:29:04 -0800 (PST) Sender: Zac Bowling From: Zac To: sean.wang@kernel.org Cc: deren.wu@mediatek.com, kvalo@kernel.org, linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-wireless@vger.kernel.org, lorenzo@kernel.org, nbd@nbd.name, ryder.lee@mediatek.com, sean.wang@mediatek.com, stable@vger.kernel.org, linux@frame.work, zbowling@gmail.com, Zac Bowling Subject: [PATCH 06/11] wifi: mt76: mt7925: add mutex protection in critical paths Date: Mon, 19 Jan 2026 22:28:49 -0800 Message-ID: <20260120062854.126501-7-zac@zacbowling.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260120062854.126501-1-zac@zacbowling.com> References: <20260120062854.126501-1-zac@zacbowling.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Zac Bowling Add proper mutex protection for mt7925 driver operations that access hardware state without proper synchronization. This fixes race conditions that can cause system instability during power management and recovery. Fixes added: 1. mac.c: mt7925_mac_reset_work() - Wrap ieee80211_iterate_active_interfaces() with mt792x_mutex - The vif_connect_iter callback accesses hardware state 2. mac.c: mt7925_mac_sta_assoc() - Wrap vif_connect_iter call with mutex protection - Called during station association which races with PM 3. main.c: mt7925_set_runtime_pm() - Add mutex protection around mt76_connac_pm_wake/sleep - Runtime PM can race with other operations 4. main.c: mt7925_set_mlo_pm() - Add mutex protection around MLO PM configuration - Prevents races during MLO link setup/teardown 5. pci.c: mt7925_pci_resume() - Add mutex protection around ieee80211_iterate_active_interfaces - The vif iteration accesses hardware state that needs synchronization These protections ensure consistent hardware state access during power management transitions and recovery operations. Fixes: c948b5da6bbe ("wifi: mt76: mt7925: add Mediatek Wi-Fi7 driver for mt= 7925 device") Signed-off-by: Zac Bowling --- drivers/net/wireless/mediatek/mt76/mt7925/mac.c | 2 ++ drivers/net/wireless/mediatek/mt76/mt7925/main.c | 6 ++++-- drivers/net/wireless/mediatek/mt76/mt7925/pci.c | 4 ++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/mac.c b/drivers/net/= wireless/mediatek/mt76/mt7925/mac.c index 184efe8afa10..06420ac6ed55 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7925/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7925/mac.c @@ -1331,9 +1331,11 @@ void mt7925_mac_reset_work(struct work_struct *work) dev->hw_full_reset =3D false; pm->suspended =3D false; ieee80211_wake_queues(hw); + mt792x_mutex_acquire(dev); ieee80211_iterate_active_interfaces(hw, IEEE80211_IFACE_ITER_RESUME_ALL, mt7925_vif_connect_iter, NULL); + mt792x_mutex_release(dev); mt76_connac_power_save_sched(&dev->mt76.phy, pm); =20 mt7925_regd_change(&dev->phy, "00"); diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/main.c b/drivers/net= /wireless/mediatek/mt76/mt7925/main.c index 15d1b1b8d9f8..80ca5181150b 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7925/main.c +++ b/drivers/net/wireless/mediatek/mt76/mt7925/main.c @@ -755,9 +755,11 @@ void mt7925_set_runtime_pm(struct mt792x_dev *dev) bool monitor =3D !!(hw->conf.flags & IEEE80211_CONF_MONITOR); =20 pm->enable =3D pm->enable_user && !monitor; + mt792x_mutex_acquire(dev); ieee80211_iterate_active_interfaces(hw, IEEE80211_IFACE_ITER_RESUME_ALL, mt7925_pm_interface_iter, dev); + mt792x_mutex_release(dev); pm->ds_enable =3D pm->ds_enable_user && !monitor; mt7925_mcu_set_deep_sleep(dev, pm->ds_enable); } @@ -1331,14 +1333,12 @@ mt7925_mlo_pm_iter(void *priv, u8 *mac, struct ieee= 80211_vif *vif) if (mvif->mlo_pm_state !=3D MT792x_MLO_CHANGED_PS) return; =20 - mt792x_mutex_acquire(dev); for_each_set_bit(i, &valid, IEEE80211_MLD_MAX_NUM_LINKS) { bss_conf =3D mt792x_vif_to_bss_conf(vif, i); if (!bss_conf) continue; mt7925_mcu_uni_bss_ps(dev, bss_conf); } - mt792x_mutex_release(dev); } =20 void mt7925_mlo_pm_work(struct work_struct *work) @@ -1347,9 +1347,11 @@ void mt7925_mlo_pm_work(struct work_struct *work) mlo_pm_work.work); struct ieee80211_hw *hw =3D mt76_hw(dev); =20 + mt792x_mutex_acquire(dev); ieee80211_iterate_active_interfaces(hw, IEEE80211_IFACE_ITER_RESUME_ALL, mt7925_mlo_pm_iter, dev); + mt792x_mutex_release(dev); } =20 void mt7925_scan_work(struct work_struct *work) diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/pci.c b/drivers/net/= wireless/mediatek/mt76/mt7925/pci.c index c4161754c01d..3a9e32a1759d 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7925/pci.c +++ b/drivers/net/wireless/mediatek/mt76/mt7925/pci.c @@ -455,7 +455,9 @@ static int mt7925_pci_suspend(struct device *device) cancel_delayed_work_sync(&pm->ps_work); cancel_work_sync(&pm->wake_work); =20 + mt792x_mutex_acquire(dev); mt7925_roc_abort_sync(dev); + mt792x_mutex_release(dev); =20 err =3D mt792x_mcu_drv_pmctrl(dev); if (err < 0) @@ -582,10 +584,12 @@ static int _mt7925_pci_resume(struct device *device, = bool restore) } =20 /* restore previous ds setting */ + mt792x_mutex_acquire(dev); if (!pm->ds_enable) mt7925_mcu_set_deep_sleep(dev, false); =20 mt7925_mcu_regd_update(dev, mdev->alpha2, dev->country_ie_env); + mt792x_mutex_release(dev); failed: pm->suspended =3D false; =20 --=20 2.52.0