[PATCH ath-next v3 00/10] wifi: ath10k: fix recovery and WEDGED failure handling
Kang Yang
kang.yang at oss.qualcomm.com
Thu Nov 12 03:25:59 PST 2026
Recovery failures can consume significant time before the
driver eventually gives up and enters ATH10K_STATE_WEDGED.
This series fixes several issues in the recovery and WEDGED
failure-handling paths, including recovery detection,
recovery time bounding, waiter release, and PCIe error
handling.
Several patches fix specific bugs and therefore carry Fixes
tags. The remaining patches address closely related issues in
the same recovery path because the fixes alone do not fully
resolve the reported failures.
Taken together, the series ensures that recovery either
succeeds or transitions to ATH10K_STATE_WEDGED within a
bounded amount of time, avoids unnecessary waits after
recovery has failed, and reduces the likelihood of watchdog
timeouts on affected platforms.
Google has reported this class of failures for an extended
period, with more than 4000 observed crashes over the last
month.
---
v3:
- rebase onto the latest ath-next.
- patch 1: fold the old patch 5 ("check the recovery deadline on its own
timeline") into this patch, so the recovery monitor is a self-rearming
delayed work from the start; move recovery_start_jiffies to patch 4.
- patch 4: reword the commit message; recovery_start_jiffies is now
introduced here, where it is first used.
- patch 8 (new): on SDIO, mask the target interrupts and start recovery
when an invalid HTC bundle count is read from the lookahead, to stop
the SDIO IRQ storm.
- patch 9 (new): reject scan requests while the device is not running.
- patch 10 (new): sdio: drop pending async writes and stop the sleep timer
and work across power cycles, so stale requests cannot touch the bus
after power up.
v2:
- patch 3: also wake wow.wakeup_completed, peer_stats_info_complete and
wmi.radar_confirm on WEDGED; reinit peer_delete_done before each
peer delete command.
- patch 5: remove the early-return time_after() branch from the monitor;
in ath10k_reconfig_complete(), cancel the monitor with
cancel_delayed_work_sync() before clearing fail_cont_count and
pending_recovery.
- add SDIO Test-on tag.
To: Jeff Johnson <jjohnson at kernel.org>
To: Loic Poulain <loic.poulain at oss.qualcomm.com>
To: Baochen Qiang <baochen.qiang at oss.qualcomm.com>
Cc: Jeff Johnson <jeff.johnson at oss.qualcomm.com>
Cc: linux-wireless at vger.kernel.org
Cc: ath10k at lists.infradead.org
Cc: linux-kernel at vger.kernel.org
Signed-off-by: Kang Yang <kang.yang at oss.qualcomm.com>
---
Kang Yang (10):
wifi: ath10k: fix SDIO aux workqueue starvation in recovery detection
wifi: ath10k: wake blocked waiters when entering WEDGED state
wifi: ath10k: also wake remaining blocked waiters
wifi: ath10k: bound recovery time before entering WEDGED
wifi: ath10k: hard-block the radio when entering WEDGED state
wifi: ath10k: remove now-unused driver_recovery completion
wifi: ath10k: trigger recovery on PCIe MMIO wake-up failures
wifi: ath10k: trigger recovery on corrupted HTC bundle lookahead
wifi: ath10k: reject scan requests while the device is not running
wifi: ath10k: drop async writes and sleep timer across power cycles
drivers/net/wireless/ath/ath10k/core.c | 132 +++++++++++++++++++++------------
drivers/net/wireless/ath/ath10k/core.h | 13 +++-
drivers/net/wireless/ath/ath10k/mac.c | 23 +++++-
drivers/net/wireless/ath/ath10k/pci.c | 27 +++++++
drivers/net/wireless/ath/ath10k/sdio.c | 85 +++++++++++++++------
drivers/net/wireless/ath/ath10k/snoc.c | 8 +-
6 files changed, 210 insertions(+), 78 deletions(-)
---
base-commit: ff4c7359e310744a7abe53cf66d921fa2969eb19
change-id: 20261111-10k-sdio-crash-39b0faf282bd
Best regards,
--
Kang Yang <kang.yang at oss.qualcomm.com>
More information about the ath10k
mailing list