summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManjunathappa Prakash <prakashpm@codeaurora.org>2017-01-23 02:20:10 -0800
committerqcabuildsw <qcabuildsw@localhost>2017-01-23 20:04:30 -0800
commit1ba1537bfc18daa5b5eb199f860cdee13d109f15 (patch)
tree6f18b713653aa50e70a2c1a3d02b4d684b9f021f
parent2a8e44e8b5f210e471670f0d5ec4e398092847bb (diff)
qcacld-3.0: Disable TCP delayed ack if LRO is enabled
Coexistence of TCP delayed ack and LRO could be detrimental with a smaller window size. So disable TCP delayed ack dynamically if LRO is enabled. Change-Id: I0660e78269da548bc3a5ad0ed6b8f3865046b8b4 CRs-Fixed: 1114687
-rw-r--r--core/hdd/src/wlan_hdd_lro.c19
-rw-r--r--core/hdd/src/wlan_hdd_main.c7
2 files changed, 23 insertions, 3 deletions
diff --git a/core/hdd/src/wlan_hdd_lro.c b/core/hdd/src/wlan_hdd_lro.c
index c71ee2860196..57b1c16fac51 100644
--- a/core/hdd/src/wlan_hdd_lro.c
+++ b/core/hdd/src/wlan_hdd_lro.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015-2016 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2017 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -536,6 +536,11 @@ int hdd_lro_enable(hdd_context_t *hdd_ctx, hdd_adapter_t *adapter)
ol_register_lro_flush_cb(hdd_lro_flush, hdd_init_lro_mgr);
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_info("LRO Enabled");
return 0;
@@ -662,6 +667,11 @@ void hdd_lro_display_stats(hdd_context_t *hdd_ctx)
*/
void hdd_enable_lro_in_concurrency(hdd_context_t *hdd_ctx)
{
+ if (hdd_ctx->config->enable_tcp_delack) {
+ hdd_info("Disable TCP delack as LRO is enabled");
+ hdd_ctx->config->enable_tcp_delack = 0;
+ hdd_reset_tcp_delack(hdd_ctx);
+ }
qdf_atomic_set(&hdd_ctx->disable_lro_in_concurrency, 0);
}
@@ -673,5 +683,12 @@ void hdd_enable_lro_in_concurrency(hdd_context_t *hdd_ctx)
*/
void hdd_disable_lro_in_concurrency(hdd_context_t *hdd_ctx)
{
+ if (!hdd_ctx->config->enable_tcp_delack) {
+ hdd_info("Enable TCP delack as LRO disabled in concurrency");
+ wlan_hdd_send_svc_nlink_msg(hdd_ctx->radio_index,
+ WLAN_SVC_WLAN_TP_IND, &hdd_ctx->cur_rx_level,
+ sizeof(hdd_ctx->cur_rx_level));
+ hdd_ctx->config->enable_tcp_delack = 1;
+ }
qdf_atomic_set(&hdd_ctx->disable_lro_in_concurrency, 1);
}
diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c
index 57a2a03a1c25..ca24d456f70a 100644
--- a/core/hdd/src/wlan_hdd_main.c
+++ b/core/hdd/src/wlan_hdd_main.c
@@ -7926,8 +7926,11 @@ int hdd_configure_cds(hdd_context_t *hdd_ctx, hdd_adapter_t *adapter)
goto hdd_features_deinit;
}
- dp_cbacks.hdd_en_lro_in_cc_cb = hdd_enable_lro_in_concurrency;
- dp_cbacks.hdd_disble_lro_in_cc_cb = hdd_disable_lro_in_concurrency;
+ if (hdd_ctx->config->lro_enable) {
+ dp_cbacks.hdd_en_lro_in_cc_cb = hdd_enable_lro_in_concurrency;
+ dp_cbacks.hdd_disble_lro_in_cc_cb =
+ hdd_disable_lro_in_concurrency;
+ }
dp_cbacks.ol_txrx_update_mac_id_cb = ol_txrx_update_mac_id;
if (cds_register_dp_cb(&dp_cbacks) != QDF_STATUS_SUCCESS)
hdd_err("Unable to register datapath callbacks in CDS");