Ver código fonte

qcacld-3.0: Derive tsf_sync_qtime in hdd_get_tsftime_from_qtime

Derive tsf_sync_qtime in hdd_get_tsftime_from_qtime as it takes
necessary locks to read TSF parameters.

Change-Id: Ie866de1acd02ce6bd723828071bfb54b9e337517
CRs-Fixed: 3298476
Vishal Miskin 2 anos atrás
pai
commit
be5f412f41
1 arquivos alterados com 10 adições e 13 exclusões
  1. 10 13
      core/hdd/src/wlan_hdd_tsf.c

+ 10 - 13
core/hdd/src/wlan_hdd_tsf.c

@@ -1178,7 +1178,6 @@ static inline int32_t hdd_get_soctime_from_tsf64time(
  *
  * @adapter: Adapter pointer
  * @qtime: current qtime, us
- * @tsf_sync_qtime: qtime of the tsf, us
  * @tsf_time: current tsf time(qtime), us
  *
  * This function determines current tsf time
@@ -1188,10 +1187,10 @@ static inline int32_t hdd_get_soctime_from_tsf64time(
  */
 static inline int32_t
 hdd_get_tsftime_from_qtime(struct hdd_adapter *adapter, uint64_t qtime,
-			   uint64_t tsf_sync_qtime, uint64_t *tsf_time)
+			   uint64_t *tsf_time)
 {
 	int32_t ret = -EINVAL;
-	uint64_t delta64_tsf64time;
+	uint64_t delta64_tsf64time, tsf_sync_qtime;
 	bool in_cap_state;
 
 	in_cap_state = hdd_tsf_is_in_cap(adapter);
@@ -1203,6 +1202,9 @@ hdd_get_tsftime_from_qtime(struct hdd_adapter *adapter, uint64_t qtime,
 	if (in_cap_state)
 		qdf_spin_lock_bh(&adapter->host_target_sync_lock);
 
+	tsf_sync_qtime = adapter->last_tsf_sync_soc_time;
+	tsf_sync_qtime = qdf_do_div(tsf_sync_qtime, NSEC_PER_USEC);
+
 	if (qtime > tsf_sync_qtime) {
 		delta64_tsf64time = qtime - tsf_sync_qtime;
 		ret = hdd_uint64_plus(adapter->last_target_time,
@@ -1223,7 +1225,7 @@ QDF_STATUS hdd_get_tsf_time(void *adapter_ctx, uint64_t input_time,
 			    uint64_t *tsf_time)
 {
 	struct hdd_adapter *adapter;
-	uint64_t tsf_sync_qtime, qtime;
+	uint64_t qtime;
 
 	/* Sanity check on inputs */
 	if (unlikely((!adapter_ctx) || (!input_time))) {
@@ -1238,11 +1240,8 @@ QDF_STATUS hdd_get_tsf_time(void *adapter_ctx, uint64_t input_time,
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	tsf_sync_qtime = adapter->last_tsf_sync_soc_time;
-	tsf_sync_qtime = qdf_do_div(tsf_sync_qtime, NSEC_PER_USEC);
-
 	qtime = qdf_log_timestamp_to_usecs(input_time);
-	hdd_get_tsftime_from_qtime(adapter, qtime, tsf_sync_qtime, tsf_time);
+	hdd_get_tsftime_from_qtime(adapter, qtime, tsf_time);
 	return QDF_STATUS_SUCCESS;
 }
 
@@ -1470,16 +1469,14 @@ static ssize_t __hdd_wlan_tsf_show(struct device *dev,
 	if (!hdd_ctx)
 		return scnprintf(buf, PAGE_SIZE, "Invalid HDD context\n");
 
-	tsf_sync_qtime = adapter->last_tsf_sync_soc_time;
-	do_div(tsf_sync_qtime, NSEC_PER_USEC);
-
 	reg_qtime = qdf_get_log_timestamp();
 	host_time = hdd_get_monotonic_host_time(hdd_ctx);
 
 	qtime = qdf_log_timestamp_to_usecs(reg_qtime);
 	do_div(host_time, NSEC_PER_USEC);
-	hdd_get_tsftime_from_qtime(adapter, qtime, tsf_sync_qtime,
-				   &target_time);
+	hdd_get_tsftime_from_qtime(adapter, qtime, &target_time);
+	tsf_sync_qtime = adapter->last_tsf_sync_soc_time;
+	do_div(tsf_sync_qtime, NSEC_PER_USEC);
 
 	if (adapter->device_mode == QDF_STA_MODE ||
 	    adapter->device_mode == QDF_P2P_CLIENT_MODE) {