[igt-dev] [PATCH i-g-t] tools/i915-perf-recorder: fix topology alignment issue

Chris Wilson chris at chris-wilson.co.uk
Wed Apr 1 11:53:33 UTC 2020


Quoting Lionel Landwerlin (2020-04-01 12:19:37)
> On 01/04/2020 14:15, Chris Wilson wrote:
> > Quoting Lionel Landwerlin (2020-04-01 11:36:06)
> >> The additional alignment added when writing into the output was not
> >> accounted in the header. This is preventing reading the recorded data.
> >>
> >> Instead of adding the alignment when writing, just account for it when
> >> querying the topology.
> >>
> >> Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
> >> Fixes: f08865e58cd3 ("tools: add i915 perf recorder tool")
> >> ---
> >>   tools/i915-perf/i915_perf_recorder.c | 10 ++--------
> >>   1 file changed, 2 insertions(+), 8 deletions(-)
> >>
> >> diff --git a/tools/i915-perf/i915_perf_recorder.c b/tools/i915-perf/i915_perf_recorder.c
> >> index 4d729b0e..104a425b 100644
> >> --- a/tools/i915-perf/i915_perf_recorder.c
> >> +++ b/tools/i915-perf/i915_perf_recorder.c
> >> @@ -485,8 +485,8 @@ get_topology(int drm_fd, uint32_t *topology_size)
> >>                  return NULL;
> >>   
> >>          assert(item.length > 0);
> >> -       *topology_size = item.length;
> >> -       topo_info = malloc(item.length);
> >> +       *topology_size = ALIGN(item.length, 8);
> >> +       topo_info = malloc(*topology_size);
> >>          item.data_ptr = (uintptr_t) topo_info;
> > As I understand the problem statement, when we used the length the
> > kernel told us to use, the kernel rejected the query?
> >
> > Could you clarify as that sounds like a kernel bug.
> > -Chris
> 
> We get the result of the query from the kernel and write it to the file.
> 
> To keep structures in the file aligned to 8 bytes (so that we can mmap 
> stuff and it doesn't fall on weird alignments), the topology data size 
> has to be aligned as well.
> 
> 
> The problem is that we align the data when writing it to the file, but 
> fail to update the header.size field properly written just before the 
> topology data.

Gotcha, you're talking about the returned *topology_size not matching
what was fwritten to the pipe.

Ok, one problem I see here is that you are passing around uninitialised
bytes (for some value of problem).
-Chris


More information about the igt-dev mailing list