diff options
author | 2019-11-27 18:29:56 +0200 | |
---|---|---|
committer | 2019-11-29 09:35:26 +0200 | |
commit | 293cb5839729b186f951a82289aa5e0257c6d1b8 (patch) | |
tree | 5fe52887e7ed8322719b1a1c916987f93359aaa1 /drivers/net/wireless/ath/ath11k/hal_rx.h | |
parent | ath11k: update tcl cmd descriptor parameters for STA mode (diff) | |
download | wireguard-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.h | 28 |
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, |