mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-12 15:49:17 -04:00
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
This commit is contained in:
parent
97fdfd0e1b
commit
dfd360e0fa
1 changed files with 21 additions and 33 deletions
|
|
@ -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);
|
||||
|
||||
stats_rsp_params = (tAniGetPEStatsRsp *) qdf_mem_malloc(len);
|
||||
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 = 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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue