From b681a483ca9d16005a6d5186f2695e87ce9e39f9 Mon Sep 17 00:00:00 2001 From: Jinwei Chen Date: Wed, 14 Aug 2019 15:24:06 +0800 Subject: [PATCH] qcacld-3.0: Skip GRO flush indication when T-put is low To meet 11a/b/g TCP RX T-put KPI, disable GRO flush indication when T-put is low. Change-Id: I2932f9161631b082f8ffacb3c24a1cf609f28d35 CRs-Fixed: 2493829 --- core/hdd/inc/wlan_hdd_main.h | 14 ++++++++++++++ core/hdd/src/wlan_hdd_stats.c | 3 ++- core/hdd/src/wlan_hdd_tx_rx.c | 15 ++++++++++----- core/hdd/src/wlan_hdd_wext.c | 3 ++- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h index f7de771795..ec10a90be0 100644 --- a/core/hdd/inc/wlan_hdd_main.h +++ b/core/hdd/inc/wlan_hdd_main.h @@ -103,6 +103,7 @@ #include "wlan_hdd_twt.h" #include "wma_sar_public_structs.h" #include "wlan_mlme_ucfg_api.h" +#include "pld_common.h" #ifdef WLAN_FEATURE_DP_BUS_BANDWIDTH #include "qdf_periodic_work.h" @@ -451,6 +452,7 @@ struct hdd_tx_rx_stats { __u32 rx_aggregated; __u32 rx_gro_dropped; __u32 rx_non_aggregated; + __u32 rx_gro_flush_skip; /* txflow stats */ bool is_txflow_paused; @@ -2360,6 +2362,12 @@ int hdd_bus_bandwidth_init(struct hdd_context *hdd_ctx); */ void hdd_bus_bandwidth_deinit(struct hdd_context *hdd_ctx); +static inline enum pld_bus_width_type +hdd_get_current_throughput_level(struct hdd_context *hdd_ctx) +{ + return hdd_ctx->cur_vote_level; +} + #define GET_CUR_RX_LVL(config) ((config)->cur_rx_level) #define GET_BW_COMPUTE_INTV(config) ((config)->bus_bw_compute_interval) #else @@ -2405,6 +2413,12 @@ void hdd_bus_bandwidth_deinit(struct hdd_context *hdd_ctx) { } +static inline enum pld_bus_width_type +hdd_get_current_throughput_level(struct hdd_context *hdd_ctx) +{ + return PLD_BUS_WIDTH_NONE; +} + #define GET_CUR_RX_LVL(config) 0 #define GET_BW_COMPUTE_INTV(config) 0 diff --git a/core/hdd/src/wlan_hdd_stats.c b/core/hdd/src/wlan_hdd_stats.c index 051d644061..84e7ca905f 100644 --- a/core/hdd/src/wlan_hdd_stats.c +++ b/core/hdd/src/wlan_hdd_stats.c @@ -5818,12 +5818,13 @@ void wlan_hdd_display_txrx_stats(struct hdd_context *ctx) i, stats->rx_packets[i], stats->rx_dropped[i], stats->rx_delivered[i], stats->rx_refused[i]); } - hdd_debug("RX - packets %u, dropped %u, unsolict_arp_n_mcast_drp %u, delivered %u, refused %u GRO - agg %u drop %u non-agg %u disabled(conc %u low-tput %u)", + hdd_debug("RX - packets %u, dropped %u, unsolict_arp_n_mcast_drp %u, delivered %u, refused %u GRO - agg %u drop %u non-agg %u flush-skip %u disabled(conc %u low-tput %u)", total_rx_pkt, total_rx_dropped, qdf_atomic_read(&stats->rx_usolict_arp_n_mcast_drp), total_rx_delv, total_rx_refused, stats->rx_aggregated, stats->rx_gro_dropped, stats->rx_non_aggregated, + stats->rx_gro_flush_skip, qdf_atomic_read(&ctx->disable_rx_ol_in_concurrency), qdf_atomic_read(&ctx->disable_rx_ol_in_low_tput)); } diff --git a/core/hdd/src/wlan_hdd_tx_rx.c b/core/hdd/src/wlan_hdd_tx_rx.c index 32123fc409..a9bfc74dbb 100644 --- a/core/hdd/src/wlan_hdd_tx_rx.c +++ b/core/hdd/src/wlan_hdd_tx_rx.c @@ -1580,7 +1580,6 @@ QDF_STATUS hdd_gro_rx_dp_thread(struct hdd_adapter *adapter, { struct napi_struct *napi_to_use = NULL; QDF_STATUS status = QDF_STATUS_E_FAILURE; - struct hdd_context *hdd_ctx = adapter->hdd_ctx; if (!adapter->hdd_ctx->enable_dp_rx_threads) { hdd_dp_err_rl("gro not supported without DP RX thread!"); @@ -1596,9 +1595,6 @@ QDF_STATUS hdd_gro_rx_dp_thread(struct hdd_adapter *adapter, return status; } - if (qdf_atomic_read(&hdd_ctx->disable_rx_ol_in_low_tput)) - return status; - status = hdd_gro_rx_bh_disable(adapter, napi_to_use, skb); return status; @@ -1893,10 +1889,19 @@ static inline void hdd_tsf_timestamp_rx(struct hdd_context *hdd_ctx, QDF_STATUS hdd_rx_thread_gro_flush_ind_cbk(void *adapter, int rx_ctx_id) { - if (qdf_unlikely(!adapter)) { + struct hdd_adapter *hdd_adapter = adapter; + + if (qdf_unlikely((!hdd_adapter) || (!hdd_adapter->hdd_ctx))) { hdd_err("Null params being passed"); return QDF_STATUS_E_FAILURE; } + + if (hdd_get_current_throughput_level(hdd_adapter->hdd_ctx) == + PLD_BUS_WIDTH_LOW) { + hdd_adapter->hdd_stats.tx_rx_stats.rx_gro_flush_skip++; + return QDF_STATUS_SUCCESS; + } + return dp_rx_gro_flush_ind(cds_get_context(QDF_MODULE_ID_SOC), rx_ctx_id); } diff --git a/core/hdd/src/wlan_hdd_wext.c b/core/hdd/src/wlan_hdd_wext.c index 5ce9ce4f86..5eaf0c6eee 100644 --- a/core/hdd/src/wlan_hdd_wext.c +++ b/core/hdd/src/wlan_hdd_wext.c @@ -3115,7 +3115,7 @@ void hdd_wlan_get_stats(struct hdd_adapter *adapter, uint16_t *length, "\n[classified] BK %u, BE %u, VI %u, VO %u" "\n\nReceive[%lu] - " "packets %u, dropped %u, unsolict_arp_n_mcast_drp %u, delivered %u, refused %u\n" - "GRO - agg %u non-agg %u disabled(conc %u low-tput %u)\n", + "GRO - agg %u non-agg %u flush-skip %u disabled(conc %u low-tput %u)\n", qdf_system_ticks(), stats->tx_called, stats->tx_dropped, @@ -3134,6 +3134,7 @@ void hdd_wlan_get_stats(struct hdd_adapter *adapter, uint16_t *length, total_rx_delv, total_rx_refused, stats->rx_aggregated, stats->rx_non_aggregated, + stats->rx_gro_flush_skip, qdf_atomic_read(&hdd_ctx->disable_rx_ol_in_concurrency), qdf_atomic_read(&hdd_ctx->disable_rx_ol_in_low_tput));