On Tue, Jun 19, 2018 at 02:45:17PM +0100, Lionel Landwerlin wrote: > Now that we rely on mmap of the data to parse, we can't process the > standard input anymore.
Didn't we rely on mmap of the data since forever? > This isn't much of a big deal because we have in-process batch decoder > (run with INTEL_DEBUG=batch) that supports essentially doing the same > thing. > > Signed-off-by: Lionel Landwerlin <lionel.g.landwer...@intel.com> > --- > src/intel/tools/aubinator.c | 102 +++++------------------------------- > 1 file changed, 12 insertions(+), 90 deletions(-) > > diff --git a/src/intel/tools/aubinator.c b/src/intel/tools/aubinator.c > index 949ba96e556..3f9047e69a8 100644 > --- a/src/intel/tools/aubinator.c > +++ b/src/intel/tools/aubinator.c > @@ -350,17 +350,6 @@ aub_file_open(const char *filename) > return file; > } > > -static struct aub_file * > -aub_file_stdin(void) > -{ > - struct aub_file *file; > - > - file = calloc(1, sizeof *file); > - file->stream = stdin; > - > - return file; > -} > - > #define TYPE(dw) (((dw) >> 29) & 7) > #define OPCODE(dw) (((dw) >> 23) & 0x3f) > #define SUBOPCODE(dw) (((dw) >> 16) & 0x7f) > @@ -398,8 +387,7 @@ aub_file_decode_batch(struct aub_file *file) > uint32_t *p, h, *new_cursor; > int header_length, bias; > > - if (file->end - file->cursor < 1) > - return AUB_ITEM_DECODE_NEED_MORE_DATA; > + assert(file->cursor < file->end); > > p = file->cursor; > h = *p; > @@ -421,13 +409,11 @@ aub_file_decode_batch(struct aub_file *file) > > new_cursor = p + header_length + bias; > if ((h & 0xffff0000) == MAKE_HEADER(TYPE_AUB, OPCODE_AUB, > SUBOPCODE_BLOCK)) { > - if (file->end - file->cursor < 4) > - return AUB_ITEM_DECODE_NEED_MORE_DATA; > + assert(file->end - file->cursor >= 4); > new_cursor += p[4] / 4; > } > > - if (new_cursor > file->end) > - return AUB_ITEM_DECODE_NEED_MORE_DATA; > + assert(new_cursor <= file->end); > > switch (h & 0xffff0000) { > case MAKE_HEADER(TYPE_AUB, OPCODE_AUB, SUBOPCODE_HEADER): > @@ -468,48 +454,6 @@ aub_file_more_stuff(struct aub_file *file) > return file->cursor < file->end || (file->stream && !feof(file->stream)); > } > > -#define AUB_READ_BUFFER_SIZE (4096) > -#define MAX(a, b) ((a) < (b) ? (b) : (a)) > - > -static void > -aub_file_data_grow(struct aub_file *file) > -{ > - size_t old_size = (file->mem_end - file->map) * 4; > - size_t new_size = MAX(old_size * 2, AUB_READ_BUFFER_SIZE); > - uint32_t *new_start = realloc(file->map, new_size); > - > - file->cursor = new_start + (file->cursor - file->map); > - file->end = new_start + (file->end - file->map); > - file->map = new_start; > - file->mem_end = file->map + (new_size / 4); > -} > - > -static bool > -aub_file_data_load(struct aub_file *file) > -{ > - size_t r; > - > - if (file->stream == NULL) > - return false; > - > - /* First remove any consumed data */ > - if (file->cursor > file->map) { > - memmove(file->map, file->cursor, > - (file->end - file->cursor) * 4); > - file->end -= file->cursor - file->map; > - file->cursor = file->map; > - } > - > - /* Then load some new data in */ > - if ((file->mem_end - file->end) < (AUB_READ_BUFFER_SIZE / 4)) > - aub_file_data_grow(file); > - > - r = fread(file->end, 1, (file->mem_end - file->end) * 4, file->stream); > - file->end += r / 4; > - > - return r != 0; > -} > - > static void > setup_pager(void) > { > @@ -541,9 +485,8 @@ static void > print_help(const char *progname, FILE *file) > { > fprintf(file, > - "Usage: %s [OPTION]... [FILE]\n" > - "Decode aub file contents from either FILE or the standard > input.\n\n" > - "A valid --gen option must be provided.\n\n" > + "Usage: %s [OPTION]... FILE\n" > + "Decode aub file contents from FILE.\n\n" > " --help display this help and exit\n" > " --gen=platform decode for given platform (3 letter > platform name)\n" > " --headers decode only command headers\n" > @@ -612,14 +555,14 @@ int main(int argc, char *argv[]) > } > } > > - if (help || argc == 1) { > + if (optind < argc) > + input_file = argv[optind]; > + > + if (help || !input_file) { > print_help(argv[0], stderr); > exit(0); > } > > - if (optind < argc) > - input_file = argv[optind]; > - > /* Do this before we redirect stdout to pager. */ > if (option_color == COLOR_AUTO) > option_color = isatty(1) ? COLOR_ALWAYS : COLOR_NEVER; > @@ -627,11 +570,6 @@ int main(int argc, char *argv[]) > if (isatty(1) && pager) > setup_pager(); > > - if (input_file == NULL) > - file = aub_file_stdin(); > - else > - file = aub_file_open(input_file); > - > /* mmap a terabyte for our gtt space. */ > gtt_size = 1ull << 40; > gtt = mmap(NULL, gtt_size, PROT_READ | PROT_WRITE, > @@ -641,26 +579,10 @@ int main(int argc, char *argv[]) > exit(EXIT_FAILURE); > } > > - while (aub_file_more_stuff(file)) { > - switch (aub_file_decode_batch(file)) { > - case AUB_ITEM_DECODE_OK: > - break; > - case AUB_ITEM_DECODE_NEED_MORE_DATA: > - if (!file->stream) { > - file->cursor = file->end; > - break; > - } > - if (aub_file_more_stuff(file) && !aub_file_data_load(file)) { > - fprintf(stderr, "failed to load data from stdin\n"); > - exit(EXIT_FAILURE); > - } > - break; > - default: > - fprintf(stderr, "failed to parse aubdump data\n"); > - exit(EXIT_FAILURE); > - } > - } > + file = aub_file_open(input_file); > > + while (aub_file_more_stuff(file) && > + aub_file_decode_batch(file) == AUB_ITEM_DECODE_OK); > > fflush(stdout); > /* close the stdout which is opened to write the output */ > -- > 2.17.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev