Skip to content

Commit

Permalink
ath10k: fix unconditional num_mpdus_ready subtraction
Browse files Browse the repository at this point in the history
Decrement num_mpdus_ready only when rx amsdu is processed successfully.
Not doing so, will result in leak and impact stabilty under low memory
cases. Also commit 3128b3d ("ath10k: speedup htt rx descriptor
processing for rx_ind") missed to removed unused skb list rx_q.

Fixes: 3128b3d ("ath10k: speedup htt rx descriptor processing for rx_ind")
Signed-off-by: Rajkumar Manoharan <rmanohar@qti.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
  • Loading branch information
Rajkumar Manoharan authored and Kalle Valo committed Apr 7, 2016
1 parent dd7c280 commit 689de38
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions drivers/net/wireless/ath/ath10k/htt_rx.c
Original file line number Diff line number Diff line change
Expand Up @@ -2412,14 +2412,12 @@ static void ath10k_htt_txrx_compl_task(unsigned long ptr)
struct ath10k_htt *htt = (struct ath10k_htt *)ptr;
struct ath10k *ar = htt->ar;
struct htt_tx_done tx_done = {};
struct sk_buff_head rx_q;
struct sk_buff_head rx_ind_q;
struct sk_buff_head tx_ind_q;
struct sk_buff *skb;
unsigned long flags;
int num_mpdus;

__skb_queue_head_init(&rx_q);
__skb_queue_head_init(&rx_ind_q);
__skb_queue_head_init(&tx_ind_q);

Expand Down Expand Up @@ -2447,11 +2445,13 @@ static void ath10k_htt_txrx_compl_task(unsigned long ptr)
ath10k_mac_tx_push_pending(ar);

num_mpdus = atomic_read(&htt->num_mpdus_ready);
atomic_sub(num_mpdus, &htt->num_mpdus_ready);

while (num_mpdus--) {
while (num_mpdus) {
if (ath10k_htt_rx_handle_amsdu(htt))
break;

num_mpdus--;
atomic_dec(&htt->num_mpdus_ready);
}

while ((skb = __skb_dequeue(&rx_ind_q))) {
Expand Down

0 comments on commit 689de38

Please sign in to comment.