Skip to content

Commit 5c86d97

Browse files
Rajkumar Manoharankvalo
authored andcommitted
ath10k: combine txrx and replenish task
Since tx completion and rx indication processing are moved out of txrx tasklet and rx ring lock contention also removed from txrx for rx_ind messages, it would be efficient to combine both replenish and txrx tasks. Refill threshold is adjusted for both AP135 and AP148 (low and high end systems). With this adjustment in AP135, TCP DL is improved from 603 Mbps to 620 Mbps and UDP DL is improved from 758 Mbps to 803 Mbps. Also no watchdog are observed on UDP BiDi. Signed-off-by: Rajkumar Manoharan <[email protected]> Signed-off-by: Kalle Valo <[email protected]>
1 parent 128abd0 commit 5c86d97

File tree

2 files changed

+7
-17
lines changed

2 files changed

+7
-17
lines changed

drivers/net/wireless/ath/ath10k/htt.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1662,7 +1662,6 @@ struct ath10k_htt {
16621662
/* set if host-fw communication goes haywire
16631663
* used to avoid further failures */
16641664
bool rx_confused;
1665-
struct tasklet_struct rx_replenish_task;
16661665
atomic_t num_mpdus_ready;
16671666

16681667
/* This is used to group tx/rx completions separately and process them
@@ -1737,7 +1736,7 @@ struct htt_rx_desc {
17371736

17381737
/* Refill a bunch of RX buffers for each refill round so that FW/HW can handle
17391738
* aggregated traffic more nicely. */
1740-
#define ATH10K_HTT_MAX_NUM_REFILL 16
1739+
#define ATH10K_HTT_MAX_NUM_REFILL 100
17411740

17421741
/*
17431742
* DMA_MAP expects the buffer to be an integral number of cache lines.

drivers/net/wireless/ath/ath10k/htt_rx.c

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
/* when under memory pressure rx ring refill may fail and needs a retry */
3232
#define HTT_RX_RING_REFILL_RETRY_MS 50
3333

34+
#define HTT_RX_RING_REFILL_RESCHED_MS 5
35+
3436
static int ath10k_htt_rx_get_csum_state(struct sk_buff *skb);
3537
static void ath10k_htt_txrx_compl_task(unsigned long ptr);
3638

@@ -192,7 +194,8 @@ static void ath10k_htt_rx_msdu_buff_replenish(struct ath10k_htt *htt)
192194
mod_timer(&htt->rx_ring.refill_retry_timer, jiffies +
193195
msecs_to_jiffies(HTT_RX_RING_REFILL_RETRY_MS));
194196
} else if (num_deficit > 0) {
195-
tasklet_schedule(&htt->rx_replenish_task);
197+
mod_timer(&htt->rx_ring.refill_retry_timer, jiffies +
198+
msecs_to_jiffies(HTT_RX_RING_REFILL_RESCHED_MS));
196199
}
197200
spin_unlock_bh(&htt->rx_ring.lock);
198201
}
@@ -223,7 +226,6 @@ int ath10k_htt_rx_ring_refill(struct ath10k *ar)
223226
void ath10k_htt_rx_free(struct ath10k_htt *htt)
224227
{
225228
del_timer_sync(&htt->rx_ring.refill_retry_timer);
226-
tasklet_kill(&htt->rx_replenish_task);
227229
tasklet_kill(&htt->txrx_compl_task);
228230

229231
skb_queue_purge(&htt->rx_compl_q);
@@ -380,13 +382,6 @@ static int ath10k_htt_rx_amsdu_pop(struct ath10k_htt *htt,
380382
return msdu_chaining;
381383
}
382384

383-
static void ath10k_htt_rx_replenish_task(unsigned long ptr)
384-
{
385-
struct ath10k_htt *htt = (struct ath10k_htt *)ptr;
386-
387-
ath10k_htt_rx_msdu_buff_replenish(htt);
388-
}
389-
390385
static struct sk_buff *ath10k_htt_rx_pop_paddr(struct ath10k_htt *htt,
391386
u32 paddr)
392387
{
@@ -520,9 +515,6 @@ int ath10k_htt_rx_alloc(struct ath10k_htt *htt)
520515
htt->rx_ring.sw_rd_idx.msdu_payld = 0;
521516
hash_init(htt->rx_ring.skb_table);
522517

523-
tasklet_init(&htt->rx_replenish_task, ath10k_htt_rx_replenish_task,
524-
(unsigned long)htt);
525-
526518
skb_queue_head_init(&htt->rx_compl_q);
527519
skb_queue_head_init(&htt->rx_in_ord_compl_q);
528520
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)
19121904
return;
19131905
}
19141906
}
1915-
1916-
tasklet_schedule(&htt->rx_replenish_task);
1907+
ath10k_htt_rx_msdu_buff_replenish(htt);
19171908
}
19181909

19191910
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)
24702461
dev_kfree_skb_any(skb);
24712462
}
24722463

2473-
tasklet_schedule(&htt->rx_replenish_task);
2464+
ath10k_htt_rx_msdu_buff_replenish(htt);
24742465
}

0 commit comments

Comments
 (0)