[igt-dev] [PATCH i-g-t 01/23] i915/perf: Check regularly if we are done reading reports

Lionel Landwerlin lionel.g.landwerlin at intel.com
Tue Sep 6 12:49:08 UTC 2022


On 23/08/2022 21:30, Umesh Nerlige Ramappa wrote:
> If we pass a user buffer as large as the OA buffer, the OA unit will
> return all available reports. In the second part of the
> buffer-fill/enable-disable tests, we are collecting all reports within a
> time window, but we only check the time window in the outer while loop.
> We may have read well past that window if OA returns more reports. Fix
> this rare failure by checking for the window within the inner for loop.
>
> Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa at intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
> ---
>   tests/i915/perf.c | 10 ++++++++++
>   1 file changed, 10 insertions(+)
>
> diff --git a/tests/i915/perf.c b/tests/i915/perf.c
> index 5502a3fb..51e2dc87 100644
> --- a/tests/i915/perf.c
> +++ b/tests/i915/perf.c
> @@ -2522,6 +2522,9 @@ test_buffer_fill(void)
>   						first_timestamp = report[1];
>   					last_timestamp = report[1];
>   
> +					if (((last_timestamp - first_timestamp) * oa_period) < (fill_duration / 2))
> +						break;
> +
>   					if (oa_report_is_periodic(oa_exponent, report)) {
>   						memcpy(last_periodic_report, report,
>   						       sizeof(last_periodic_report));
> @@ -2537,6 +2540,8 @@ test_buffer_fill(void)
>   
>   		do_ioctl(stream_fd, I915_PERF_IOCTL_DISABLE, 0);
>   
> +		igt_debug("first ts = %u, last ts = %u\n", first_timestamp, last_timestamp);
> +
>   		igt_debug("%f < %zu < %f\n",
>   			  report_size * n_full_oa_reports * 0.45,
>   			  n_periodic_reports * report_size,
> @@ -2732,6 +2737,9 @@ test_enable_disable(void)
>   						  oa_report_is_periodic(oa_exponent, report),
>   						  oa_report_get_ctx_id(report));
>   
> +					if (((last_timestamp - first_timestamp) * oa_period) < (fill_duration / 2))
> +						break;
> +
>   					if (oa_report_is_periodic(oa_exponent, report)) {
>   						memcpy(last_periodic_report, report,
>   						       sizeof(last_periodic_report));
> @@ -2755,6 +2763,8 @@ test_enable_disable(void)
>   
>   		do_ioctl(stream_fd, I915_PERF_IOCTL_DISABLE, 0);
>   
> +		igt_debug("first ts = %u, last ts = %u\n", first_timestamp, last_timestamp);
> +
>   		igt_debug("%f < %zu < %f\n",
>   			  report_size * n_full_oa_reports * 0.45,
>   			  n_periodic_reports * report_size,




More information about the igt-dev mailing list