summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManjunathappa Prakash <prakashpm@codeaurora.org>2018-01-15 17:54:10 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2018-01-22 14:54:29 -0800
commit4d88dd75eb58a7bbdaa23f0ddf40b1844825c121 (patch)
tree835329bb3864d7268ba9553fa412aad7c03a2d97
parentd41153e3b9c09c561040e9f34502aeef445e18ec (diff)
qcacld-3.0: Disable TCP delack if GRO is enabled
Takecare to disable TCP delack internally if GRO is enabled. This is required as enabling both will have adverse effect with smaller window size and noisy scenario. Change-Id: If91236620d87287c9b71901e9d8e3d176eebc648 CRs-Fixed: 2172652
-rw-r--r--core/hdd/inc/wlan_hdd_main.h1
-rw-r--r--core/hdd/src/wlan_hdd_lro.c11
-rw-r--r--core/hdd/src/wlan_hdd_main.c4
-rw-r--r--core/hdd/src/wlan_hdd_tx_rx.c10
4 files changed, 13 insertions, 13 deletions
diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h
index 74351bf9f763..f36186282471 100644
--- a/core/hdd/inc/wlan_hdd_main.h
+++ b/core/hdd/inc/wlan_hdd_main.h
@@ -2079,6 +2079,7 @@ struct hdd_context_s {
bool hbw_requested;
uint32_t last_nil_scan_bug_report_timestamp;
uint32_t ol_enable;
+ uint32_t tcp_delack_on;
#ifdef WLAN_FEATURE_NAN_DATAPATH
bool nan_datapath_enabled;
#endif
diff --git a/core/hdd/src/wlan_hdd_lro.c b/core/hdd/src/wlan_hdd_lro.c
index 81dde75398ee..0f095ec34263 100644
--- a/core/hdd/src/wlan_hdd_lro.c
+++ b/core/hdd/src/wlan_hdd_lro.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2018 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -498,11 +498,6 @@ int hdd_lro_enable(hdd_context_t *hdd_ctx, hdd_adapter_t *adapter)
adapter->dev->features |= NETIF_F_LRO;
- if (hdd_ctx->config->enable_tcp_delack) {
- hdd_ctx->config->enable_tcp_delack = 0;
- hdd_reset_tcp_delack(hdd_ctx);
- }
-
hdd_debug("LRO Enabled");
return 0;
@@ -670,7 +665,7 @@ hdd_lro_set_reset(hdd_context_t *hdd_ctx, hdd_adapter_t *adapter,
adapter->dev->features &= ~NETIF_F_LRO;
hdd_debug("LRO Disabled");
- if (!hdd_ctx->config->enable_tcp_delack) {
+ if (hdd_ctx->config->enable_tcp_delack) {
struct wlan_rx_tp_data rx_tp_data;
hdd_debug("Enable TCP delack as LRO is disabled.");
@@ -679,7 +674,7 @@ hdd_lro_set_reset(hdd_context_t *hdd_ctx, hdd_adapter_t *adapter,
wlan_hdd_send_svc_nlink_msg(hdd_ctx->radio_index,
WLAN_SVC_WLAN_TP_IND, &rx_tp_data,
sizeof(rx_tp_data));
- hdd_ctx->config->enable_tcp_delack = 1;
+ hdd_ctx->tcp_delack_on = 1;
}
}
return 0;
diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c
index 907d2ed3e583..f0d0aafc944a 100644
--- a/core/hdd/src/wlan_hdd_main.c
+++ b/core/hdd/src/wlan_hdd_main.c
@@ -6764,7 +6764,7 @@ static void hdd_pld_request_bus_bandwidth(hdd_context_t *hdd_ctx,
* to default delayed ack. Note that this will disable the
* dynamic delayed ack mechanism across the system
*/
- if (hdd_ctx->config->enable_tcp_delack)
+ if (hdd_ctx->tcp_delack_on)
rx_tp_data.rx_tp_flags |= TCP_DEL_ACK_IND;
if (hdd_ctx->config->enable_tcp_adv_win_scale)
@@ -7050,7 +7050,7 @@ void wlan_hdd_display_tx_rx_histogram(hdd_context_t *hdd_ctx)
hdd_ctx->config->busBandwidthMediumThreshold,
hdd_ctx->config->busBandwidthLowThreshold);
hdd_debug("Enable TCP DEL ACK: %d",
- hdd_ctx->config->enable_tcp_delack);
+ hdd_ctx->tcp_delack_on);
hdd_debug("TCP DEL High TH: %d TCP DEL Low TH: %d",
hdd_ctx->config->tcpDelackThresholdHigh,
hdd_ctx->config->tcpDelackThresholdLow);
diff --git a/core/hdd/src/wlan_hdd_tx_rx.c b/core/hdd/src/wlan_hdd_tx_rx.c
index 93e2fad23b7b..d4094c3f1d93 100644
--- a/core/hdd/src/wlan_hdd_tx_rx.c
+++ b/core/hdd/src/wlan_hdd_tx_rx.c
@@ -1613,6 +1613,8 @@ static inline void hdd_register_rx_ol(void)
return;
}
+ hdd_ctx->tcp_delack_on = 0;
+
if (hdd_ctx->ol_enable == CFG_LRO_ENABLED) {
hdd_ctx->receive_offload_cb = hdd_lro_rx;
/* Register the flush callback */
@@ -1623,6 +1625,8 @@ static inline void hdd_register_rx_ol(void)
if (hdd_ctx->enableRxThread)
hdd_create_napi_for_rxthread();
hdd_debug("GRO is enabled");
+ } else if (hdd_ctx->config->enable_tcp_delack) {
+ hdd_ctx->tcp_delack_on = 1;
}
}
@@ -1719,7 +1723,7 @@ void hdd_enable_rx_ol_in_concurrency(hdd_context_t *hdd_ctx)
{
if (hdd_ctx->config->enable_tcp_delack) {
hdd_debug("Disable TCP delack as Rx Offload is enabled");
- hdd_ctx->config->enable_tcp_delack = 0;
+ hdd_ctx->tcp_delack_on = 0;
hdd_reset_tcp_delack(hdd_ctx);
}
qdf_atomic_set(&hdd_ctx->disable_lro_in_concurrency, 0);
@@ -1733,7 +1737,7 @@ void hdd_enable_rx_ol_in_concurrency(hdd_context_t *hdd_ctx)
*/
void hdd_disable_rx_ol_in_concurrency(hdd_context_t *hdd_ctx)
{
- if (!hdd_ctx->config->enable_tcp_delack) {
+ if (hdd_ctx->config->enable_tcp_delack) {
struct wlan_rx_tp_data rx_tp_data = {0};
hdd_debug("Enable TCP delack as Rx offload disabled in concurrency");
@@ -1741,7 +1745,7 @@ void hdd_disable_rx_ol_in_concurrency(hdd_context_t *hdd_ctx)
rx_tp_data.level = hdd_ctx->cur_rx_level;
wlan_hdd_send_svc_nlink_msg(hdd_ctx->radio_index,
WLAN_SVC_WLAN_TP_IND, &rx_tp_data, sizeof(rx_tp_data));
- hdd_ctx->config->enable_tcp_delack = 1;
+ hdd_ctx->tcp_delack_on = 1;
}
qdf_atomic_set(&hdd_ctx->disable_lro_in_concurrency, 1);
}