|
|
@@ -31,6 +31,8 @@
|
|
|
/* when under memory pressure rx ring refill may fail and needs a retry */
|
|
|
#define HTT_RX_RING_REFILL_RETRY_MS 50
|
|
|
|
|
|
+#define HTT_RX_RING_REFILL_RESCHED_MS 5
|
|
|
+
|
|
|
static int ath10k_htt_rx_get_csum_state(struct sk_buff *skb);
|
|
|
static void ath10k_htt_txrx_compl_task(unsigned long ptr);
|
|
|
|
|
|
@@ -192,7 +194,8 @@ static void ath10k_htt_rx_msdu_buff_replenish(struct ath10k_htt *htt)
|
|
|
mod_timer(&htt->rx_ring.refill_retry_timer, jiffies +
|
|
|
msecs_to_jiffies(HTT_RX_RING_REFILL_RETRY_MS));
|
|
|
} else if (num_deficit > 0) {
|
|
|
- tasklet_schedule(&htt->rx_replenish_task);
|
|
|
+ mod_timer(&htt->rx_ring.refill_retry_timer, jiffies +
|
|
|
+ msecs_to_jiffies(HTT_RX_RING_REFILL_RESCHED_MS));
|
|
|
}
|
|
|
spin_unlock_bh(&htt->rx_ring.lock);
|
|
|
}
|
|
|
@@ -223,7 +226,6 @@ int ath10k_htt_rx_ring_refill(struct ath10k *ar)
|
|
|
void ath10k_htt_rx_free(struct ath10k_htt *htt)
|
|
|
{
|
|
|
del_timer_sync(&htt->rx_ring.refill_retry_timer);
|
|
|
- tasklet_kill(&htt->rx_replenish_task);
|
|
|
tasklet_kill(&htt->txrx_compl_task);
|
|
|
|
|
|
skb_queue_purge(&htt->rx_compl_q);
|
|
|
@@ -380,13 +382,6 @@ static int ath10k_htt_rx_amsdu_pop(struct ath10k_htt *htt,
|
|
|
return msdu_chaining;
|
|
|
}
|
|
|
|
|
|
-static void ath10k_htt_rx_replenish_task(unsigned long ptr)
|
|
|
-{
|
|
|
- struct ath10k_htt *htt = (struct ath10k_htt *)ptr;
|
|
|
-
|
|
|
- ath10k_htt_rx_msdu_buff_replenish(htt);
|
|
|
-}
|
|
|
-
|
|
|
static struct sk_buff *ath10k_htt_rx_pop_paddr(struct ath10k_htt *htt,
|
|
|
u32 paddr)
|
|
|
{
|
|
|
@@ -520,9 +515,6 @@ int ath10k_htt_rx_alloc(struct ath10k_htt *htt)
|
|
|
htt->rx_ring.sw_rd_idx.msdu_payld = 0;
|
|
|
hash_init(htt->rx_ring.skb_table);
|
|
|
|
|
|
- tasklet_init(&htt->rx_replenish_task, ath10k_htt_rx_replenish_task,
|
|
|
- (unsigned long)htt);
|
|
|
-
|
|
|
skb_queue_head_init(&htt->rx_compl_q);
|
|
|
skb_queue_head_init(&htt->rx_in_ord_compl_q);
|
|
|
skb_queue_head_init(&htt->tx_fetch_ind_q);
|
|
|
@@ -1912,8 +1904,7 @@ static void ath10k_htt_rx_in_ord_ind(struct ath10k *ar, struct sk_buff *skb)
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- tasklet_schedule(&htt->rx_replenish_task);
|
|
|
+ ath10k_htt_rx_msdu_buff_replenish(htt);
|
|
|
}
|
|
|
|
|
|
static void ath10k_htt_rx_tx_fetch_resp_id_confirm(struct ath10k *ar,
|
|
|
@@ -2470,5 +2461,5 @@ static void ath10k_htt_txrx_compl_task(unsigned long ptr)
|
|
|
dev_kfree_skb_any(skb);
|
|
|
}
|
|
|
|
|
|
- tasklet_schedule(&htt->rx_replenish_task);
|
|
|
+ ath10k_htt_rx_msdu_buff_replenish(htt);
|
|
|
}
|