Skip to content

Commit 4d922ce

Browse files
Karthikeyan Periyasamykvalo
authored andcommitted
wifi: ath12k: avoid explicit HW conversion argument in Rxdma replenish
Currently Rxdma replenish require HW conversion argument which is unnecessary argument since ath12k driver configures the Rxdma only in HW conversion. To optimize the rx data path per packet, avoid the explicit unnecessary argument and condition check in the rx replenish. Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.1.1-00125-QCAHKSWPL_SILICONZ-1 Signed-off-by: Karthikeyan Periyasamy <[email protected]> Acked-by: Jeff Johnson <[email protected]> Signed-off-by: Kalle Valo <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent d457f9f commit 4d922ce

File tree

3 files changed

+31
-53
lines changed

3 files changed

+31
-53
lines changed

drivers/net/wireless/ath/ath12k/dp.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -961,8 +961,7 @@ int ath12k_dp_service_srng(struct ath12k_base *ab,
961961
struct ath12k_dp *dp = &ab->dp;
962962
struct dp_rxdma_ring *rx_ring = &dp->rx_refill_buf_ring;
963963

964-
ath12k_dp_rx_bufs_replenish(ab, rx_ring, 0,
965-
true);
964+
ath12k_dp_rx_bufs_replenish(ab, rx_ring, 0);
966965
}
967966

968967
/* TODO: Implement handler for other interrupts */

drivers/net/wireless/ath/ath12k/dp_rx.c

