Browse Source

qcacld-3.0: Avoid rssi overwrite for big data stats

Currently for big data stats, driver stores correct rssi
value in cache_conn_info. But since vdev is in disconnected
state and unified_ll_stats_get_sta command is queried periodically
for every 3 seconds, firmware will now return 0 as a new rssi value.
The correct rssi value which is stored in cache_conn_info now
gets overwritten in hdd_lost_link_cp_stats_info_cb.

To avoid this issue, do not overwrite the rssi value for
big data stats if the rssi value returned by firmware is 0.

Change-Id: Iee0dba113d6ed684c00230a2714744191bcd0f7f
CRs-Fixed: 3248245
Aditya Kodukula 2 years ago
parent
commit
c4efabebb6
1 changed files with 14 additions and 4 deletions
  1. 14 4
      core/hdd/src/wlan_hdd_stats.c

+ 14 - 4
core/hdd/src/wlan_hdd_stats.c

@@ -1771,6 +1771,11 @@ void hdd_lost_link_info_cb(hdd_handle_t hdd_handle,
 		return;
 	}
 
+	if (lost_link_info->rssi == 0) {
+		hdd_debug_rl("Invalid rssi on disconnect sent by FW");
+		return;
+	}
+
 	adapter->rssi_on_disconnect = lost_link_info->rssi;
 	hdd_debug("rssi on disconnect %d", adapter->rssi_on_disconnect);
 
@@ -7486,6 +7491,7 @@ static void hdd_lost_link_cp_stats_info_cb(void *stats_ev)
 	struct hdd_adapter *adapter;
 	struct stats_event *ev = stats_ev;
 	uint8_t i;
+	int8_t rssi;
 	struct hdd_station_ctx *sta_ctx;
 
 	if (wlan_hdd_validate_context(hdd_ctx))
@@ -7499,16 +7505,20 @@ static void hdd_lost_link_cp_stats_info_cb(void *stats_ev)
 			hdd_debug("invalid adapter");
 			continue;
 		}
-		adapter->rssi_on_disconnect =
-					ev->vdev_summary_stats[i].stats.rssi;
+
+		rssi = ev->vdev_summary_stats[i].stats.rssi;
+		if (rssi == 0) {
+			hdd_debug_rl("Invalid RSSI value sent by FW");
+			return;
+		}
+		adapter->rssi_on_disconnect = rssi;
 		hdd_debug("rssi %d for " QDF_MAC_ADDR_FMT,
 			  adapter->rssi_on_disconnect,
 			  QDF_MAC_ADDR_REF(adapter->mac_addr.bytes));
 
 		sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
 		if (sta_ctx)
-			sta_ctx->cache_conn_info.signal =
-					ev->vdev_summary_stats[i].stats.rssi;
+			sta_ctx->cache_conn_info.signal = rssi;
 	}
 }