summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNitesh Shah <niteshs@codeaurora.org>2016-12-28 17:16:58 +0530
committerqcabuildsw <qcabuildsw@localhost>2017-01-21 11:38:28 -0800
commit99d0da912625f3452fd33cceba65765edd213251 (patch)
tree3250d5cc35047b542e97f97ca90e8e355c2ef03b
parent42e1ae781d69e4e4d191c0f7cd8d53ef658de4fd (diff)
qcacld-3.0: Avoid continuous flush logs for TDLS mgmt TX failure
When the TDLS management frames are getting stucked in the TX path, then the TDLS mgmt TX failure logs get flooded in the kernel logs. Fix is to reduce the log level for flush logs to avoid getting in kernel logs. Also to stop flooding the logs for 5 minutes duration once the instance occurs. Change-Id: I823f843e2fc2f21974c94c986345713ccd2b653e CRs-Fixed: 1105925
-rw-r--r--core/hdd/inc/wlan_hdd_tdls.h5
-rw-r--r--core/hdd/src/wlan_hdd_tdls.c28
-rw-r--r--core/hdd/src/wlan_hdd_trace.c6
3 files changed, 31 insertions, 8 deletions
diff --git a/core/hdd/inc/wlan_hdd_tdls.h b/core/hdd/inc/wlan_hdd_tdls.h
index 01ca3e54533e..fd498fd96bf3 100644
--- a/core/hdd/inc/wlan_hdd_tdls.h
+++ b/core/hdd/inc/wlan_hdd_tdls.h
@@ -88,6 +88,9 @@ typedef enum {
#define TDLS_CT_MAC_MAX_TABLE_SIZE 8
+/* Define the interval for 5 minutes */
+#define TDLS_ENABLE_CDS_FLUSH_INTERVAL 300000000
+
/**
* enum tdls_disable_source - TDLS disable sources
* @HDD_SET_TDLS_MODE_SOURCE_USER: disable from user
@@ -368,6 +371,7 @@ struct tdls_set_state_info {
* @ap_rssi: ap rssi
* @curr_candidate: current candidate
* @magic: magic
+ * @last_flush_ts: last timestamp when flush logs was displayed.
*
*/
typedef struct {
@@ -381,6 +385,7 @@ typedef struct {
int8_t ap_rssi;
struct _hddTdlsPeer_t *curr_candidate;
uint32_t magic;
+ uint64_t last_flush_ts;
} tdlsCtx_t;
/**
diff --git a/core/hdd/src/wlan_hdd_tdls.c b/core/hdd/src/wlan_hdd_tdls.c
index f3e4d03e30cd..adaf0a013ab3 100644
--- a/core/hdd/src/wlan_hdd_tdls.c
+++ b/core/hdd/src/wlan_hdd_tdls.c
@@ -773,6 +773,7 @@ int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter)
pHddTdlsCtx->curr_candidate = NULL;
pHddTdlsCtx->magic = 0;
pHddCtx->valid_mac_entries = 0;
+ pHddTdlsCtx->last_flush_ts = 0;
/* remember configuration even if it is not used right now. it could be used later */
pHddTdlsCtx->threshold_config.tx_period_t =
@@ -3966,6 +3967,7 @@ static int __wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy,
hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev);
hdd_context_t *pHddCtx = wiphy_priv(wiphy);
hdd_station_ctx_t *hdd_sta_ctx;
+ tdlsCtx_t *hdd_tdls_ctx;
u8 peerMac[QDF_MAC_ADDR_SIZE];
QDF_STATUS status;
int max_sta_failed = 0;
@@ -4206,11 +4208,27 @@ static int __wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy,
cds_get_driver_state());
return -EAGAIN;
}
- if (rc <= 0)
- cds_flush_logs(WLAN_LOG_TYPE_FATAL,
- WLAN_LOG_INDICATOR_HOST_DRIVER,
- WLAN_LOG_REASON_HDD_TIME_OUT,
- true, false);
+
+ mutex_lock(&pHddCtx->tdls_lock);
+ hdd_tdls_ctx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter);
+ if (hdd_tdls_ctx) {
+ if (rc <= 0 &&
+ (((qdf_get_monotonic_boottime() -
+ hdd_tdls_ctx->last_flush_ts) >
+ TDLS_ENABLE_CDS_FLUSH_INTERVAL)
+ || !(hdd_tdls_ctx->last_flush_ts))) {
+ hdd_tdls_ctx->last_flush_ts =
+ qdf_get_monotonic_boottime();
+ mutex_unlock(&pHddCtx->tdls_lock);
+ cds_flush_logs(WLAN_LOG_TYPE_FATAL,
+ WLAN_LOG_INDICATOR_HOST_DRIVER,
+ WLAN_LOG_REASON_HDD_TIME_OUT,
+ true, false);
+ } else
+ mutex_unlock(&pHddCtx->tdls_lock);
+ } else
+ mutex_unlock(&pHddCtx->tdls_lock);
+
pAdapter->mgmtTxCompletionStatus = false;
return -EINVAL;
}
diff --git a/core/hdd/src/wlan_hdd_trace.c b/core/hdd/src/wlan_hdd_trace.c
index 4490b71fe666..5955307a9b48 100644
--- a/core/hdd/src/wlan_hdd_trace.c
+++ b/core/hdd/src/wlan_hdd_trace.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014-2016 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014-2017 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -51,12 +51,12 @@ static void
hdd_trace_dump(void *mac, tp_qdf_trace_record record, uint16_t index)
{
if (TRACE_CODE_HDD_RX_SME_MSG == record->code)
- hdd_err("%04d %012llu %s S%d %-14s %-30s(0x%x)",
+ hdd_info("%04d %012llu %s S%d %-14s %-30s(0x%x)",
index, record->qtime, record->time, record->session,
"RX SME MSG:",
get_e_roam_cmd_status_str(record->data), record->data);
else
- hdd_err("%04d %012llu %s S%d %-14s %-30s(0x%x)",
+ hdd_info("%04d %012llu %s S%d %-14s %-30s(0x%x)",
index, record->qtime, record->time, record->session,
"HDD Event:",
hdd_trace_event_string(record->code), record->data);