From d6a34db72dcae4bb089db122a88471386eca843f Mon Sep 17 00:00:00 2001 From: Zhang Qian Date: Thu, 15 Dec 2016 11:12:23 +0800 Subject: qcacld-2.0: Fix array length bug for MAC counters Each AC has four arrays for TX stats (MPDUs with same aggregation size, Acked PPDUs with same encoding rate, Unacked PPDUs with same encoding rate, PPDU with same TX delay time) and two arrays for RX stats (MPDU with same aggregation size, PPDUs with encoding rate). Data type for terms in all the arrays is uint32 not uint8. Array length in WMI event's fix_param for each array is number of terms. So size of the array should be multiplied by sizeof(uint32). Change-Id: Ie23c643bc6c71e01fd7b3d39bd2a047f0c152c8a CRs-fixed: 1101826 --- CORE/SERVICES/WMA/wma.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index f20e3e6b7b69..4acc943955ca 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -5343,13 +5343,17 @@ static void __wma_fill_tx_stats(struct sir_wifi_ll_ext_stats *ll_stats, ac = &tx_stats[k]; WMA_FILL_TX_STATS(wmi_tx_stats, ac); ac->mpdu_aggr_size = tx_mpdu_aggr; - ac->aggr_len = tx_mpdu_aggr_array_len; - ac->success_mcs_len = tx_succ_mcs_array_len; + ac->aggr_len = tx_mpdu_aggr_array_len * + sizeof(uint32_t); + ac->success_mcs_len = tx_succ_mcs_array_len * + sizeof(uint32_t); ac->success_mcs = tx_succ_mcs; ac->fail_mcs = tx_fail_mcs; - ac->fail_mcs_len = tx_fail_mcs_array_len; + ac->fail_mcs_len = tx_fail_mcs_array_len * + sizeof(uint32_t); ac->delay = tx_delay; - ac->delay_len = tx_delay_array_len; + ac->delay_len = tx_delay_array_len * + sizeof(uint32_t); peer_stats->ac_stats[k].tx_stats = ac; peer_stats->ac_stats[k].type = k; tx_mpdu_aggr += tx_mpdu_aggr_array_len; @@ -5455,9 +5459,11 @@ static void __wma_fill_rx_stats(struct sir_wifi_ll_ext_stats *ll_stats, ac = &rx_stats[k]; WMA_FILL_RX_STATS(wmi_rx_stats, ac); ac->mpdu_aggr = rx_mpdu_aggr; - ac->aggr_len = rx_mpdu_aggr_array_len; + ac->aggr_len = rx_mpdu_aggr_array_len * + sizeof(uint32_t); ac->mcs = rx_mcs; - ac->mcs_len = rx_mcs_array_len; + ac->mcs_len = rx_mcs_array_len * + sizeof(uint32_t); peer_stats->ac_stats[k].rx_stats = ac; peer_stats->ac_stats[k].type = k; rx_mpdu_aggr += rx_mpdu_aggr_array_len; -- cgit v1.2.3