On Fri, 16 Jun 2023 10:34:02 -0700, Umesh Nerlige Ramappa wrote: > > For reports that are not powers of 2, reports at the end of the OA > buffer may get split across the buffer boundary. When zeroing out such > reports, take the split into consideration. > > v2: Use OA_BUFFER_SIZE (Ashutosh) > > Fixes: 09a36015d9a0 ("drm/i915/perf: Clear out entire reports after reading > if not power of 2 size") > Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.rama...@intel.com> > --- > drivers/gpu/drm/i915/i915_perf.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/i915_perf.c > b/drivers/gpu/drm/i915/i915_perf.c > index b5491a382bfd..66ab6e1d5c7b 100644 > --- a/drivers/gpu/drm/i915/i915_perf.c > +++ b/drivers/gpu/drm/i915/i915_perf.c > @@ -867,8 +867,17 @@ static int gen8_append_oa_reports(struct > i915_perf_stream *stream, > oa_report_id_clear(stream, report32); > oa_timestamp_clear(stream, report32); > } else { > + u8 *oa_buf_end = stream->oa_buffer.vaddr + > + OA_BUFFER_SIZE;
Above we already have "u8 *oa_buf_base = stream->oa_buffer.vaddr;" so we could just use that? > + u32 part = oa_buf_end - (u8 *)report32; We also have "u8 *report". In any case: Reviewed-by: Ashutosh Dixit <ashutosh.di...@intel.com> > + > /* Zero out the entire report */ > - memset(report32, 0, report_size); > + if (report_size <= part) { > + memset(report32, 0, report_size); > + } else { > + memset(report32, 0, part); > + memset(oa_buf_base, 0, report_size - part); > + } > } > } > > -- > 2.36.1 >