From d4bb049e98a6bba37bfcef59dc9abc7d97cc2206 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Tue, 3 Dec 2019 16:19:24 +0200 Subject: [PATCH] intel/perf: take into account that reports read can be fairly old If we read the OA reports late enough after the query happens, we can get a timestamp in the report that is significantly in the past compared to the start timestamp of the query. The current code must deal with the wraparound of the timestamp value (every ~6 minute). So consider that if the difference is greater than half that wraparound period, we're probably dealing with an old report and make the caller aware it should read more reports when they're available. Signed-off-by: Lionel Landwerlin Cc: Reviewed-by: Mark Janes Reviewed-by: Kenneth Graunke (cherry picked from commit b364e920bf8c6805bcc3ff1cedf6b77dbb61b1e0) --- src/intel/perf/gen_perf.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/intel/perf/gen_perf.c b/src/intel/perf/gen_perf.c index 5f5e9a59267..7e6c42c9511 100644 --- a/src/intel/perf/gen_perf.c +++ b/src/intel/perf/gen_perf.c @@ -1854,12 +1854,13 @@ read_oa_samples_until(struct gen_perf_context *perf_ctx, exec_list_push_tail(&perf_ctx->free_sample_buffers, &buf->link); if (len < 0) { - if (errno == EAGAIN) - return ((last_timestamp - start_timestamp) >= + if (errno == EAGAIN) { + return ((last_timestamp - start_timestamp) < INT32_MAX && + (last_timestamp - start_timestamp) >= (end_timestamp - start_timestamp)) ? OA_READ_STATUS_FINISHED : OA_READ_STATUS_UNFINISHED; - else { + } else { DBG("Error reading i915 perf samples: %m\n"); } } else