[Intel-gfx] [PATCH v3 i-g-t 1/2] tools: intel_aubdump: pass configuration through file descriptor
Gandikota, Sirisha
sirisha.gandikota at intel.com
Tue Nov 1 21:41:46 UTC 2016
>-----Original Message-----
>From: Intel-gfx [mailto:intel-gfx-bounces at lists.freedesktop.org] On Behalf Of
>Lionel Landwerlin
>Sent: Tuesday, November 01, 2016 11:15 AM
>To: intel-gfx at lists.freedesktop.org
>Subject: [Intel-gfx] [PATCH v3 i-g-t 1/2] tools: intel_aubdump: pass configuration
>through file descriptor
>
>This makes parsing options less complicated and easier to extend.
>
>v2: Fix device id parsing (atoi -> sscanf) (Sirisha)
> Combine with previous commit moving init function (Sirisha)
>
>v3: Fix behavior change between bash 4.3 & 4.4 in <<< with \n characters
> (Lionel)
>
>Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
>---
> tools/aubdump.c | 58 ++++++++++++++++++++++++++++++++++++------------
>--
> tools/intel_aubdump.in | 24 +++++++++++++++------
> 2 files changed, 59 insertions(+), 23 deletions(-)
>
>diff --git a/tools/aubdump.c b/tools/aubdump.c index 30dc742..f2cd2c1 100644
>--- a/tools/aubdump.c
>+++ b/tools/aubdump.c
>@@ -426,6 +426,46 @@ close(int fd)
> return libc_close(fd);
> }
>
>+static void
>+maybe_init(void)
>+{
>+ static bool initialized = false;
>+ FILE *config;
>+ char *key, *value;
>+
>+ if (initialized)
>+ return;
>+
>+ initialized = true;
>+
>+ config = fdopen(3, "r");
>+ while (fscanf(config, "%m[^=]=%m[^\n]\n", &key, &value) != EOF) {
>+ if (!strcmp(key, "verbose")) {
>+ verbose = 1;
>+ } else if (!strcmp(key, "device")) {
>+ fail_if(sscanf(value, "%i", &device) != 1,
>+ "intel_aubdump: failed to parse device id '%s'",
>+ value);
>+ device_override = true;
>+ } else if (!strcmp(key, "file")) {
>+ filename = value;
>+ file = fopen(filename, "w+");
>+ fail_if(file == NULL,
>+ "intel_aubdump: failed to open file '%s'\n",
>+ filename);
>+ } else {
>+ fprintf(stderr, "intel_aubdump: unknown option '%s'\n",
>key);
>+ }
>+
>+ free(key);
>+ free(value);
>+ }
>+ fclose(config);
>+
>+ bos = malloc(MAX_BO_COUNT * sizeof(bos[0]));
>+ fail_if(bos == NULL, "intel_aubdump: out of memory\n"); }
>+
> int
> ioctl(int fd, unsigned long request, ...) { @@ -447,6 +487,8 @@ ioctl(int fd,
>unsigned long request, ...)
> }
>
> if (fd == drm_fd) {
>+ maybe_init();
>+
> switch (request) {
> case DRM_IOCTL_I915_GETPARAM: {
> struct drm_i915_getparam *getparam = argp; @@ -
>550,26 +592,10 @@ ioctl(int fd, unsigned long request, ...) static void
> init(void)
> {
>- const char *args = getenv("INTEL_AUBDUMP_ARGS");
>-
> libc_close = dlsym(RTLD_NEXT, "close");
> libc_ioctl = dlsym(RTLD_NEXT, "ioctl");
> fail_if(libc_close == NULL || libc_ioctl == NULL,
> "intel_aubdump: failed to get libc ioctl or close\n");
>-
>- if (sscanf(args, "verbose=%d;file=%m[^;];device=%i",
>- &verbose, &filename, &device) != 3)
>- filename = strdup("intel.aub");
>- fail_if(filename == NULL, "intel_aubdump: out of memory\n");
>-
>- if (device)
>- device_override = true;
>-
>- bos = malloc(MAX_BO_COUNT * sizeof(bos[0]));
>- fail_if(bos == NULL, "intel_aubdump: out of memory\n");
>-
>- file = fopen(filename, "w+");
>- fail_if(file == NULL, "intel_aubdump: failed to open file '%s'\n",
>filename);
> }
>
> static int
>diff --git a/tools/intel_aubdump.in b/tools/intel_aubdump.in index
>feee23a..18fd03b 100644
>--- a/tools/intel_aubdump.in
>+++ b/tools/intel_aubdump.in
>@@ -21,29 +21,38 @@ EOF
> exit 0
> }
>
>-verbose=0
>-device=0
>+args=""
>+command=""
>+file=""
>+
>+function add_arg() {
>+ arg=$1
>+ args="$args$arg\n"
>+}
>
> while true; do
> case "$1" in
> -o)
> file=$2
>+ add_arg "file=${f:-$(basename ${f}).aub}"
> shift 2
> ;;
> -v)
>- verbose=1
>+ add_arg "verbose=1"
> shift 1
> ;;
> -o*)
> file=${1##-o}
>+ add_arg "file=${file:-$(basename ${file}).aub}"
> shift
> ;;
> --output=*)
> file=${1##--output=}
>+ add_arg "file=${file:-$(basename ${file}).aub}"
> shift
> ;;
> --device=*)
>- device=${1##--device=}
>+ add_arg "device=${1##--device=}"
> shift
> ;;
> --help)
>@@ -66,12 +75,13 @@ done
>
> [ -z $1 ] && show_help
>
>-file=${file:-$(basename $1).aub}
>+[ -z $file ] && add_arg "file=intel.aub"
>
> prefix=@prefix@
> exec_prefix=@exec_prefix@
> libdir=@libdir@
>
> LD_PRELOAD=${libdir}/intel_aubdump.so${LD_PPRELOAD:+:${LD_PRELOAD}} \
>- INTEL_AUBDUMP_ARGS="verbose=$verbose;file=$file;device=$device"
>\
>- exec -- "$@"
>+ exec -- "$@" 3<<EOF
>+`echo -e $args`
>+EOF
>--
>2.10.2
[SG] Works for me
Reviewed-by: Sirisha Gandikota <sirisha.gandikota at intel.com>
__________________________________________
>Intel-gfx mailing list
>Intel-gfx at lists.freedesktop.org
>https://lists.freedesktop.org/mailman/listinfo/intel-gfx
More information about the Intel-gfx
mailing list