[igt-dev] [PATCH i-g-t v2 09/11] tools/intel_guc_logger: By default don't change GuC log verbosity

Alan Previn alan.previn.teres.alexis at intel.com
Tue Dec 6 08:58:47 UTC 2022


By default, don't change the verbosity if the user hasn't explicitly
requested to change it. Also, don't allow users to set the GuC log
verbosity to level of 0 (i.e. disabled) else the logger will not
receive any data.

Also, fix a bug where we set the verbosity at the end of logging
to zero. Instead, save the original GuC log verbosity when we start
the logger and then restore that value.

Signed-off-by: Alan Previn <alan.previn.teres.alexis at intel.com>
---
 tools/intel_guc_logger.c | 33 +++++++++++++++++++++++----------
 1 file changed, 23 insertions(+), 10 deletions(-)

diff --git a/tools/intel_guc_logger.c b/tools/intel_guc_logger.c
index be09190c..7243ad43 100644
--- a/tools/intel_guc_logger.c
+++ b/tools/intel_guc_logger.c
@@ -56,7 +56,7 @@
 #define GLR_CHANNEL_NAME             "guc_log_relay_chan0"
 
 #define DEFAULT_OUTPUT_FILE_NAME     "guc_log_dump" /*.dat suffic added later*/
-#define DEFAULT_GUCLOG_VERBOSITY     3 /* by default capture logs at max verbosity */
+#define DEFAULT_GUCLOG_VERBOSITY     0 /* by default don't change GuC verbosity */
 #define DEFAULT_SUBBUF_COUNT         (4 * 8)
 					/* default to kernel built-in:   *
 					 *   4 x 8 subbuf regions        *
@@ -96,6 +96,7 @@ struct guc_t {
 	bool stop_logging;
 	bool capturing_stopped;
 	uint32_t fw_overflows;
+	uint64_t ori_loglevel;
 };
 
 struct global_t {
@@ -167,17 +168,18 @@ static void guc_log_verbosity(struct thread_t *tdata, bool enable)
 	char *str;
 	int loglevelfd;
 	uint64_t val;
+	char outstr[128];
 	int ret;
 
 	igt_assert_neq(asprintf(&str, "%s/%s", tdata->guc->fspath, GLR_LOGLEVEL_NAME), -1);
 	igt_info("Opening log level -> %s\n", str);
-	loglevelfd = igt_debugfs_open(tdata->global->drmfd, str, O_WRONLY);
+	loglevelfd = igt_debugfs_open(tdata->global->drmfd, str, O_RDWR);
 	free(str);
 	igt_assert_f(loglevelfd >= 0, "couldn't open the GuC log level file\n");
 
 	/*
 	 * i915 expects GuC log level to be specified as:
-	 * 0: disabled
+	 * 0: [dont modify verbosity]
 	 * 1: enabled (non-verbose mode)
 	 * 2: GuC verbosity level 0
 	 * 3: GuC verbosity level 1
@@ -185,13 +187,24 @@ static void guc_log_verbosity(struct thread_t *tdata, bool enable)
 	 * 5: GuC verbosity level 3
 	 * intel_guc_logger takes input range of 0..3 that maps to 2..5 above.
 	 */
-	val = enable ? tdata->global->verbosity + 2 : 0;
-	ret = asprintf(&str, "0x%" PRIx64, val);
-	igt_assert_neq(ret, -1);
-	ret = write(loglevelfd, str, ret);
-	free(str);
-	igt_assert_f(ret > 0, "couldn't write verbosity to log level file\n");
-	igt_info("Set GuC log level = %d\n", (int)val);
+	if (enable) {
+		ret = read(loglevelfd, outstr, sizeof(outstr) - 1);
+		igt_assert(ret > 0);
+		outstr[ret] = '\0';
+		tdata->guc->ori_loglevel = atoll(outstr);
+		igt_info("Current GuC log level = %d\n",
+			 (int)tdata->guc->ori_loglevel);
+	}
+	/* Treat the lowest verbosity level as no change to verbosity  */
+	if (tdata->global->verbosity) {
+		val = enable ? tdata->global->verbosity + 2 : tdata->guc->ori_loglevel;
+		ret = asprintf(&str, "0x%" PRIx64, val);
+		igt_assert_neq(ret, -1);
+		ret = write(loglevelfd, str, ret);
+		free(str);
+		igt_assert_f(ret > 0, "couldn't write verbosity to log level file\n");
+		igt_info("Setting GuC log level = %d\n", (int)val);
+	}
 
 	close(loglevelfd);
 }
-- 
2.34.1



More information about the igt-dev mailing list