[PATCH] drm/i915/perf: Clear out entire reports after reading if not power of 2 size

Lionel Landwerlin lionel.g.landwerlin at intel.com
Tue May 23 14:31:47 UTC 2023


On 22/05/2023 23:17, Ashutosh Dixit wrote:
> Clearing out report id and timestamp as means to detect unlanded reports
> only works if report size is power of 2. That is, only when report size is
> a sub-multiple of the OA buffer size can we be certain that reports will
> land at the same place each time in the OA buffer (after rewind). If report
> size is not a power of 2, we need to zero out the entire report to be able
> to detect unlanded reports reliably.
>
> Cc: Umesh Nerlige Ramappa <umesh.nerlige.ramappa at intel.com>
> Signed-off-by: Ashutosh Dixit <ashutosh.dixit at intel.com>

Sad but necessary unfortunately....


Reviewed-by:  Lionel Landwerlin <lionel.g.landwerlin at intel.com>


> ---
>   drivers/gpu/drm/i915/i915_perf.c | 17 +++++++++++------
>   1 file changed, 11 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_perf.c b/drivers/gpu/drm/i915/i915_perf.c
> index 19d5652300eeb..58284156428dc 100644
> --- a/drivers/gpu/drm/i915/i915_perf.c
> +++ b/drivers/gpu/drm/i915/i915_perf.c
> @@ -877,12 +877,17 @@ static int gen8_append_oa_reports(struct i915_perf_stream *stream,
>   			stream->oa_buffer.last_ctx_id = ctx_id;
>   		}
>   
> -		/*
> -		 * Clear out the report id and timestamp as a means to detect unlanded
> -		 * reports.
> -		 */
> -		oa_report_id_clear(stream, report32);
> -		oa_timestamp_clear(stream, report32);
> +		if (is_power_of_2(report_size)) {
> +			/*
> +			 * Clear out the report id and timestamp as a means
> +			 * to detect unlanded reports.
> +			 */
> +			oa_report_id_clear(stream, report32);
> +			oa_timestamp_clear(stream, report32);
> +		} else {
> +			/* Zero out the entire report */
> +			memset(report32, 0, report_size);
> +		}
>   	}
>   
>   	if (start_offset != *offset) {




More information about the dri-devel mailing list