Message ID | 1635168282-8845-1-git-send-email-quic_ppranees@quicinc.com (mailing list archive) |
---|---|
State | Accepted |
Commit | c0b0d2e87d91ce283c8766b4b3c2ec9ac90ebf96 |
Delegated to: | Kalle Valo |
Headers | show |
Series | [v2] ath11k: Increment pending_mgmt_tx count before tx send invoke | expand |
P Praneesh <quic_ppranees@quicinc.com> wrote: > 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> Patch applied to ath-next branch of ath.git, thanks. c0b0d2e87d91 ath11k: Increment pending_mgmt_tx count before tx send invoke
diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c index 1cc5560..56f3208 100644 --- a/drivers/net/wireless/ath/ath11k/mac.c +++ b/drivers/net/wireless/ath/ath11k/mac.c @@ -5048,13 +5048,15 @@ static void ath11k_mgmt_over_wmi_tx_work(struct work_struct *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,