[PATCH ath-next v2 6/8] wifi: ath10k: hard-block the radio when entering WEDGED state
From: Kang Yang
Date: Wed Oct 21 2026 - 05:11:30 EST
Once ath10k reaches ATH10K_STATE_WEDGED, the device can no
longer recover and remains unusable until the driver is
reloaded.
Userspace daemons may continue issuing scan and connect
requests, which the driver can only reject individually.
Mark the radio as hardware-blocked through rfkill when
entering the WEDGED state so userspace stops retrying
operations against a device that can no longer operate.
Both WEDGED transitions already route through
ath10k_core_enter_wedged(), so adding the call there is
enough to cover them consistently.
Tested-on: QCA6174 hw3.2 PCI WLAN.RM.4.4.1-00288-QCARMSWPZ-1
Tested-on: QCA6174 hw3.2 SDIO WLAN.RMH.4.4.1-00189
Signed-off-by: Kang Yang <kang.yang@xxxxxxxxxxxxxxxx>
---
drivers/net/wireless/ath/ath10k/core.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
index 6b6b80242cd1..66585cfa6d96 100644
--- a/drivers/net/wireless/ath/ath10k/core.c
+++ b/drivers/net/wireless/ath/ath10k/core.c
@@ -2521,6 +2521,14 @@ static void ath10k_core_enter_wedged(struct ath10k *ar)
ieee80211_stop_queues(ar->hw);
ath10k_core_wake_all_waiters(ar);
+
+ /*
+ * Signal the radio as hard-blocked so userspace (e.g.
+ * wpa_supplicant, NetworkManager) stops looping scan and connect
+ * requests at a device the driver has already given up on. The
+ * state is cleared only when the driver is reloaded.
+ */
+ wiphy_rfkill_set_hw_state(ar->hw->wiphy, true);
}
static void ath10k_core_recovery_check_work(struct work_struct *work)
--
2.34.1