Message ID | 20170914011100.7743-6-jordan.l.justen@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 2017-09-13 18:11:00, Jordan Justen wrote: > In some cases it is preferable to not send exec commands to the > kernel, but to otherwise record the exec command into the AUB file. > > For example, when using the --device override option, it might be best > to avoid passing the EXEC ioctls through to the kernel. > > Signed-off-by: Jordan Justen <jordan.l.justen@intel.com> > --- > tools/aubdump.c | 13 +++++++++++-- > tools/intel_aubdump.in | 7 +++++++ > 2 files changed, 18 insertions(+), 2 deletions(-) > > diff --git a/tools/aubdump.c b/tools/aubdump.c > index 4392e589..6961cd51 100644 > --- a/tools/aubdump.c > +++ b/tools/aubdump.c > @@ -58,6 +58,7 @@ static int gen = 0; > static int verbose = 0; > static bool device_override; > static uint32_t device; > +static bool no_exec = false; > > #define MAX_BO_COUNT 64 * 1024 > > @@ -567,6 +568,8 @@ maybe_init(void) > "intel_aubdump: failed to parse device id '%s'", > value); > device_override = true; > + } else if (!strcmp(key, "no_exec")) { > + no_exec = true; > } else if (!strcmp(key, "file")) { > filename = strdup(value); > files[0] = fopen(filename, "w+"); > @@ -645,7 +648,10 @@ ioctl(int fd, unsigned long request, ...) > "application uses DRM_IOCTL_I915_GEM_EXECBUFFER, not handled\n"); > once = true; > } > - return libc_ioctl(fd, request, argp); > + if (verbose && no_exec) > + printf("Skipping DRM_IOCTL_I915_GEM_EXECBUFFER " > + "ioctl (--no-exec)\n"); > + return no_exec ? 0 : libc_ioctl(fd, request, argp); > } > > case DRM_IOCTL_I915_GEM_EXECBUFFER2: > @@ -654,7 +660,10 @@ ioctl(int fd, unsigned long request, ...) > if (device_override) > return 0; Hmm, I guess I just looked at the DRM_IOCTL_I915_GEM_EXECBUFFER case and then glossed over the fact that DRM_IOCTL_I915_GEM_EXECBUFFER2 already skips exec when --device is used. So, this patch should be dropped... I guess the other meson ones might be useful. -Jordan > > - return libc_ioctl(fd, request, argp); > + if (verbose && no_exec) > + printf("Skipping DRM_IOCTL_I915_GEM_EXECBUFFER2 " > + "ioctl (--no-exec)\n"); > + return no_exec ? 0 : libc_ioctl(fd, request, argp); > } > > case DRM_IOCTL_I915_GEM_CREATE: { > diff --git a/tools/intel_aubdump.in b/tools/intel_aubdump.in > index 8bc6b19d..ce77c849 100755 > --- a/tools/intel_aubdump.in > +++ b/tools/intel_aubdump.in > @@ -15,6 +15,9 @@ contents and execution of the GEM application. > > --device=ID Override PCI ID of the reported device > > + -n, --no-exec Record exec commands in the AUB file, but don't send > + them to the kernel > + > -v Enable verbose output > > --help Display this help message and exit > @@ -79,6 +82,10 @@ while true; do > add_arg "device=${1##--device=}" > shift > ;; > + -n|--no-exec) > + add_arg "no_exec=1" > + shift > + ;; > --help) > show_help > ;; > -- > 2.14.1 >
diff --git a/tools/aubdump.c b/tools/aubdump.c index 4392e589..6961cd51 100644 --- a/tools/aubdump.c +++ b/tools/aubdump.c @@ -58,6 +58,7 @@ static int gen = 0; static int verbose = 0; static bool device_override; static uint32_t device; +static bool no_exec = false; #define MAX_BO_COUNT 64 * 1024 @@ -567,6 +568,8 @@ maybe_init(void) "intel_aubdump: failed to parse device id '%s'", value); device_override = true; + } else if (!strcmp(key, "no_exec")) { + no_exec = true; } else if (!strcmp(key, "file")) { filename = strdup(value); files[0] = fopen(filename, "w+"); @@ -645,7 +648,10 @@ ioctl(int fd, unsigned long request, ...) "application uses DRM_IOCTL_I915_GEM_EXECBUFFER, not handled\n"); once = true; } - return libc_ioctl(fd, request, argp); + if (verbose && no_exec) + printf("Skipping DRM_IOCTL_I915_GEM_EXECBUFFER " + "ioctl (--no-exec)\n"); + return no_exec ? 0 : libc_ioctl(fd, request, argp); } case DRM_IOCTL_I915_GEM_EXECBUFFER2: @@ -654,7 +660,10 @@ ioctl(int fd, unsigned long request, ...) if (device_override) return 0; - return libc_ioctl(fd, request, argp); + if (verbose && no_exec) + printf("Skipping DRM_IOCTL_I915_GEM_EXECBUFFER2 " + "ioctl (--no-exec)\n"); + return no_exec ? 0 : libc_ioctl(fd, request, argp); } case DRM_IOCTL_I915_GEM_CREATE: { diff --git a/tools/intel_aubdump.in b/tools/intel_aubdump.in index 8bc6b19d..ce77c849 100755 --- a/tools/intel_aubdump.in +++ b/tools/intel_aubdump.in @@ -15,6 +15,9 @@ contents and execution of the GEM application. --device=ID Override PCI ID of the reported device + -n, --no-exec Record exec commands in the AUB file, but don't send + them to the kernel + -v Enable verbose output --help Display this help message and exit @@ -79,6 +82,10 @@ while true; do add_arg "device=${1##--device=}" shift ;; + -n|--no-exec) + add_arg "no_exec=1" + shift + ;; --help) show_help ;;
In some cases it is preferable to not send exec commands to the kernel, but to otherwise record the exec command into the AUB file. For example, when using the --device override option, it might be best to avoid passing the EXEC ioctls through to the kernel. Signed-off-by: Jordan Justen <jordan.l.justen@intel.com> --- tools/aubdump.c | 13 +++++++++++-- tools/intel_aubdump.in | 7 +++++++ 2 files changed, 18 insertions(+), 2 deletions(-)