Message ID | 20230616173402.699776-1-umesh.nerlige.ramappa@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/i915/perf: Consider OA buffer boundary when zeroing out reports | expand |
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.ramappa@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.dixit@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 >
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; + u32 part = oa_buf_end - (u8 *)report32; + /* 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); + } } }
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.ramappa@intel.com> --- drivers/gpu/drm/i915/i915_perf.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)