diff --git a/src/intel/perf/gen_perf.c b/src/intel/perf/gen_perf.c index 23a5465e195..795aa88bf89 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); } }