e92274ba92
[ Upstream commit d2b0ca38d362ebf16ca79cd7f309d5bb8b581deb ] Currently for CCMP256, GCMP128 and GCMP256 ciphers, in ath11k_install_key() IEEE80211_KEY_FLAG_GENERATE_IV_MGMT is not set. And in ath11k_mac_mgmt_tx_wmi() a length of IEEE80211_CCMP_MIC_LEN is reserved for all ciphers. This results in unexpected management frame drop in case either of above 3 ciphers is used. The reason is, without IEEE80211_KEY_FLAG_GENERATE_IV_MGMT set, mac80211 will not generate CCMP/GCMP headers in frame for ath11k. Also MIC length reserved is wrong. Such frame is dropped later by hardware: ath11k_pci 0000:5a:00.0: mac tx mgmt frame, buf id 0 ath11k_pci 0000:5a:00.0: mgmt tx compl ev pdev_id 1, desc_id 0, status 1 From user point of view, we have observed very low throughput due to this issue: action frames are all dropped so ADDBA response from DUT never reaches AP. AP can not use aggregation thus throughput is low. Fix this by setting IEEE80211_KEY_FLAG_GENERATE_IV_MGMT flag and by reserving proper MIC length for those ciphers. Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.30 Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1 Fixes: d5c65159f289 ("ath11k: driver for Qualcomm IEEE 802.11ax devices") Reported-by: Yaroslav Isakov <yaroslav.isakov@gmail.com> Tested-by: Yaroslav Isakov <yaroslav.isakov@gmail.com> Closes: https://lore.kernel.org/all/CADS+iDX5=JtJr0apAtAQ02WWBxgOFEv8G063vuGYwDTC8AVZaw@mail.gmail.com Signed-off-by: Baochen Qiang <quic_bqiang@quicinc.com> Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com> Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> Link: https://msgid.link/20240605014826.22498-1-quic_bqiang@quicinc.com Signed-off-by: Sasha Levin <sashal@kernel.org> |
||
---|---|---|
.. | ||
ahb.c | ||
ahb.h | ||
ce.c | ||
ce.h | ||
core.c | ||
core.h | ||
dbring.c | ||
dbring.h | ||
debug.c | ||
debug.h | ||
debugfs.c | ||
debugfs.h | ||
debugfs_htt_stats.c | ||
debugfs_htt_stats.h | ||
debugfs_sta.c | ||
debugfs_sta.h | ||
dp.c | ||
dp.h | ||
dp_rx.c | ||
dp_rx.h | ||
dp_tx.c | ||
dp_tx.h | ||
hal.c | ||
hal.h | ||
hal_desc.h | ||
hal_rx.c | ||
hal_rx.h | ||
hal_tx.c | ||
hal_tx.h | ||
hif.h | ||
htc.c | ||
htc.h | ||
hw.c | ||
hw.h | ||
Kconfig | ||
mac.c | ||
mac.h | ||
Makefile | ||
mhi.c | ||
mhi.h | ||
pci.c | ||
pci.h | ||
peer.c | ||
peer.h | ||
qmi.c | ||
qmi.h | ||
reg.c | ||
reg.h | ||
rx_desc.h | ||
spectral.c | ||
spectral.h | ||
testmode.c | ||
testmode.h | ||
testmode_i.h | ||
thermal.c | ||
thermal.h | ||
trace.c | ||
trace.h | ||
wmi.c | ||
wmi.h |