intel/aub_write: write header in init
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>
Sun, 26 Aug 2018 23:19:29 +0000 (00:19 +0100)
committerLionel Landwerlin <lionel.g.landwerlin@intel.com>
Thu, 7 Mar 2019 15:08:31 +0000 (15:08 +0000)
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Rafael Antognolli <rafael.antognolli@intel.com>
src/intel/tools/aub_write.c
src/intel/tools/aub_write.h
src/intel/tools/error2aub.c
src/intel/tools/intel_dump_gpu.c

index fa5c302bf70fc2c23ed554bde9cce6a41dd9f249..2c121d91b53917bb393a862d15f8e7de428c95a8 100644 (file)
@@ -114,11 +114,86 @@ aub_ppgtt_table_finish(struct aub_ppgtt_table *table, int level)
    }
 }
 
+
+static void
+data_out(struct aub_file *aub, const void *data, size_t size)
+{
+   if (size == 0)
+      return;
+
+   fail_if(fwrite(data, 1, size, aub->file) == 0,
+           "Writing to output failed\n");
+}
+
+static void
+dword_out(struct aub_file *aub, uint32_t data)
+{
+   data_out(aub, &data, sizeof(data));
+}
+
+static void
+write_execlists_header(struct aub_file *aub, const char *name)
+{
+   char app_name[8 * 4];
+   int app_name_len, dwords;
+
+   app_name_len =
+      snprintf(app_name, sizeof(app_name), "PCI-ID=0x%X %s",
+               aub->pci_id, name);
+   app_name_len = ALIGN(app_name_len, sizeof(uint32_t));
+
+   dwords = 5 + app_name_len / sizeof(uint32_t);
+   dword_out(aub, CMD_MEM_TRACE_VERSION | (dwords - 1));
+   dword_out(aub, AUB_MEM_TRACE_VERSION_FILE_VERSION);
+   dword_out(aub, aub->devinfo.simulator_id << AUB_MEM_TRACE_VERSION_DEVICE_SHIFT);
+   dword_out(aub, 0);      /* version */
+   dword_out(aub, 0);      /* version */
+   data_out(aub, app_name, app_name_len);
+}
+
+static void
+write_legacy_header(struct aub_file *aub, const char *name)
+{
+   char app_name[8 * 4];
+   char comment[16];
+   int comment_len, comment_dwords, dwords;
+
+   comment_len = snprintf(comment, sizeof(comment), "PCI-ID=0x%x", aub->pci_id);
+   comment_dwords = ((comment_len + 3) / 4);
+
+   /* Start with a (required) version packet. */
+   dwords = 13 + comment_dwords;
+   dword_out(aub, CMD_AUB_HEADER | (dwords - 2));
+   dword_out(aub, (4 << AUB_HEADER_MAJOR_SHIFT) |
+                  (0 << AUB_HEADER_MINOR_SHIFT));
+
+   /* Next comes a 32-byte application name. */
+   strncpy(app_name, name, sizeof(app_name));
+   app_name[sizeof(app_name) - 1] = 0;
+   data_out(aub, app_name, sizeof(app_name));
+
+   dword_out(aub, 0); /* timestamp */
+   dword_out(aub, 0); /* timestamp */
+   dword_out(aub, comment_len);
+   data_out(aub, comment, comment_dwords * 4);
+}
+
+
+static void
+aub_write_header(struct aub_file *aub, const char *app_name)
+{
+   if (aub_use_execlists(aub))
+      write_execlists_header(aub, app_name);
+   else
+      write_legacy_header(aub, app_name);
+}
+
 void
-aub_file_init(struct aub_file *aub, FILE *file, uint16_t pci_id)
+aub_file_init(struct aub_file *aub, FILE *file, FILE *debug, uint16_t pci_id, const char *app_name)
 {
    memset(aub, 0, sizeof(*aub));
 
+   aub->verbose_log_file = debug;
    aub->file = file;
    aub->pci_id = pci_id;
    fail_if(!gen_get_device_info(pci_id, &aub->devinfo),
@@ -126,6 +201,8 @@ aub_file_init(struct aub_file *aub, FILE *file, uint16_t pci_id)
    aub->addr_bits = aub->devinfo.gen >= 8 ? 48 : 32;
 
    aub->pml4.phys_addr = PML4_PHYS_ADDR;
+
+   aub_write_header(aub, app_name);
 }
 
 void
@@ -141,22 +218,6 @@ aub_gtt_size(struct aub_file *aub)
    return NUM_PT_ENTRIES * (aub->addr_bits > 32 ? GEN8_PTE_SIZE : PTE_SIZE);
 }
 
-static void
-data_out(struct aub_file *aub, const void *data, size_t size)
-{
-   if (size == 0)
-      return;
-
-   fail_if(fwrite(data, 1, size, aub->file) == 0,
-           "Writing to output failed\n");
-}
-
-static void
-dword_out(struct aub_file *aub, uint32_t data)
-{
-   data_out(aub, &data, sizeof(data));
-}
-
 static void
 mem_trace_memory_write_header_out(struct aub_file *aub, uint64_t addr,
                                   uint32_t len, uint32_t addr_space,
@@ -306,63 +367,6 @@ ppgtt_lookup(struct aub_file *aub, uint64_t ppgtt_addr)
    return (uint64_t)L1_table(ppgtt_addr)->subtables[L1_index(ppgtt_addr)];
 }
 
