Эх сурвалжийг харах

qcacld-3.0: Redesign wma_get_stats_rsp_buf() buffer length logic

Currently wma_get_stats_rsp_buf() uses a loop to determine which mask
bits are set, and based upon the loop iteration count it determines
the size of the associated buffer. This calculation is fragile,
however, in that it tightly couples the loop iteration count and
eCsrRoamStatsClassTypes enumeration values. Since code under
development will be removing some of the eCsrRoamStatsClassTypes
enumerations, update this logic to remove the tight coupling.

Change-Id: Ia6cda4c8181c44d25a9da27acffe6bd10ca3b4ed
CRs-Fixed: 2020056
Jeff Johnson 8 жил өмнө
parent
commit
dfd360e0fa
1 өөрчлөгдсөн 21 нэмэгдсэн , 33 устгасан
  1. 21 33
      core/wma/src/wma_utils.c

+ 21 - 33
core/wma/src/wma_utils.c

@@ -2255,51 +2255,39 @@ static tAniGetPEStatsRsp *wma_get_stats_rsp_buf
 			(tAniGetPEStatsReq *get_stats_param)
 {
 	tAniGetPEStatsRsp *stats_rsp_params;
-	uint32_t len, temp_mask, counter = 0;
+	uint32_t len, temp_mask;
 
 	len = sizeof(tAniGetPEStatsRsp);
 	temp_mask = get_stats_param->statsMask;
 
-	while (temp_mask) {
-		if (temp_mask & 1) {
-			switch (counter) {
-			case eCsrSummaryStats:
-				len += sizeof(tCsrSummaryStatsInfo);
-				break;
-			case eCsrGlobalClassAStats:
-				len += sizeof(tCsrGlobalClassAStatsInfo);
-				break;
-			case eCsrGlobalClassBStats:
-				len += sizeof(tCsrGlobalClassBStatsInfo);
-				break;
-			case eCsrGlobalClassCStats:
-				len += sizeof(tCsrGlobalClassCStatsInfo);
-				break;
-			case eCsrGlobalClassDStats:
-				len += sizeof(tCsrGlobalClassDStatsInfo);
-				break;
-			case eCsrPerStaStats:
-				len += sizeof(tCsrPerStaStatsInfo);
-				break;
-			case csr_per_chain_rssi_stats:
-				len +=
-				   sizeof(struct csr_per_chain_rssi_stats_info);
-				break;
-			}
-		}
+	if (temp_mask & (1 << eCsrSummaryStats))
+		len += sizeof(tCsrSummaryStatsInfo);
 
-		counter++;
-		temp_mask >>= 1;
-	}
+	if (temp_mask & (1 << eCsrGlobalClassAStats))
+		len += sizeof(tCsrGlobalClassAStatsInfo);
+
+	if (temp_mask & (1 << eCsrGlobalClassBStats))
+		len += sizeof(tCsrGlobalClassBStatsInfo);
+
+	if (temp_mask & (1 << eCsrGlobalClassCStats))
+		len += sizeof(tCsrGlobalClassCStatsInfo);
+
+	if (temp_mask & (1 << eCsrGlobalClassDStats))
+		len += sizeof(tCsrGlobalClassDStatsInfo);
+
+	if (temp_mask & (1 << eCsrPerStaStats))
+		len += sizeof(tCsrPerStaStatsInfo);
+
+	if (temp_mask & (1 << csr_per_chain_rssi_stats))
+		len += sizeof(struct csr_per_chain_rssi_stats_info);
 
-	stats_rsp_params = (tAniGetPEStatsRsp *) qdf_mem_malloc(len);
+	stats_rsp_params = qdf_mem_malloc(len);
 	if (!stats_rsp_params) {
 		WMA_LOGE("memory allocation failed for tAniGetPEStatsRsp");
 		QDF_ASSERT(0);
 		return NULL;
 	}
 
-	qdf_mem_zero(stats_rsp_params, len);
 	stats_rsp_params->staId = get_stats_param->staId;
 	stats_rsp_params->statsMask = get_stats_param->statsMask;
 	stats_rsp_params->msgType = WMA_GET_STATISTICS_RSP;