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
This commit is contained in:
@@ -103,6 +103,7 @@
|
|||||||
#include "wlan_hdd_twt.h"
|
#include "wlan_hdd_twt.h"
|
||||||
#include "wma_sar_public_structs.h"
|
#include "wma_sar_public_structs.h"
|
||||||
#include "wlan_mlme_ucfg_api.h"
|
#include "wlan_mlme_ucfg_api.h"
|
||||||
|
#include "pld_common.h"
|
||||||
|
|
||||||
#ifdef WLAN_FEATURE_DP_BUS_BANDWIDTH
|
#ifdef WLAN_FEATURE_DP_BUS_BANDWIDTH
|
||||||
#include "qdf_periodic_work.h"
|
#include "qdf_periodic_work.h"
|
||||||
@@ -451,6 +452,7 @@ struct hdd_tx_rx_stats {
|
|||||||
__u32 rx_aggregated;
|
__u32 rx_aggregated;
|
||||||
__u32 rx_gro_dropped;
|
__u32 rx_gro_dropped;
|
||||||
__u32 rx_non_aggregated;
|
__u32 rx_non_aggregated;
|
||||||
|
__u32 rx_gro_flush_skip;
|
||||||
|
|
||||||
/* txflow stats */
|
/* txflow stats */
|
||||||
bool is_txflow_paused;
|
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);
|
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_CUR_RX_LVL(config) ((config)->cur_rx_level)
|
||||||
#define GET_BW_COMPUTE_INTV(config) ((config)->bus_bw_compute_interval)
|
#define GET_BW_COMPUTE_INTV(config) ((config)->bus_bw_compute_interval)
|
||||||
#else
|
#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_CUR_RX_LVL(config) 0
|
||||||
#define GET_BW_COMPUTE_INTV(config) 0
|
#define GET_BW_COMPUTE_INTV(config) 0
|
||||||
|
|
||||||
|
@@ -5818,12 +5818,13 @@ void wlan_hdd_display_txrx_stats(struct hdd_context *ctx)
|
|||||||
i, stats->rx_packets[i], stats->rx_dropped[i],
|
i, stats->rx_packets[i], stats->rx_dropped[i],
|
||||||
stats->rx_delivered[i], stats->rx_refused[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,
|
total_rx_pkt, total_rx_dropped,
|
||||||
qdf_atomic_read(&stats->rx_usolict_arp_n_mcast_drp),
|
qdf_atomic_read(&stats->rx_usolict_arp_n_mcast_drp),
|
||||||
total_rx_delv,
|
total_rx_delv,
|
||||||
total_rx_refused, stats->rx_aggregated,
|
total_rx_refused, stats->rx_aggregated,
|
||||||
stats->rx_gro_dropped, stats->rx_non_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_concurrency),
|
||||||
qdf_atomic_read(&ctx->disable_rx_ol_in_low_tput));
|
qdf_atomic_read(&ctx->disable_rx_ol_in_low_tput));
|
||||||
}
|
}
|
||||||
|
@@ -1580,7 +1580,6 @@ QDF_STATUS hdd_gro_rx_dp_thread(struct hdd_adapter *adapter,
|
|||||||
{
|
{
|
||||||
struct napi_struct *napi_to_use = NULL;
|
struct napi_struct *napi_to_use = NULL;
|
||||||
QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
||||||
struct hdd_context *hdd_ctx = adapter->hdd_ctx;
|
|
||||||
|
|
||||||
if (!adapter->hdd_ctx->enable_dp_rx_threads) {
|
if (!adapter->hdd_ctx->enable_dp_rx_threads) {
|
||||||
hdd_dp_err_rl("gro not supported without DP RX thread!");
|
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;
|
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);
|
status = hdd_gro_rx_bh_disable(adapter, napi_to_use, skb);
|
||||||
|
|
||||||
return status;
|
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)
|
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");
|
hdd_err("Null params being passed");
|
||||||
return QDF_STATUS_E_FAILURE;
|
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),
|
return dp_rx_gro_flush_ind(cds_get_context(QDF_MODULE_ID_SOC),
|
||||||
rx_ctx_id);
|
rx_ctx_id);
|
||||||
}
|
}
|
||||||
|
@@ -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[classified] BK %u, BE %u, VI %u, VO %u"
|
||||||
"\n\nReceive[%lu] - "
|
"\n\nReceive[%lu] - "
|
||||||
"packets %u, dropped %u, unsolict_arp_n_mcast_drp %u, delivered %u, refused %u\n"
|
"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(),
|
qdf_system_ticks(),
|
||||||
stats->tx_called,
|
stats->tx_called,
|
||||||
stats->tx_dropped,
|
stats->tx_dropped,
|
||||||
@@ -3134,6 +3134,7 @@ void hdd_wlan_get_stats(struct hdd_adapter *adapter, uint16_t *length,
|
|||||||
total_rx_delv,
|
total_rx_delv,
|
||||||
total_rx_refused,
|
total_rx_refused,
|
||||||
stats->rx_aggregated, stats->rx_non_aggregated,
|
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_concurrency),
|
||||||
qdf_atomic_read(&hdd_ctx->disable_rx_ol_in_low_tput));
|
qdf_atomic_read(&hdd_ctx->disable_rx_ol_in_low_tput));
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user