]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ath11k: Avoid mgmt tx count underflow
authorSriram R <srirrama@codeaurora.org>
Mon, 30 Mar 2020 11:17:08 +0000 (16:47 +0530)
committerKalle Valo <kvalo@codeaurora.org>
Mon, 6 Apr 2020 16:20:48 +0000 (19:20 +0300)
The mgmt tx count reference is incremented/decremented on every mgmt tx and on
tx completion event from firmware.
In case of an unexpected mgmt tx completion event from firmware,
the counter would underflow. Avoid this by decrementing
only when the tx count is greater than 0.

Signed-off-by: Sriram R <srirrama@codeaurora.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/1585567028-9242-1-git-send-email-srirrama@codeaurora.org
drivers/net/wireless/ath/ath11k/wmi.c

index 8832b8c8e63f9650971f95d6656a33d5e70f76a5..973b72a0ca69fc3fec3c30de7fde8279ae7c6fd3 100644 (file)
@@ -3880,8 +3880,9 @@ static int wmi_process_mgmt_tx_comp(struct ath11k *ar, u32 desc_id,
 
        ieee80211_tx_status_irqsafe(ar->hw, msdu);
 
-       WARN_ON_ONCE(atomic_read(&ar->num_pending_mgmt_tx) == 0);
-       atomic_dec(&ar->num_pending_mgmt_tx);
+       /* WARN when we received this event without doing any mgmt tx */
+       if (atomic_dec_if_positive(&ar->num_pending_mgmt_tx) < 0)
+               WARN_ON_ONCE(1);
 
        return 0;
 }