* [Intel-gfx] [PATCH 3/4] i915: add -DDYNAMIC_DEBUG_MODULE to i915/gvt/Makefile
[not found] <20200826170041.2497546-1-jim.cromie@gmail.com>
@ 2020-08-26 17:00 ` Jim Cromie
2020-08-26 17:00 ` [Intel-gfx] [PATCH 4/4] i915: POC use dynamic_debug_exec_queries to control pr_debugs in gvt Jim Cromie
1 sibling, 0 replies; 3+ messages in thread
From: Jim Cromie @ 2020-08-26 17:00 UTC (permalink / raw)
To: linux-kernel, dri-devel, jbaron
Cc: Jim Cromie, intel-gfx, David Airlie, intel-gvt-dev
This addition to cflags enables dyndbg in the gvt component of the
i915 module, on a CONFIG_DYNAMIC_DEBUG_CORE build.
So here are the message classifications that the gvt driver uses.
cut -d= -f2 | cut -d\ -f2,3 | \
perl -ne 'chomp $_ && $h{$_}++; END{print "$_\" \tseen $h{$_}\n" for sort keys %h}'
"gvt: cmd:" seen 11
"gvt: core:" seen 48
"gvt: dpy:" seen 4
"gvt: el:" seen 21
"gvt: irq:" seen 1
"gvt: mm:" seen 6
"gvt: mmio:" seen 9
"gvt: render:" seen 1
"gvt: sched:" seen 15
Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
drivers/gpu/drm/i915/gvt/Makefile | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/gvt/Makefile b/drivers/gpu/drm/i915/gvt/Makefile
index ea8324abc784..2c581e910688 100644
--- a/drivers/gpu/drm/i915/gvt/Makefile
+++ b/drivers/gpu/drm/i915/gvt/Makefile
@@ -5,5 +5,6 @@ GVT_SOURCE := gvt.o aperture_gm.o handlers.o vgpu.o trace_points.o firmware.o \
execlist.o scheduler.o sched_policy.o mmio_context.o cmd_parser.o debugfs.o \
fb_decoder.o dmabuf.o page_track.o
-ccflags-y += -I $(srctree)/$(src) -I $(srctree)/$(src)/$(GVT_DIR)/
-i915-y += $(addprefix $(GVT_DIR)/, $(GVT_SOURCE))
+ccflags-y += -I $(srctree)/$(src) -I $(srctree)/$(src)/$(GVT_DIR)/
+ccflags-y += -DDYNAMIC_DEBUG_MODULE
+i915-y += $(addprefix $(GVT_DIR)/, $(GVT_SOURCE))
--
2.26.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 3+ messages in thread* [Intel-gfx] [PATCH 4/4] i915: POC use dynamic_debug_exec_queries to control pr_debugs in gvt
[not found] <20200826170041.2497546-1-jim.cromie@gmail.com>
2020-08-26 17:00 ` [Intel-gfx] [PATCH 3/4] i915: add -DDYNAMIC_DEBUG_MODULE to i915/gvt/Makefile Jim Cromie
@ 2020-08-26 17:00 ` Jim Cromie
2020-08-26 22:30 ` kernel test robot
1 sibling, 1 reply; 3+ messages in thread
From: Jim Cromie @ 2020-08-26 17:00 UTC (permalink / raw)
To: linux-kernel, dri-devel, jbaron; +Cc: Jim Cromie, intel-gfx, David Airlie
The gvt component of this driver has ~120 pr_debugs, in 9 "classes".
Add a "knob", like drm.debug, to map bits to these classes.
bash-5.0# echo 0x01 > /sys/module/i915/parameters/debug_dyn
set_dyndbg: result:0x1 from 0x01
dyndbg: query 0: "format='^gvt: cmd: ' +p"
dyndbg: entry, buf:'format='^gvt: cmd: ' +p'
dyndbg: start-of-word:0 'format='^gvt: cmd: ' +p'
dyndbg: start-of-word:1 ''^gvt: cmd: ' +p'
dyndbg: start-of-word:2 '+p'
dyndbg: split into words: "format" "^gvt: cmd: " "+p"
dyndbg: op='+'
dyndbg: flags=0x1
dyndbg: *flagsp=0x1 *maskp=0xffffffff
dyndbg: key:'format' arg:'^gvt: cmd: '
dyndbg: parsed: func="" file="" module="i915" format="^gvt: cmd: " lineno=0-0
dyndbg: changed drivers/gpu/drm/i915/gvt/cmd_parser.c:3081 [i915]init_cmd_table =p
dyndbg: changed drivers/gpu/drm/i915/gvt/cmd_parser.c:1376 [i915]gen8_check_mi_display_flip =p
dyndbg: changed drivers/gpu/drm/i915/gvt/cmd_parser.c:1373 [i915]gen8_check_mi_display_flip =p
dyndbg: changed drivers/gpu/drm/i915/gvt/cmd_parser.c:745 [i915]parser_exec_state_dump =p
dyndbg: changed drivers/gpu/drm/i915/gvt/cmd_parser.c:744 [i915]parser_exec_state_dump =p
dyndbg: changed drivers/gpu/drm/i915/gvt/cmd_parser.c:742 [i915]parser_exec_state_dump =p
dyndbg: changed drivers/gpu/drm/i915/gvt/cmd_parser.c:733 [i915]parser_exec_state_dump =p
dyndbg: changed drivers/gpu/drm/i915/gvt/cmd_parser.c:729 [i915]parser_exec_state_dump =p
dyndbg: changed drivers/gpu/drm/i915/gvt/cmd_parser.c:722 [i915]parser_exec_state_dump =p
dyndbg: changed drivers/gpu/drm/i915/gvt/cmd_parser.c:716 [i915]parser_exec_state_dump =p
dyndbg: changed drivers/gpu/drm/i915/gvt/cmd_parser.c:691 [i915]print_opcode =p
dyndbg: applied: func="" file="" module="i915" format="^gvt: cmd: " lineno=0-0
dyndbg: processed 1 queries, with 11 matches, 0 errs
change ct:11 on format='gvt: cmd: '
change ct:11
Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
drivers/gpu/drm/i915/i915_params.c | 76 ++++++++++++++++++++++++++++++
1 file changed, 76 insertions(+)
diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
index 8d8db9ff0a48..4e1f01ab4865 100644
--- a/drivers/gpu/drm/i915/i915_params.c
+++ b/drivers/gpu/drm/i915/i915_params.c
@@ -255,3 +255,79 @@ void i915_params_free(struct i915_params *params)
I915_PARAMS_FOR_EACH(FREE);
#undef FREE
}
+
+/* POC for callback -> dynamic_debug_exec_queries */
+unsigned long __new_knob;
+EXPORT_SYMBOL(__new_knob);
+
+static char *pr_debug_classes[] = {
+ "gvt: cmd: ",
+ "gvt: core: ",
+ "gvt: dpy: ",
+ "gvt: el: ",
+ "gvt: irq: ",
+ "gvt: mm: ",
+ "gvt: mmio: ",
+ "gvt: render: ",
+ "gvt: sched: "
+};
+#define NUM_CLASSES ARRAY_SIZE(pr_debug_classes)
+#define OUR_QUERY_SIZE 128 /* we need about 20 */
+
+#include <linux/module.h>
+
+static int param_set_dyndbg(const char *instr, const struct kernel_param *kp)
+{
+ static unsigned long int old_val;
+ unsigned int val;
+ unsigned long int changes, result;
+ int rc, chgct = 0, totct = 0, bitpos;
+ char query[OUR_QUERY_SIZE];
+
+ rc = kstrtouint(instr, 0, &val);
+ if (rc) {
+ pr_err("set_dyndbg: failed\n");
+ return -EINVAL;
+ }
+ result = val;
+ pr_info("set_dyndbg: result:0x%lx from %s\n", result, instr);
+
+ changes = result ^ old_val;
+
+ for_each_set_bit(bitpos, &changes, NUM_CLASSES) {
+
+ sprintf(query, "format='^%s' %cp", pr_debug_classes[bitpos],
+ test_bit(bitpos, &result) ? '+' : '-');
+
+ chgct = dynamic_debug_exec_queries(query, "i915");
+ totct += chgct;
+ pr_info("change ct:%d on format='%s'\n", chgct,
+ pr_debug_classes[bitpos]);
+ }
+ old_val = result;
+ pr_info("change ct:%d\n", totct);
+ return 0;
+}
+static int param_get_dyndbg(char *buffer, const struct kernel_param *kp)
+{
+ return scnprintf(buffer, PAGE_SIZE, "%u\n",
+ *((unsigned int *)kp->arg));
+}
+static const struct kernel_param_ops param_ops_dyndbg = {
+ .set = param_set_dyndbg,
+ .get = param_get_dyndbg,
+};
+
+MODULE_PARM_DESC(debug_dyn, " enable dynamic-debug by format-string classifications.\n"
+ "\t\twhich are:"
+ "\n\t\t gvt: cmd:"
+ "\n\t\t gvt: core:"
+ "\n\t\t gvt: dpy:"
+ "\n\t\t gvt: el:"
+ "\n\t\t gvt: irq:"
+ "\n\t\t gvt: mm:"
+ "\n\t\t gvt: mmio:"
+ "\n\t\t gvt: render:"
+ "\n\t\t gvt: sched:" "\n");
+
+module_param_cb(debug_dyn, ¶m_ops_dyndbg, &__new_knob, 0644);
--
2.26.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 3+ messages in thread