-static void
-write_execlists_header(struct aub_file *aub, const char *name)
-{
-   char app_name[8 * 4];
-   int app_name_len, dwords;
-
-   app_name_len =
-      snprintf(app_name, sizeof(app_name), "PCI-ID=0x%X %s",
-               aub->pci_id, name);
-   app_name_len = ALIGN(app_name_len, sizeof(uint32_t));
-
-   dwords = 5 + app_name_len / sizeof(uint32_t);
-   dword_out(aub, CMD_MEM_TRACE_VERSION | (dwords - 1));
-   dword_out(aub, AUB_MEM_TRACE_VERSION_FILE_VERSION);
-   dword_out(aub, aub->devinfo.simulator_id << AUB_MEM_TRACE_VERSION_DEVICE_SHIFT);
-   dword_out(aub, 0);      /* version */
-   dword_out(aub, 0);      /* version */
-   data_out(aub, app_name, app_name_len);
-}
-
-static void
-write_legacy_header(struct aub_file *aub, const char *name)
-{
-   char app_name[8 * 4];
-   char comment[16];
-   int comment_len, comment_dwords, dwords;
-
-   comment_len = snprintf(comment, sizeof(comment), "PCI-ID=0x%x", aub->pci_id);
-   comment_dwords = ((comment_len + 3) / 4);
-
-   /* Start with a (required) version packet. */
-   dwords = 13 + comment_dwords;
-   dword_out(aub, CMD_AUB_HEADER | (dwords - 2));
-   dword_out(aub, (4 << AUB_HEADER_MAJOR_SHIFT) |
-                  (0 << AUB_HEADER_MINOR_SHIFT));
-
-   /* Next comes a 32-byte application name. */
-   strncpy(app_name, name, sizeof(app_name));
-   app_name[sizeof(app_name) - 1] = 0;
-   data_out(aub, app_name, sizeof(app_name));
-
-   dword_out(aub, 0); /* timestamp */
-   dword_out(aub, 0); /* timestamp */
-   dword_out(aub, comment_len);
-   data_out(aub, comment, comment_dwords * 4);
-}
-
-
-void
-aub_write_header(struct aub_file *aub, const char *app_name)
-{
-   if (aub_use_execlists(aub))
-      write_execlists_header(aub, app_name);
-   else
-      write_legacy_header(aub, app_name);
-}
-
 static void
 write_execlists_default_setup(struct aub_file *aub)
 {
index 53bd14c75a05a6257d472242e76c4b0bb43a7d8a..2597234c1c761094debf75ccbb8ef3057dbe462f 100644 (file)
@@ -54,7 +54,7 @@ struct aub_file {
    struct aub_ppgtt_table pml4;
 };
 
-void aub_file_init(struct aub_file *aub, FILE *file, uint16_t pci_id);
+void aub_file_init(struct aub_file *aub, FILE *file, FILE *debug, uint16_t pci_id, const char *app_name);
 void aub_file_finish(struct aub_file *aub);
 
 static inline bool aub_use_execlists(const struct aub_file *aub)
@@ -74,7 +74,6 @@ aub_write_reloc(const struct gen_device_info *devinfo, void *p, uint64_t v)
    }
 }
 
-void aub_write_header(struct aub_file *aub, const char *app_name);
 void aub_write_default_setup(struct aub_file *aub);
 void aub_map_ppgtt(struct aub_file *aub, uint64_t start, uint64_t size);
 void aub_write_trace_block(struct aub_file *aub,
index e0eca2778e7c2bcecb9edc6f27485978eeffd352..fff36085fefcb2aeac14a75c5c95468bc0bcc0a4 100644 (file)
@@ -218,11 +218,11 @@ main(int argc, char *argv[])
          int matched = sscanf(line, "PCI ID: 0x%04x\n", &pci_id);
          fail_if(!matched, "Invalid error state file!\n");
 
-         aub_file_init(&aub, aub_file, pci_id);
+         aub_file_init(&aub, aub_file,
+                       NULL, pci_id, "error_state");
          fail_if(!aub_use_execlists(&aub),
                  "%s currently only works on gen8+\n", argv[0]);
 
-         aub_write_header(&aub, "error state");
          aub_write_default_setup(&aub);
          continue;
       }
index 937b4f568a0e309a4f407c301c3b00cb2737874f..3dd1ff689994a7aebc2a3721e17c9c8e9b32f31d 100644 (file)
@@ -208,10 +208,9 @@ dump_execbuffer2(int fd, struct drm_i915_gem_execbuffer2 *execbuffer2)
       fail_if(!gen_get_device_info(device, &devinfo),
               "failed to identify chipset=0x%x\n", device);
 
-      aub_file_init(&aub_file, output_file, device);
-      if (verbose == 2)
-         aub_file.verbose_log_file = stdout;
-      aub_write_header(&aub_file, program_invocation_short_name);
+      aub_file_init(&aub_file, output_file,
+                    verbose == 2 ? stdout : NULL,
+                    device, program_invocation_short_name);
       aub_write_default_setup(&aub_file);
 
       if (verbose)