mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-21 10:05:00 +08:00
ath10k: fix unconditional num_mpdus_ready subtraction
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 commit3128b3d8a2
("ath10k: speedup htt rx descriptor processing for rx_ind") missed to removed unused skb list rx_q. Fixes:3128b3d8a2
("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>
This commit is contained in:
parent
dd7c280f9b
commit
689de38e37
@ -2412,14 +2412,12 @@ static void ath10k_htt_txrx_compl_task(unsigned long ptr)
|
|||||||
struct ath10k_htt *htt = (struct ath10k_htt *)ptr;
|
struct ath10k_htt *htt = (struct ath10k_htt *)ptr;
|
||||||
struct ath10k *ar = htt->ar;
|
struct ath10k *ar = htt->ar;
|
||||||
struct htt_tx_done tx_done = {};
|
struct htt_tx_done tx_done = {};
|
||||||
struct sk_buff_head rx_q;
|
|
||||||
struct sk_buff_head rx_ind_q;
|
struct sk_buff_head rx_ind_q;
|
||||||
struct sk_buff_head tx_ind_q;
|
struct sk_buff_head tx_ind_q;
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int num_mpdus;
|
int num_mpdus;
|
||||||
|
|
||||||
__skb_queue_head_init(&rx_q);
|
|
||||||
__skb_queue_head_init(&rx_ind_q);
|
__skb_queue_head_init(&rx_ind_q);
|
||||||
__skb_queue_head_init(&tx_ind_q);
|
__skb_queue_head_init(&tx_ind_q);
|
||||||
|
|
||||||
@ -2447,11 +2445,13 @@ static void ath10k_htt_txrx_compl_task(unsigned long ptr)
|
|||||||
ath10k_mac_tx_push_pending(ar);
|
ath10k_mac_tx_push_pending(ar);
|
||||||
|
|
||||||
num_mpdus = atomic_read(&htt->num_mpdus_ready);
|
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))
|
if (ath10k_htt_rx_handle_amsdu(htt))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
num_mpdus--;
|
||||||
|
atomic_dec(&htt->num_mpdus_ready);
|
||||||
}
|
}
|
||||||
|
|
||||||
while ((skb = __skb_dequeue(&rx_ind_q))) {
|
while ((skb = __skb_dequeue(&rx_ind_q))) {
|
||||||
|
Loading…
Reference in New Issue
Block a user