summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArunk Khandavalli <akhandav@codeaurora.org>2017-01-27 18:35:35 +0530
committerqcabuildsw <qcabuildsw@localhost>2017-02-23 07:41:44 -0800
commit9d12d493c1d9feb207afb1e4628fff46e6b615df (patch)
tree435fa85b0c8e23456f33addb504d0dec8d0302b6
parentccd8673d27b833c18e898621bccb679f38a528b6 (diff)
qcacld-3.0: Use wrapper to reset the log_completion variables
qcacld-2.0 to qcacld-3.0 propagation. Presently, cds_init_log_completion is used to reset the log_completion variables, which also initializes the spin_lock along with setting the log_completion variables to default. In case of SMP platforms, spin_lock would have been acquired on the different CPU and on the different CPU if the spin_lock is initialized again, it would change the magic of lock. So, the spin_lock acquired on CPU0 while releasing would result in error, since the magic content of the lock is changed by re-initializing without unlocking the spin_lock. use a wrapper function just to reset the log_completion variables to default. Change-Id: I2c6754b41d05707103f1c39248829ba6033bfc4f CRs-Fixed: 1101839
-rw-r--r--core/cds/src/cds_api.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c
index e2e538d823b2..df24b60a344f 100644
--- a/core/cds/src/cds_api.c
+++ b/core/cds/src/cds_api.c
@@ -1896,6 +1896,16 @@ uint8_t cds_is_multicast_logging(void)
return cds_multicast_logging;
}
+static void cds_reset_log_completion(p_cds_contextType p_cds_context)
+{
+ /* reset */
+ p_cds_context->log_complete.indicator = WLAN_LOG_INDICATOR_UNUSED;
+ p_cds_context->log_complete.is_fatal = WLAN_LOG_TYPE_NON_FATAL;
+ p_cds_context->log_complete.is_report_in_progress = false;
+ p_cds_context->log_complete.reason_code = WLAN_LOG_REASON_CODE_UNUSED;
+ p_cds_context->log_complete.recovery_needed = false;
+
+}
/*
* cds_init_log_completion() - Initialize log param structure
*
@@ -1919,9 +1929,6 @@ void cds_init_log_completion(void)
p_cds_context->log_complete.indicator = WLAN_LOG_INDICATOR_UNUSED;
p_cds_context->log_complete.reason_code = WLAN_LOG_REASON_CODE_UNUSED;
p_cds_context->log_complete.is_report_in_progress = false;
- /* Attempting to initialize an already initialized lock
- * results in a failure. This must be ok here.
- */
qdf_spinlock_create(&p_cds_context->bug_report_lock);
}
@@ -2013,14 +2020,9 @@ void cds_get_and_reset_log_completion(uint32_t *is_fatal,
*indicator = p_cds_context->log_complete.indicator;
*reason_code = p_cds_context->log_complete.reason_code;
*recovery_needed = p_cds_context->log_complete.recovery_needed;
-
- /* reset */
- p_cds_context->log_complete.indicator = WLAN_LOG_INDICATOR_UNUSED;
- p_cds_context->log_complete.is_fatal = WLAN_LOG_TYPE_NON_FATAL;
- p_cds_context->log_complete.is_report_in_progress = false;
- p_cds_context->log_complete.reason_code = WLAN_LOG_REASON_CODE_UNUSED;
- p_cds_context->log_complete.recovery_needed = false;
+ cds_reset_log_completion(p_cds_context);
qdf_spinlock_release(&p_cds_context->bug_report_lock);
+
}
/**
@@ -2181,7 +2183,7 @@ QDF_STATUS cds_flush_logs(uint32_t is_fatal,
if (0 != ret) {
QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR,
"%s: Failed to send flush FW log", __func__);
- cds_init_log_completion();
+ cds_reset_log_completion(p_cds_context);
return QDF_STATUS_E_FAILURE;
}