瀏覽代碼

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 年之前
父節點
當前提交
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;