mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 14:23:38 +00:00
45 lines
1.8 KiB
Diff
45 lines
1.8 KiB
Diff
From c0b0d2e87d91ce283c8766b4b3c2ec9ac90ebf96 Mon Sep 17 00:00:00 2001
|
|
From: P Praneesh <quic_ppranees@quicinc.com>
|
|
Date: Mon, 25 Oct 2021 18:54:42 +0530
|
|
Subject: [PATCH 092/120] ath11k: Increment pending_mgmt_tx count before tx
|
|
send invoke
|
|
|
|
There is a race condition whereby the tx completion handler can be invoked
|
|
before the 'num_pending_mgmt_tx" count is incremented. If that occurs, we
|
|
could get warning trace indicating that 'num_pending_mgmt_tx' is 0 (because
|
|
it was not yet incremented). Ideally, this trace should be seen only if
|
|
mgmt tx has not happened but tx completion is received, and it is not
|
|
expected in this race condition.
|
|
|
|
Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.4.0.1-01386-QCAHKSWPL_SILICONZ-1
|
|
|
|
Co-developed-by: Lavanya Suresh <lavaks@codeaurora.org>
|
|
Signed-off-by: Lavanya Suresh <lavaks@codeaurora.org>
|
|
Signed-off-by: P Praneesh <quic_ppranees@quicinc.com>
|
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
|
Link: https://lore.kernel.org/r/1635168282-8845-1-git-send-email-quic_ppranees@quicinc.com
|
|
---
|
|
drivers/net/wireless/ath/ath11k/mac.c | 6 ++++--
|
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
|
@@ -5202,13 +5202,15 @@ static void ath11k_mgmt_over_wmi_tx_work
|
|
arvif = ath11k_vif_to_arvif(skb_cb->vif);
|
|
if (ar->allocated_vdev_map & (1LL << arvif->vdev_id) &&
|
|
arvif->is_started) {
|
|
+ atomic_inc(&ar->num_pending_mgmt_tx);
|
|
ret = ath11k_mac_mgmt_tx_wmi(ar, arvif, skb);
|
|
if (ret) {
|
|
+ if (atomic_dec_if_positive(&ar->num_pending_mgmt_tx) < 0)
|
|
+ WARN_ON_ONCE(1);
|
|
+
|
|
ath11k_warn(ar->ab, "failed to tx mgmt frame, vdev_id %d :%d\n",
|
|
arvif->vdev_id, ret);
|
|
ieee80211_free_txskb(ar->hw, skb);
|
|
- } else {
|
|
- atomic_inc(&ar->num_pending_mgmt_tx);
|
|
}
|
|
} else {
|
|
ath11k_warn(ar->ab,
|