linux/net/mac80211
Andrew Pope a007a384c9 wifi: mac80211: recalculate TIM when a station enters power save
When an AP buffers frames for a station on its per-station TXQs and the
station subsequently enters power save, sta_ps_start() records the
buffered TIDs in txq_buffered_tids but does not update the TIM. The
station's TIM bit is only ever set when a further frame is buffered
while the station is already asleep
(ieee80211_tx_h_unicast_ps_buf() -> sta_info_recalc_tim()).

If no further downlink frame arrives for that station the beacon
TIM never advertises the buffered traffic. A station relying on the
TIM then remains in doze indefinitely on top of a non-empty queue. Its
TXQs were removed from the scheduler's active list at PS entry, nothing
pages it, and the flow deadlocks until an unrelated event wakes the
station.

Recalculate the TIM at the end of sta_ps_start(), so traffic
already buffered at PS entry is advertised immediately.
sta_info_recalc_tim() already consults txq_buffered_tids, which is
updated above, and is safe in this context (it is already called
from equivalent paths such as the tx handlers and
ieee80211_handle_filtered_frame()).

Fixes: ba8c3d6f16 ("mac80211: add an intermediate software queue implementation")
Signed-off-by: Andrew Pope <andrew.pope@morsemicro.com>
Link: https://patch.msgid.link/20260717011751.79524-1-andrew.pope@morsemicro.com
[add wifi: subject prefix]
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
2026-07-21 13:35:22 +02:00
..
tests wifi: mac80211: parse and apply UHR DBE channel 2026-06-03 14:11:58 +02:00
aead_api.c
aead_api.h
aes_ccm.h
aes_cmac.c wifi: mac80211: Use AES-CMAC library in ieee80211_aes_cmac() 2026-03-09 13:27:21 -07:00
aes_cmac.h wifi: mac80211: Use AES-CMAC library in ieee80211_aes_cmac() 2026-03-09 13:27:21 -07:00
aes_gcm.h
aes_gmac.c wifi: mac80211: utilize the newly defined CMAC constants 2025-11-20 11:56:19 +01:00
aes_gmac.h wifi: mac80211: utilize the newly defined CMAC constants 2025-11-20 11:56:19 +01:00
agg-rx.c wifi: mac80211: fold tid_ampdu_rx allocations into a flexible array 2026-06-05 09:59:30 +02:00
agg-tx.c wifi: mac80211: allow block ack agreements in NAN Data 2026-04-07 15:36:04 +02:00
airtime.c
ap.c wifi: mac80211: AP: handle DBE for clients 2026-06-03 14:11:58 +02:00
cfg.c wifi: mac80211: copy aggregation information 2026-07-21 13:25:45 +02:00
chan.c wifi: mac80211: remove 5/10 MHz channel code 2026-06-03 14:07:06 +02:00
debug.h
debugfs_key.c
debugfs_key.h
debugfs_netdev.c kernel.h: drop hex.h and update all hex.h users 2026-01-20 19:44:19 -08:00
debugfs_netdev.h
debugfs_sta.c
debugfs_sta.h
debugfs.c wifi: mac80211: use kstrtobool_from_user() in debugfs callbacks 2026-04-28 09:31:27 +02:00
debugfs.h
driver-ops.c wifi: mac80211: make monitor link info check more specific 2025-11-11 11:05:19 +01:00
driver-ops.h wifi: mac80211: add NAN peer schedule support 2026-04-07 15:36:03 +02:00
drop.h wifi: mac80211: remove RX_DROP 2026-01-19 10:21:47 +01:00
eht.c wifi: mac80211: move frame RX handling to type files 2026-05-05 14:49:01 +02:00
ethtool.c
fils_aead.c wifi: mac80211: Use AES-CMAC library in aes_s2v() 2026-03-09 13:27:21 -07:00
fils_aead.h
he.c wifi: mac80211: refactor link STA bandwidth update 2026-06-03 14:11:58 +02:00
ht.c wifi: mac80211: refactor link STA bandwidth update 2026-06-03 14:11:58 +02:00
ibss.c wifi: mac80211: ibss: wait for in-flight TX on disconnect 2026-07-07 09:28:55 +02:00
ieee80211_i.h wifi: mac80211: AP: handle DBE for clients 2026-06-03 14:11:58 +02:00
iface.c wifi: mac80211: free AP_VLAN bc_buf SKBs outside IRQ lock 2026-07-07 09:23:23 +02:00
Kconfig wifi: mac80211: Use AES-CMAC library in aes_s2v() 2026-03-09 13:27:21 -07:00
key.c wifi: mac80211: allow cipher change on NAN_DATA interfaces 2026-05-20 12:03:38 +02:00
key.h wifi: mac80211: Use AES-CMAC library in ieee80211_aes_cmac() 2026-03-09 13:27:21 -07:00
led.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
led.h
link.c wifi: mac80211: tear down new links on vif update error path 2026-07-21 13:05:32 +02:00
main.c wifi: mac80211: fix memory leak in ieee80211_register_hw() 2026-07-07 09:25:05 +02:00
Makefile wifi: mac80211: move frame RX handling to type files 2026-05-05 14:49:01 +02:00
mesh_hwmp.c wifi: mac80211: Fix -Wc23-extensions in hwmp_route_info_get() 2026-06-05 09:55:08 +02:00
mesh_pathtbl.c treewide: Replace kmalloc with kmalloc_obj for non-scalar types 2026-02-21 01:02:28 -08:00
mesh_plink.c wifi: mac80211: remove 5/10 MHz channel code 2026-06-03 14:07:06 +02:00
mesh_ps.c
mesh_sync.c wifi: mac80211: export ieee80211_calculate_rx_timestamp 2026-04-07 15:36:02 +02:00
mesh.c wifi: mac80211: remove 5/10 MHz channel code 2026-06-03 14:07:06 +02:00
mesh.h
mlme.c wifi: mac80211: validate deauth frame length before reason access 2026-07-06 14:11:11 +02:00
nan.c wifi: mac80211: allocate backup ieee80211_nan_sched_cfg off stack 2026-07-06 10:07:11 +02:00
ocb.c wifi: mac80211: clean up initial STA NSS/bandwidth handling 2026-04-28 09:27:46 +02:00
offchannel.c wifi: mac80211: remove 5/10 MHz channel code 2026-06-03 14:07:06 +02:00
parse.c wifi: mac80211: always expose multi-link element 2026-06-03 14:11:57 +02:00
pm.c
rate.c wifi: mac80211: remove 5/10 MHz channel code 2026-06-03 14:07:06 +02:00
rate.h
rc80211_minstrel_ht_debugfs.c
rc80211_minstrel_ht.c wifi: mac80211: remove unused variables in minstrel_ht_alloc_sta 2026-04-07 15:40:25 +02:00
rc80211_minstrel_ht.h
rx.c wifi: mac80211: recalculate TIM when a station enters power save 2026-07-21 13:35:22 +02:00
s1g.c wifi: mac80211: add support for NDP ADDBA/DELBA for S1G 2026-03-06 10:52:11 +01:00
scan.c wifi: mac80211: export ieee80211_calculate_rx_timestamp 2026-04-07 15:36:02 +02:00
spectmgmt.c wifi: mac80211: remove 5/10 MHz channel code 2026-06-03 14:07:06 +02:00
sta_info.c wifi: mac80211: defer link RX stats percpu free to RCU 2026-07-06 14:11:07 +02:00
sta_info.h wifi: mac80211: fold tid_ampdu_rx allocations into a flexible array 2026-06-05 09:59:30 +02:00
status.c wifi: mac80211: parse and apply UHR DBE channel 2026-06-03 14:11:58 +02:00
tdls.c wifi: mac80211: clarify per-STA bandwidth handling 2026-04-28 09:29:02 +02:00
tkip.c
tkip.h
trace_msg.h
trace.c
trace.h wifi: mac80211: add NPCA to chandef tracing 2026-05-05 14:49:03 +02:00
tx.c wifi: mac80211: free ack status frame on TX header build failure 2026-07-06 14:11:07 +02:00
uhr.c wifi: mac80211: update UHR capabilities field order 2026-05-05 14:49:01 +02:00
util.c wifi: mac80211: validate extension-frame layout before RX 2026-07-06 14:11:09 +02:00
vht.c wifi: mac80211: clarify per-STA bandwidth handling 2026-04-28 09:29:02 +02:00
wbrf.c
wep.c
wep.h
wme.c
wme.h
wpa.c Networking changes for 7.1. 2026-04-14 18:36:10 -07:00
wpa.h wifi: mac80211: refactor CMAC packet handlers 2025-11-20 11:56:19 +01:00