Jelajahi Sumber

qcacld-3.0: Fix BTM response ordering in connectivity logs

Currently for WTC BTM roam trigger, below order is followed:
[22:22:51.127105][BTM] RESP token=1 status=1 delay=0 [vdev_id=0
fw_time=00:53:58.350672]
[22:22:51.127129][BTM] WTC reason_code=6 [vdev_id=0
fw_time=00:53:58.350672]

But expected order is:
[22:22:51.127129][BTM] WTC reason_code=6 [vdev_id=0
fw_time=00:53:58.350672]
[22:22:51.127105][BTM] RESP token=1 status=1 delay=0 [vdev_id=0
fw_time=00:53:58.350672]

Fix this order issue and also ignore the BTM response TLV if
timestamp is 0.

Change-Id: I21fe268a3e3ea065482c1c2938d03b844cd387ea
CRs-Fixed: 3143297
Pragaspathi Thilagaraj 3 tahun lalu
induk
melakukan
f1dd1a7be4

+ 4 - 3
components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c

@@ -5723,6 +5723,10 @@ cm_roam_btm_resp_event(struct wmi_roam_trigger_info *trigger_info,
 			return QDF_STATUS_E_FAILURE;
 		}
 
+		if (btm_data->vsie_reason)
+			cm_roam_wtc_btm_event(trigger_info, btm_data,
+					      vdev_id, is_wtc);
+
 		log_record = qdf_mem_malloc(sizeof(*log_record));
 		if (!log_record)
 			return QDF_STATUS_E_NOMEM;
@@ -5743,9 +5747,6 @@ cm_roam_btm_resp_event(struct wmi_roam_trigger_info *trigger_info,
 		status = wlan_connectivity_log_enqueue(log_record);
 		qdf_mem_free(log_record);
 
-		if (btm_data->vsie_reason)
-			cm_roam_wtc_btm_event(trigger_info, btm_data,
-					      vdev_id, is_wtc);
 	}
 
 	return status;

+ 11 - 5
components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c

@@ -3223,11 +3223,6 @@ cm_roam_stats_event_handler(struct wlan_objmgr_psoc *psoc,
 			cm_roam_btm_req_event(
 				&stats_info->trigger[0].btm_trig_data,
 				stats_info->vdev_id);
-		else if (stats_info->trigger[0].present &&
-			 stats_info->trigger[0].trigger_reason ==
-			 ROAM_TRIGGER_REASON_WTC_BTM)
-			cm_roam_btm_resp_event(&stats_info->trigger[0], NULL,
-					       stats_info->vdev_id, true);
 
 		if (stats_info->data_11kv[0].present)
 			cm_roam_stats_print_11kv_info(&stats_info->data_11kv[0],
@@ -3245,6 +3240,17 @@ cm_roam_stats_event_handler(struct wlan_objmgr_psoc *psoc,
 					&stats_info->trigger[i],
 					&stats_info->btm_rsp[0],
 					stats_info->vdev_id, 0);
+
+		/*
+		 * WTC BTM response with reason code
+		 * WTC print should be after the normal BTM
+		 * response print
+		 */
+		if (stats_info->trigger[0].present &&
+		    stats_info->trigger[0].trigger_reason ==
+		    ROAM_TRIGGER_REASON_WTC_BTM)
+			cm_roam_btm_resp_event(&stats_info->trigger[0], NULL,
+					       stats_info->vdev_id, true);
 	}
 	if (stats_info->roam_msg_info && stats_info->num_roam_msg_info &&
 	    stats_info->num_roam_msg_info - rem_tlv) {

+ 2 - 0
components/wmi/src/wmi_unified_roam_tlv.c

@@ -1620,6 +1620,8 @@ extract_roam_btm_response_stats_tlv(wmi_unified_t wmi_handle, void *evt_buf,
 	}
 
 	src_data = &param_buf->roam_btm_response_info[idx];
+	if (!src_data->timestamp)
+		return QDF_STATUS_SUCCESS;
 
 	dst->present = true;
 	dst->btm_status = src_data->btm_status;