aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/drivers/net/wireless/ath/ath11k/hal_rx.h
diff options
context:
space:
mode:
authorJohn Crispin <john@phrozen.org>2019-11-27 18:29:56 +0200
committerKalle Valo <kvalo@codeaurora.org>2019-11-29 09:35:26 +0200
commit293cb5839729b186f951a82289aa5e0257c6d1b8 (patch)
tree5fe52887e7ed8322719b1a1c916987f93359aaa1 /drivers/net/wireless/ath/ath11k/hal_rx.h
parentath11k: update tcl cmd descriptor parameters for STA mode (diff)
downloadwireguard-linux-293cb5839729b186f951a82289aa5e0257c6d1b8.tar.xz
wireguard-linux-293cb5839729b186f951a82289aa5e0257c6d1b8.zip
ath11k: optimize RX path latency
This patch drops ath11k_hal_rx_parse_dst_ring_desc(). This function was creating a huge amount of load, which lead to a signifcant latency delay when processing data in the RX path. Pegging the processing on a specific core and running perf --top we get the following output when running HE80 at a fixed bandwidth of 1gbit. with patch 19.19% [ath11k] [k] ath11k_dp_process_rx 5.02% [ath11k] [k] ath11k_dp_rx_tid_del_func 4.39% [kernel] [k] v7_dma_inv_range 4.15% [kernel] [k] __slab_alloc.constprop.1 4.03% [kernel] [k] dev_gro_receive 3.86% [kernel] [k] tcp_gro_receive 3.07% [ip_tables] [k] ipt_do_table 2.96% [kernel] [k] dma_cache_maint_page without patch 21.64% [ath11k] [k] ath11k_hal_rx_parse_dst_ring_desc 10.80% [ath11k] [k] ath11k_dp_process_rx 3.77% [kernel] [k] v7_dma_inv_range 3.48% [kernel] [k] dev_gro_receive 3.32% [ath11k] [k] ath11k_dp_rx_tid_del_func 3.17% [mac80211] [k] ieee80211_rx_napi 2.70% [kernel] [k] dma_cache_maint_page 2.65% [mac80211] [k] ieee80211_sta_ps_transition When removing the the bandwidth limit and rerunning the test we see an overall throughput improvement of 3-400mbit when running 4x4 HE80. Signed-off-by: Shashidhar Lakkavalli <slakkavalli@datto.com> Signed-off-by: John Crispin <john@phrozen.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/ath/ath11k/hal_rx.h')
-rw-r--r--drivers/net/wireless/ath/ath11k/hal_rx.h28
1 files changed, 1 insertions, 27 deletions
diff --git a/drivers/net/wireless/ath/ath11k/hal_rx.h b/drivers/net/wireless/ath/ath11k/hal_rx.h
index 96555e4f4ef3..2271bf56183b 100644
--- a/drivers/net/wireless/ath/ath11k/hal_rx.h
+++ b/drivers/net/wireless/ath/ath11k/hal_rx.h
@@ -6,30 +6,6 @@
#ifndef ATH11K_HAL_RX_H
#define ATH11K_HAL_RX_H
-struct hal_rx_mpdu_meta {
- u32 peer_meta;
- u16 msdu_cnt;
- u16 seq_num;
- bool frag;
- bool retry;
- bool ampdu;
- bool raw;
-};
-
-struct hal_rx_msdu_meta {
- u32 cookie;
- u32 msdu_len;
- bool first;
- bool last;
- bool continuation;
-};
-
-struct hal_rx_meta_info {
- enum hal_reo_dest_ring_push_reason push_reason;
- struct hal_rx_mpdu_meta mpdu_meta;
- struct hal_rx_msdu_meta msdu_meta;
-};
-
struct hal_rx_wbm_rel_info {
u32 cookie;
enum hal_wbm_rel_src_module err_rel_src;
@@ -320,7 +296,7 @@ void ath11k_hal_reo_update_rx_reo_queue_status(struct ath11k_base *ab,
struct hal_reo_status *status);
int ath11k_hal_reo_process_status(u8 *reo_desc, u8 *status);
void ath11k_hal_rx_msdu_link_info_get(void *link_desc, u32 *num_msdus,
- struct hal_rx_msdu_meta *meta,
+ u32 *msdu_cookies,
enum hal_rx_buf_return_buf_manager *rbm);
void ath11k_hal_rx_msdu_link_desc_set(struct ath11k_base *ab, void *desc,
void *link_desc,
@@ -331,8 +307,6 @@ void ath11k_hal_rx_buf_addr_info_get(void *desc, dma_addr_t *paddr,
u32 *cookie, u8 *rbm);
int ath11k_hal_desc_reo_parse_err(struct ath11k_base *ab, u32 *rx_desc,
dma_addr_t *paddr, u32 *desc_bank);
-void ath11k_hal_rx_parse_dst_ring_desc(struct ath11k_base *ab, u32 *rx_desc,
- struct hal_rx_meta_info *meta_info);
int ath11k_hal_wbm_desc_parse_err(struct ath11k_base *ab, void *desc,
struct hal_rx_wbm_rel_info *rel_info);
void ath11k_hal_rx_reo_ent_paddr_get(struct ath11k_base *ab, void *desc,