ath10k: prevent txrx running for too long
[deliverable/linux.git] / drivers / net / wireless / ath / ath10k / htt_rx.c
index 91afa3ae414cb039e198949a651c09d1294d20c3..3079434b5d9bc5bbcd78cc9962bb23a1da0205a3 100644 (file)
@@ -2156,10 +2156,18 @@ static void ath10k_htt_txrx_compl_task(unsigned long ptr)
 {
        struct ath10k_htt *htt = (struct ath10k_htt *)ptr;
        struct ath10k *ar = htt->ar;
+       struct sk_buff_head tx_q;
        struct htt_resp *resp;
        struct sk_buff *skb;
+       unsigned long flags;
 
-       while ((skb = skb_dequeue(&htt->tx_compl_q))) {
+       __skb_queue_head_init(&tx_q);
+
+       spin_lock_irqsave(&htt->tx_compl_q.lock, flags);
+       skb_queue_splice_init(&htt->tx_compl_q, &tx_q);
+       spin_unlock_irqrestore(&htt->tx_compl_q.lock, flags);
+
+       while ((skb = __skb_dequeue(&tx_q))) {
                ath10k_htt_rx_frm_tx_compl(htt->ar, skb);
                dev_kfree_skb_any(skb);
        }
This page took 0.095495 seconds and 5 git commands to generate.