<div dir="ltr"><div><div>> Gen8+ have 64 bit GTT entries, so we need to allocate twice as much<br>> space for the GTT table in order to cover the same number of GTT<br>> pages.  Fixes sporadic page-fault crashes on the simulator.<br>> ---<br>>  tools/aubdump.c | 21 ++++++++++++++++-----<br>>  1 file changed, 16 insertions(+), 5 deletions(-)<br>> <br>> diff --git a/tools/aubdump.c b/tools/aubdump.c<br>> index 30dc742..d0774c1 100644<br>> --- a/tools/aubdump.c<br>> +++ b/tools/aubdump.c<br>> @@ -54,7 +54,6 @@ static char *filename;<br>>  static FILE *file;<br>>  static int gen = 0;<br>>  static int verbose = 0;<br>> -static const uint32_t gtt_size = 0x10000;<br>>  static bool device_override;<br>>  static uint32_t device;<br>>  <br>> @@ -149,9 +148,18 @@ data_out(const void *data, size_t size)<br>>      fwrite(data, 1, size, file);<br>>  }<br>>  <br>> +static uint32_t<br>> +gtt_size(void)<br>> +{<br>> +    /* Enough for 64MB assuming 4kB pages. */<br><br></div><div>This disagrees with a (obviously wrong) comment further down that says we allow 256 MB.<br></div><div><br>> +    const unsigned entries = 0x4000;<br>> +    return entries * (gen >= 8 ? 8 : 4);<br>> +}<br>> +<br>>  static void<br>>  write_header(void)<br>>  {<br>> +    const unsigned gtt_entry_size = gen >= 8 ? 8 : 4;<br><br></div>It might be a good idea to make this a helper instead of repeating it here and above.<br><br></div>Other than those two comments, it looks good to me.  Sadly, I can't say I know the aub format well enough to give it a full r-b. :-(<br><div><div><br>>      uint32_t entry = 0x200003;<br>>  <br>>      /* Start with a (required) version packet. */<br>> @@ -171,11 +179,14 @@ write_header(void)<br>>            AUB_TRACE_TYPE_NOTYPE | AUB_TRACE_OP_DATA_WRITE);<br>>      dword_out(0); /* subtype */<br>>      dword_out(0); /* offset */<br>> -    dword_out(gtt_size); /* size */<br>> +    dword_out(gtt_size()); /* size */<br>>      if (gen >= 8)<br>>          dword_out(0);<br>> -    for (uint32_t i = 0; i < gtt_size; i += 4, entry += 0x1000)<br>> -        dword_out(entry);<br>> +    for (uint32_t i = 0; i * gtt_entry_size < gtt_size(); i++) {<br>> +        dword_out(entry + 0x1000 * i);<br>> +        if (gen >= 8)<br>> +            dword_out(0);<br>> +    }<br>>  }<br>>  <br>>  /**<br>> @@ -332,7 +343,7 @@ dump_execbuffer2(int fd, struct drm_i915_gem_execbuffer2 *execbuffer2)<br>>      struct drm_i915_gem_exec_object2 *exec_objects =<br>>          (struct drm_i915_gem_exec_object2 *) (uintptr_t) execbuffer2->buffers_ptr;<br>>      uint32_t ring_flag = execbuffer2->flags & I915_EXEC_RING_MASK;<br>> -    uint32_t offset = gtt_size;<br>> +    uint32_t offset = gtt_size();<br>>      struct drm_i915_gem_exec_object2 *obj;<br>>      struct bo *bo, *batch_bo;<br>>      void *data;<br>> -- <br>> 2.10.1<br><br></div></div></div>