diff --git a/dp/wifi3.0/dp_hist.c b/dp/wifi3.0/dp_hist.c index 4645c9cf07..8311528306 100644 --- a/dp/wifi3.0/dp_hist.c +++ b/dp/wifi3.0/dp_hist.c @@ -160,8 +160,7 @@ void dp_hist_update_stats(struct cdp_hist_stats *hist_stats, int value) if (qdf_unlikely(!hist_stats->avg)) hist_stats->avg = value; else - hist_stats->avg = hist_stats->avg + - ((value - hist_stats->avg) >> HIST_AVG_WEIGHT_DENOM); + hist_stats->avg = (hist_stats->avg + value) / 2; } /* @@ -194,14 +193,26 @@ void dp_copy_hist_stats(struct cdp_hist_stats *src_hist_stats, void dp_accumulate_hist_stats(struct cdp_hist_stats *src_hist_stats, struct cdp_hist_stats *dst_hist_stats) { - uint8_t index; + uint8_t index, hist_stats_valid = 0; - for (index = 0; index < CDP_HIST_BUCKET_MAX; index++) + for (index = 0; index < CDP_HIST_BUCKET_MAX; index++) { dst_hist_stats->hist.freq[index] += src_hist_stats->hist.freq[index]; - dst_hist_stats->min = QDF_MIN(src_hist_stats->min, dst_hist_stats->min); - dst_hist_stats->max = QDF_MAX(src_hist_stats->max, dst_hist_stats->max); - dst_hist_stats->avg = (src_hist_stats->avg + dst_hist_stats->avg) >> 1; + if (src_hist_stats->hist.freq[index]) + hist_stats_valid = 1; + } + /* + * If at least one hist-bucket has non-zero count, + * proceed with the detailed calculation. + */ + if (hist_stats_valid) { + dst_hist_stats->min = QDF_MIN(src_hist_stats->min, + dst_hist_stats->min); + dst_hist_stats->max = QDF_MAX(src_hist_stats->max, + dst_hist_stats->max); + dst_hist_stats->avg = (src_hist_stats->avg + + dst_hist_stats->avg) >> 1; + } } /*