Lines changed: 29 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -258,15 +258,13 @@ static int ath12k_dp_purge_mon_ring(struct ath12k_base *ab)
258258
/* Returns number of Rx buffers replenished */
259259
int ath12k_dp_rx_bufs_replenish(struct ath12k_base *ab,
260260
struct dp_rxdma_ring *rx_ring,
261-
int req_entries,
262-
bool hw_cc)
261+
int req_entries)
263262
{
264263
struct ath12k_buffer_addr *desc;
265264
struct hal_srng *srng;
266265
struct sk_buff *skb;
267266
int num_free;
268267
int num_remain;
269-
int buf_id;
270268
u32 cookie;
271269
dma_addr_t paddr;
272270
struct ath12k_dp *dp = &ab->dp;
@@ -307,40 +305,29 @@ int ath12k_dp_rx_bufs_replenish(struct ath12k_base *ab,
307305
if (dma_mapping_error(ab->dev, paddr))
308306
goto fail_free_skb;
309307

310-
if (hw_cc) {
311-
spin_lock_bh(&dp->rx_desc_lock);
312-
313-
/* Get desc from free list and store in used list
314-
* for cleanup purposes
315-
*
316-
* TODO: pass the removed descs rather than
317-
* add/read to optimize
318-
*/
319-
rx_desc = list_first_entry_or_null(&dp->rx_desc_free_list,
320-
struct ath12k_rx_desc_info,
321-
list);
322-
if (!rx_desc) {
323-
spin_unlock_bh(&dp->rx_desc_lock);
324-
goto fail_dma_unmap;
325-
}
326-
327-
rx_desc->skb = skb;
328-
cookie = rx_desc->cookie;
329-
list_del(&rx_desc->list);
330-
list_add_tail(&rx_desc->list, &dp->rx_desc_used_list);
308+
spin_lock_bh(&dp->rx_desc_lock);
331309

310+
/* Get desc from free list and store in used list
311+
* for cleanup purposes
312+
*
313+
* TODO: pass the removed descs rather than
314+
* add/read to optimize
315+
*/
316+
rx_desc = list_first_entry_or_null(&dp->rx_desc_free_list,
317+
struct ath12k_rx_desc_info,
318+
list);
319+
if (!rx_desc) {
332320
spin_unlock_bh(&dp->rx_desc_lock);
333-
} else {
334-
spin_lock_bh(&rx_ring->idr_lock);
335-
buf_id = idr_alloc(&rx_ring->bufs_idr, skb, 0,
336-
rx_ring->bufs_max * 3, GFP_ATOMIC);
337-
spin_unlock_bh(&rx_ring->idr_lock);
338-
if (buf_id < 0)
339-
goto fail_dma_unmap;
340-
cookie = u32_encode_bits(buf_id,
341-
DP_RXDMA_BUF_COOKIE_BUF_ID);
321+
goto fail_dma_unmap;
342322
}
343323

324+
rx_desc->skb = skb;
325+
cookie = rx_desc->cookie;
326+
list_del(&rx_desc->list);
327+
list_add_tail(&rx_desc->list, &dp->rx_desc_used_list);
328+
329+
spin_unlock_bh(&dp->rx_desc_lock);
330+
344331
desc = ath12k_hal_srng_src_get_next_entry(ab, srng);
345332
if (!desc)
346333
goto fail_buf_unassign;
@@ -359,17 +346,11 @@ int ath12k_dp_rx_bufs_replenish(struct ath12k_base *ab,
359346
return req_entries - num_remain;
360347

361348
fail_buf_unassign:
362-
if (hw_cc) {
363-
spin_lock_bh(&dp->rx_desc_lock);
364-
list_del(&rx_desc->list);
365-
list_add_tail(&rx_desc->list, &dp->rx_desc_free_list);
366-
rx_desc->skb = NULL;
367-
spin_unlock_bh(&dp->rx_desc_lock);
368-
} else {
369-
spin_lock_bh(&rx_ring->idr_lock);
370-
idr_remove(&rx_ring->bufs_idr, buf_id);
371-
spin_unlock_bh(&rx_ring->idr_lock);
372-
}
349+
spin_lock_bh(&dp->rx_desc_lock);
350+
list_del(&rx_desc->list);
351+
list_add_tail(&rx_desc->list, &dp->rx_desc_free_list);
352+
rx_desc->skb = NULL;
353+
spin_unlock_bh(&dp->rx_desc_lock);
373354
fail_dma_unmap:
374355
dma_unmap_single(ab->dev, paddr, skb->len + skb_tailroom(skb),
375356
DMA_FROM_DEVICE);
@@ -435,8 +416,7 @@ static int ath12k_dp_rxdma_ring_buf_setup(struct ath12k_base *ab,
435416
if ((ringtype == HAL_RXDMA_MONITOR_BUF) || (ringtype == HAL_TX_MONITOR_BUF))
436417
ath12k_dp_mon_buf_replenish(ab, rx_ring, num_entries);
437418
else
438-
ath12k_dp_rx_bufs_replenish(ab, rx_ring, num_entries,
439-
ringtype == HAL_RXDMA_BUF);
419+
ath12k_dp_rx_bufs_replenish(ab, rx_ring, num_entries);
440420
return 0;
441421
}
442422

@@ -2708,7 +2688,7 @@ int ath12k_dp_rx_process(struct ath12k_base *ab, int ring_id,
27082688
if (!total_msdu_reaped)
27092689
goto exit;
27102690

2711-
ath12k_dp_rx_bufs_replenish(ab, rx_ring, num_buffs_reaped, true);
2691+
ath12k_dp_rx_bufs_replenish(ab, rx_ring, num_buffs_reaped);
27122692

27132693
ath12k_dp_rx_process_received_packets(ab, napi, &msdu_list,
27142694
ring_id);
@@ -3486,7 +3466,7 @@ int ath12k_dp_rx_process_err(struct ath12k_base *ab, struct napi_struct *napi,
34863466

34873467
rx_ring = &dp->rx_refill_buf_ring;
34883468

3489-
ath12k_dp_rx_bufs_replenish(ab, rx_ring, tot_n_bufs_reaped, true);
3469+
ath12k_dp_rx_bufs_replenish(ab, rx_ring, tot_n_bufs_reaped);
34903470

34913471
return tot_n_bufs_reaped;
34923472
}
@@ -3799,7 +3779,7 @@ int ath12k_dp_rx_process_wbm_err(struct ath12k_base *ab,
37993779
if (!num_buffs_reaped)
38003780
goto done;
38013781

3802-
ath12k_dp_rx_bufs_replenish(ab, rx_ring, num_buffs_reaped, true);
3782+
ath12k_dp_rx_bufs_replenish(ab, rx_ring, num_buffs_reaped);
38033783

38043784
rcu_read_lock();
38053785
for (i = 0; i < ab->num_radios; i++) {

drivers/net/wireless/ath/ath12k/dp_rx.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,7 @@ int ath12k_dp_rx_process(struct ath12k_base *ab, int mac_id,
118118
int budget);
119119
int ath12k_dp_rx_bufs_replenish(struct ath12k_base *ab,
120120
struct dp_rxdma_ring *rx_ring,
121-
int req_entries,
122-
bool hw_cc);
121+
int req_entries);
123122
int ath12k_dp_rx_pdev_mon_attach(struct ath12k *ar);
124123
int ath12k_dp_rx_peer_frag_setup(struct ath12k *ar, const u8 *peer_mac, int vdev_id);
125124

0 commit comments

Comments
 (0)