From 8b44e453478ac28fb93db18941f887ca691a54ea Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Fri, 19 Feb 2021 22:10:33 +0200 Subject: [PATCH] intel/perf: fix roll over PERF_CNT counter accumulation MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Lionel Landwerlin Fixes: 5ba6d9941b5dda ("intel/perf: add mdapi writes for register perf counters") Reviewed-by: Marcin Ślusarz Part-of: --- src/intel/perf/gen_perf.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/intel/perf/gen_perf.c b/src/intel/perf/gen_perf.c index 23a5465..795aa88 100644 --- a/src/intel/perf/gen_perf.c +++ b/src/intel/perf/gen_perf.c @@ -1144,8 +1144,12 @@ gen_perf_query_result_read_perfcnts(struct gen_perf_query_result *result, const uint64_t *end) { for (uint32_t i = 0; i < 2; i++) { - result->accumulator[query->perfcnt_offset + i] = - (end[i] & PERF_CNT_VALUE_MASK) - (start[i] & PERF_CNT_VALUE_MASK); + uint64_t v0 = start[i] & PERF_CNT_VALUE_MASK; + uint64_t v1 = end[i] & PERF_CNT_VALUE_MASK; + + result->accumulator[query->perfcnt_offset + i] = v0 > v1 ? + (PERF_CNT_VALUE_MASK + 1 + v1 - v0) : + (v1 - v0); } } -- 2.7.4