[Mesa-dev] [PATCH 2/2] intel/aubinator_error_decode: Allow for more sections
Lionel Landwerlin
lionel.g.landwerlin at intel.com
Mon Jul 9 23:34:10 UTC 2018
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
On 10/07/18 00:01, Jason Ekstrand wrote:
> Error states coming from actual Vulkan applications tend to have fairly
> long command buffers and lots of chained batches. 30 total BOs isn't
> nearly enough. This commit bumps it to 256, makes some things use the
> actual number of sections instead of the #define, and adds asserts if we
> ever go over 256 sections.
> ---
> src/intel/tools/aubinator_error_decode.c | 24 +++++++++++++-----------
> 1 file changed, 13 insertions(+), 11 deletions(-)
>
> diff --git a/src/intel/tools/aubinator_error_decode.c b/src/intel/tools/aubinator_error_decode.c
> index 2735bd72714..4e3359bba9f 100644
> --- a/src/intel/tools/aubinator_error_decode.c
> +++ b/src/intel/tools/aubinator_error_decode.c
> @@ -295,7 +295,8 @@ struct section {
> int count;
> };
>
> -#define MAX_SECTIONS 30
> +#define MAX_SECTIONS 256
> +static unsigned num_sections;
> static struct section sections[MAX_SECTIONS];
>
> static int zlib_inflate(uint32_t **ptr, int len)
> @@ -386,7 +387,7 @@ static int ascii85_decode(const char *in, uint32_t **out, bool inflate)
> static struct gen_batch_decode_bo
> get_gen_batch_bo(void *user_data, uint64_t address)
> {
> - for (int s = 0; s < MAX_SECTIONS; s++) {
> + for (int s = 0; s < num_sections; s++) {
> if (sections[s].gtt_offset <= address &&
> address < sections[s].gtt_offset + sections[s].count * 4) {
> return (struct gen_batch_decode_bo) {
> @@ -411,7 +412,6 @@ read_data_file(FILE *file)
> uint32_t offset, value;
> char *ring_name = NULL;
> struct gen_device_info devinfo;
> - int sect_num = 0;
>
> while (getline(&line, &line_size, file) > 0) {
> char *new_ring_name = NULL;
> @@ -429,9 +429,10 @@ read_data_file(FILE *file)
> fprintf(stderr, "ASCII85 decode failed.\n");
> exit(EXIT_FAILURE);
> }
> - sections[sect_num].data = data;
> - sections[sect_num].count = count;
> - sect_num++;
> + assert(num_sections < MAX_SECTIONS);
> + sections[num_sections].data = data;
> + sections[num_sections].count = count;
> + num_sections++;
> continue;
> }
>
> @@ -465,13 +466,14 @@ read_data_file(FILE *file)
> break;
> }
>
> - sections[sect_num].buffer_name = b->name;
> - sections[sect_num].ring_name = strdup(ring_name);
> + assert(num_sections < MAX_SECTIONS);
> + sections[num_sections].buffer_name = b->name;
> + sections[num_sections].ring_name = strdup(ring_name);
>
> uint32_t hi, lo;
> dashes = strchr(dashes, '=');
> if (dashes && sscanf(dashes, "= 0x%08x %08x\n", &hi, &lo))
> - sections[sect_num].gtt_offset = ((uint64_t) hi) << 32 | lo;
> + sections[num_sections].gtt_offset = ((uint64_t) hi) << 32 | lo;
>
> continue;
> }
> @@ -598,7 +600,7 @@ read_data_file(FILE *file)
> xml_path, get_gen_batch_bo, NULL, NULL);
>
>
> - for (int s = 0; s < sect_num; s++) {
> + for (int s = 0; s < num_sections; s++) {
> printf("--- %s (%s) at 0x%08x %08x\n",
> sections[s].buffer_name, sections[s].ring_name,
> (unsigned) (sections[s].gtt_offset >> 32),
> @@ -615,7 +617,7 @@ read_data_file(FILE *file)
>
> gen_batch_decode_ctx_finish(&batch_ctx);
>
> - for (int s = 0; s < sect_num; s++) {
> + for (int s = 0; s < num_sections; s++) {
> free(sections[s].ring_name);
> free(sections[s].data);
> }
More information about the mesa-dev
mailing list