[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