All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jim Cromie <jim.cromie@gmail.com>
To: jbaron@akamai.com
Cc: nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Subject: [PATCH v3 13/41] kernel/module: add __dyndbg_classes section
Date: Mon, 18 Jul 2022 00:35:57 -0600	[thread overview]
Message-ID: <20220718063641.9179-14-jim.cromie@gmail.com> (raw)
In-Reply-To: <20220718063641.9179-1-jim.cromie@gmail.com>

Like existing sections, particularly __dyndbg, this new one is an
array/address and its length.  In a close imitation of __dyndbg
handling, these are defined, then passed around, as follows:

vmlinux.lds.h:

KEEP the new section, which also silences orphan section warning on
loadable modules.  Add (__start_/__stop_)__dyndbg_classes linker
symbols for the c externs (below).

kernel/module/internal.h:
- add new fields for classes,length to struct load_info,

kernel/module.c:
- fill new fields in find_module_sections(), using section_objs()
- extend callchain prototypes
  to pass classes, length
  load_module(): pass new info to dynamic_debug_setup()
  dynamic_debug_setup(): new params, pass through to ddebug_add_module()

dynamic_debug.c:
- add externs to the linker symbols.

ddebug_add_module(): add params for classes, length.
- It currently builds a debug_table, and *will* find and attach classes.

dynamic_debug_init(): compute num_classes from linker symbols, and add
new _start, num_classes params to ddebug_add_module() calls.

Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
 include/asm-generic/vmlinux.lds.h |  3 +++
 include/linux/dynamic_debug.h     |  9 ++++++---
 kernel/module/internal.h          |  2 ++
 kernel/module/main.c              | 10 +++++++---
 lib/dynamic_debug.c               | 22 ++++++++++++++++------
 5 files changed, 34 insertions(+), 12 deletions(-)

diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 7515a465ec03..9b8bd5504ad9 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -345,6 +345,9 @@
 	*(__tracepoints)						\
 	/* implement dynamic printk debug */				\
 	. = ALIGN(8);							\
+	__start___dyndbg_classes = .;					\
+	KEEP(*(__dyndbg_classes))					\
+	__stop___dyndbg_classes = .;					\
 	__start___dyndbg = .;						\
 	KEEP(*(__dyndbg))						\
 	__stop___dyndbg = .;						\
diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
index 84e97cd0e8c4..f57076e02767 100644
--- a/include/linux/dynamic_debug.h
+++ b/include/linux/dynamic_debug.h
@@ -115,8 +115,10 @@ struct ddebug_class_map {
 
 #if defined(CONFIG_DYNAMIC_DEBUG_CORE)
 
-int ddebug_add_module(struct _ddebug *tab, unsigned int n,
-				const char *modname);
+int ddebug_add_module(struct _ddebug *tab, unsigned int num_debugs,
+		      struct ddebug_class_map *classes, unsigned int num_classes,
+		      const char *modname);
+
 extern int ddebug_remove_module(const char *mod_name);
 extern __printf(2, 3)
 void __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...);
@@ -285,7 +287,8 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor,
 #include <linux/errno.h>
 #include <linux/printk.h>
 
-static inline int ddebug_add_module(struct _ddebug *tab, unsigned int n,
+static inline int ddebug_add_module(struct _ddebug *tab, unsigned int num_debugs,
+				    struct ddebug_class_map *classes, unsigned int num_classes,
 				    const char *modname)
 {
 	return 0;
diff --git a/kernel/module/internal.h b/kernel/module/internal.h
index bc5507ab8450..02601dfe452b 100644
--- a/kernel/module/internal.h
+++ b/kernel/module/internal.h
@@ -60,7 +60,9 @@ struct load_info {
 	char *secstrings, *strtab;
 	unsigned long symoffs, stroffs, init_typeoffs, core_typeoffs;
 	struct _ddebug *debug;
+	struct ddebug_class_map *debug_classes;
 	unsigned int num_debug;
+	unsigned int num_debug_classes;
 	bool sig_ok;
 #ifdef CONFIG_KALLSYMS
 	unsigned long mod_kallsyms_init_off;
diff --git a/kernel/module/main.c b/kernel/module/main.c
index fed58d30725d..0f8e888908df 100644
--- a/kernel/module/main.c
+++ b/kernel/module/main.c
@@ -1593,11 +1593,12 @@ static void free_modinfo(struct module *mod)
 	}
 }
 
-static void dynamic_debug_setup(struct module *mod, struct _ddebug *debug, unsigned int num)
+static void dynamic_debug_setup(struct module *mod, struct _ddebug *debug, unsigned int num,
+				struct ddebug_class_map *classes, unsigned int num_classes)
 {
 	if (!debug)
 		return;
-	ddebug_add_module(debug, num, mod->name);
+	ddebug_add_module(debug, num, classes, num_classes, mod->name);
 }
 
 static void dynamic_debug_remove(struct module *mod, struct _ddebug *debug)
@@ -2093,6 +2094,8 @@ static int find_module_sections(struct module *mod, struct load_info *info)
 	if (section_addr(info, "__obsparm"))
 		pr_warn("%s: Ignoring obsolete parameters\n", mod->name);
 
+	info->debug_classes = section_objs(info, "__dyndbg_classes",
+				   sizeof(*info->debug_classes), &info->num_debug_classes);
 	info->debug = section_objs(info, "__dyndbg",
 				   sizeof(*info->debug), &info->num_debug);
 
@@ -2783,7 +2786,8 @@ static int load_module(struct load_info *info, const char __user *uargs,
 	}
 
 	init_build_id(mod, info);
-	dynamic_debug_setup(mod, info->debug, info->num_debug);
+	dynamic_debug_setup(mod, info->debug, info->num_debug,
+			    info->debug_classes, info->num_debug_classes);
 
 	/* Ftrace init must be called in the MODULE_STATE_UNFORMED state */
 	ftrace_module_init(mod);
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index e96dc216463b..b6d80ba25bf5 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -41,6 +41,8 @@
 
 extern struct _ddebug __start___dyndbg[];
 extern struct _ddebug __stop___dyndbg[];
+extern struct ddebug_class_map __start___dyndbg_classes[];
+extern struct ddebug_class_map __stop___dyndbg_classes[];
 
 struct ddebug_table {
 	struct list_head link;
@@ -923,8 +925,9 @@ static const struct proc_ops proc_fops = {
  * Allocate a new ddebug_table for the given module
  * and add it to the global list.
  */
-int ddebug_add_module(struct _ddebug *tab, unsigned int n,
-			     const char *name)
+int ddebug_add_module(struct _ddebug *tab, unsigned int num_debugs,
+		      struct ddebug_class_map *classes, unsigned int num_classes,
+		      const char *name)
 {
 	struct ddebug_table *dt;
 
@@ -940,14 +943,14 @@ int ddebug_add_module(struct _ddebug *tab, unsigned int n,
 	 * this struct ddebug_table.
 	 */
 	dt->mod_name = name;
-	dt->num_ddebugs = n;
+	dt->num_ddebugs = num_debugs;
 	dt->ddebugs = tab;
 
 	mutex_lock(&ddebug_lock);
 	list_add_tail(&dt->link, &ddebug_tables);
 	mutex_unlock(&ddebug_lock);
 
-	vpr_info("%3u debug prints in module %s\n", n, dt->mod_name);
+	vpr_info("%3u debug prints in module %s\n", num_debugs, dt->mod_name);
 	return 0;
 }
 
@@ -1064,6 +1067,7 @@ static int __init dynamic_debug_init(void)
 	char *cmdline;
 	int ret = 0;
 	int n = 0, entries = 0, modct = 0;
+	int num_classes = __stop___dyndbg_classes - __start___dyndbg_classes;
 
 	if (&__start___dyndbg == &__stop___dyndbg) {
 		if (IS_ENABLED(CONFIG_DYNAMIC_DEBUG)) {
@@ -1081,7 +1085,9 @@ static int __init dynamic_debug_init(void)
 		entries++;
 		if (strcmp(modname, iter->modname)) {
 			modct++;
-			ret = ddebug_add_module(iter_start, n, modname);
+			ret = ddebug_add_module(iter_start, n,
+						__start___dyndbg_classes, num_classes,
+						modname);
 			if (ret)
 				goto out_err;
 			n = 0;
@@ -1090,7 +1096,8 @@ static int __init dynamic_debug_init(void)
 		}
 		n++;
 	}
-	ret = ddebug_add_module(iter_start, n, modname);
+	ret = ddebug_add_module(iter_start, n,
+				__start___dyndbg_classes, num_classes, modname);
 	if (ret)
 		goto out_err;
 
@@ -1099,6 +1106,9 @@ static int __init dynamic_debug_init(void)
 		 entries, modct, (int)((modct * sizeof(struct ddebug_table)) >> 10),
 		 (int)((entries * sizeof(struct _ddebug)) >> 10));
 
+	if (num_classes)
+		v2pr_info("  %d builtin ddebug class-maps\n", num_classes);
+
 	/* now that ddebug tables are loaded, process all boot args
 	 * again to find and activate queries given in dyndbg params.
 	 * While this has already been done for known boot params, it
-- 
2.36.1


WARNING: multiple messages have this Message-ID (diff)
From: Jim Cromie <jim.cromie@gmail.com>
To: jbaron@akamai.com
Cc: Jim Cromie <jim.cromie@gmail.com>,
	nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Subject: [Intel-gfx] [PATCH v3 13/41] kernel/module: add __dyndbg_classes section
Date: Mon, 18 Jul 2022 00:35:57 -0600	[thread overview]
Message-ID: <20220718063641.9179-14-jim.cromie@gmail.com> (raw)
In-Reply-To: <20220718063641.9179-1-jim.cromie@gmail.com>

Like existing sections, particularly __dyndbg, this new one is an
array/address and its length.  In a close imitation of __dyndbg
handling, these are defined, then passed around, as follows:

vmlinux.lds.h:

KEEP the new section, which also silences orphan section warning on
loadable modules.  Add (__start_/__stop_)__dyndbg_classes linker
symbols for the c externs (below).

kernel/module/internal.h:
- add new fields for classes,length to struct load_info,

kernel/module.c:
- fill new fields in find_module_sections(), using section_objs()
- extend callchain prototypes
  to pass classes, length
  load_module(): pass new info to dynamic_debug_setup()
  dynamic_debug_setup(): new params, pass through to ddebug_add_module()

dynamic_debug.c:
- add externs to the linker symbols.

ddebug_add_module(): add params for classes, length.
- It currently builds a debug_table, and *will* find and attach classes.

dynamic_debug_init(): compute num_classes from linker symbols, and add
new _start, num_classes params to ddebug_add_module() calls.

Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
 include/asm-generic/vmlinux.lds.h |  3 +++
 include/linux/dynamic_debug.h     |  9 ++++++---
 kernel/module/internal.h          |  2 ++
 kernel/module/main.c              | 10 +++++++---
 lib/dynamic_debug.c               | 22 ++++++++++++++++------
 5 files changed, 34 insertions(+), 12 deletions(-)

diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 7515a465ec03..9b8bd5504ad9 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -345,6 +345,9 @@
 	*(__tracepoints)						\
 	/* implement dynamic printk debug */				\
 	. = ALIGN(8);							\
+	__start___dyndbg_classes = .;					\
+	KEEP(*(__dyndbg_classes))					\
+	__stop___dyndbg_classes = .;					\
 	__start___dyndbg = .;						\
 	KEEP(*(__dyndbg))						\
 	__stop___dyndbg = .;						\
diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
index 84e97cd0e8c4..f57076e02767 100644
--- a/include/linux/dynamic_debug.h
+++ b/include/linux/dynamic_debug.h
@@ -115,8 +115,10 @@ struct ddebug_class_map {
 
 #if defined(CONFIG_DYNAMIC_DEBUG_CORE)
 
-int ddebug_add_module(struct _ddebug *tab, unsigned int n,
-				const char *modname);
+int ddebug_add_module(struct _ddebug *tab, unsigned int num_debugs,
+		      struct ddebug_class_map *classes, unsigned int num_classes,
+		      const char *modname);
+
 extern int ddebug_remove_module(const char *mod_name);
 extern __printf(2, 3)
 void __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...);
@@ -285,7 +287,8 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor,
 #include <linux/errno.h>
 #include <linux/printk.h>
 
-static inline int ddebug_add_module(struct _ddebug *tab, unsigned int n,
+static inline int ddebug_add_module(struct _ddebug *tab, unsigned int num_debugs,
+				    struct ddebug_class_map *classes, unsigned int num_classes,
 				    const char *modname)
 {
 	return 0;
diff --git a/kernel/module/internal.h b/kernel/module/internal.h
index bc5507ab8450..02601dfe452b 100644
--- a/kernel/module/internal.h
+++ b/kernel/module/internal.h
@@ -60,7 +60,9 @@ struct load_info {
 	char *secstrings, *strtab;
 	unsigned long symoffs, stroffs, init_typeoffs, core_typeoffs;
 	struct _ddebug *debug;
+	struct ddebug_class_map *debug_classes;
 	unsigned int num_debug;
+	unsigned int num_debug_classes;
 	bool sig_ok;
 #ifdef CONFIG_KALLSYMS
 	unsigned long mod_kallsyms_init_off;
diff --git a/kernel/module/main.c b/kernel/module/main.c
index fed58d30725d..0f8e888908df 100644
--- a/kernel/module/main.c
+++ b/kernel/module/main.c
@@ -1593,11 +1593,12 @@ static void free_modinfo(struct module *mod)
 	}
 }
 
-static void dynamic_debug_setup(struct module *mod, struct _ddebug *debug, unsigned int num)
+static void dynamic_debug_setup(struct module *mod, struct _ddebug *debug, unsigned int num,
+				struct ddebug_class_map *classes, unsigned int num_classes)
 {
 	if (!debug)
 		return;
-	ddebug_add_module(debug, num, mod->name);
+	ddebug_add_module(debug, num, classes, num_classes, mod->name);
 }
 
 static void dynamic_debug_remove(struct module *mod, struct _ddebug *debug)
@@ -2093,6 +2094,8 @@ static int find_module_sections(struct module *mod, struct load_info *info)
 	if (section_addr(info, "__obsparm"))
 		pr_warn("%s: Ignoring obsolete parameters\n", mod->name);
 
+	info->debug_classes = section_objs(info, "__dyndbg_classes",
+				   sizeof(*info->debug_classes), &info->num_debug_classes);
 	info->debug = section_objs(info, "__dyndbg",
 				   sizeof(*info->debug), &info->num_debug);
 
@@ -2783,7 +2786,8 @@ static int load_module(struct load_info *info, const char __user *uargs,
 	}
 
 	init_build_id(mod, info);
-	dynamic_debug_setup(mod, info->debug, info->num_debug);
+	dynamic_debug_setup(mod, info->debug, info->num_debug,
+			    info->debug_classes, info->num_debug_classes);
 
 	/* Ftrace init must be called in the MODULE_STATE_UNFORMED state */
 	ftrace_module_init(mod);
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index e96dc216463b..b6d80ba25bf5 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -41,6 +41,8 @@
 
 extern struct _ddebug __start___dyndbg[];
 extern struct _ddebug __stop___dyndbg[];
+extern struct ddebug_class_map __start___dyndbg_classes[];
+extern struct ddebug_class_map __stop___dyndbg_classes[];
 
 struct ddebug_table {
 	struct list_head link;
@@ -923,8 +925,9 @@ static const struct proc_ops proc_fops = {
  * Allocate a new ddebug_table for the given module
  * and add it to the global list.
  */
-int ddebug_add_module(struct _ddebug *tab, unsigned int n,
-			     const char *name)
+int ddebug_add_module(struct _ddebug *tab, unsigned int num_debugs,
+		      struct ddebug_class_map *classes, unsigned int num_classes,
+		      const char *name)
 {
 	struct ddebug_table *dt;
 
@@ -940,14 +943,14 @@ int ddebug_add_module(struct _ddebug *tab, unsigned int n,
 	 * this struct ddebug_table.
 	 */
 	dt->mod_name = name;
-	dt->num_ddebugs = n;
+	dt->num_ddebugs = num_debugs;
 	dt->ddebugs = tab;
 
 	mutex_lock(&ddebug_lock);
 	list_add_tail(&dt->link, &ddebug_tables);
 	mutex_unlock(&ddebug_lock);
 
-	vpr_info("%3u debug prints in module %s\n", n, dt->mod_name);
+	vpr_info("%3u debug prints in module %s\n", num_debugs, dt->mod_name);
 	return 0;
 }
 
@@ -1064,6 +1067,7 @@ static int __init dynamic_debug_init(void)
 	char *cmdline;
 	int ret = 0;
 	int n = 0, entries = 0, modct = 0;
+	int num_classes = __stop___dyndbg_classes - __start___dyndbg_classes;
 
 	if (&__start___dyndbg == &__stop___dyndbg) {
 		if (IS_ENABLED(CONFIG_DYNAMIC_DEBUG)) {
@@ -1081,7 +1085,9 @@ static int __init dynamic_debug_init(void)
 		entries++;
 		if (strcmp(modname, iter->modname)) {
 			modct++;
-			ret = ddebug_add_module(iter_start, n, modname);
+			ret = ddebug_add_module(iter_start, n,
+						__start___dyndbg_classes, num_classes,
+						modname);
 			if (ret)
 				goto out_err;
 			n = 0;
@@ -1090,7 +1096,8 @@ static int __init dynamic_debug_init(void)
 		}
 		n++;
 	}
-	ret = ddebug_add_module(iter_start, n, modname);
+	ret = ddebug_add_module(iter_start, n,
+				__start___dyndbg_classes, num_classes, modname);
 	if (ret)
 		goto out_err;
 
@@ -1099,6 +1106,9 @@ static int __init dynamic_debug_init(void)
 		 entries, modct, (int)((modct * sizeof(struct ddebug_table)) >> 10),
 		 (int)((entries * sizeof(struct _ddebug)) >> 10));
 
+	if (num_classes)
+		v2pr_info("  %d builtin ddebug class-maps\n", num_classes);
+
 	/* now that ddebug tables are loaded, process all boot args
 	 * again to find and activate queries given in dyndbg params.
 	 * While this has already been done for known boot params, it
-- 
2.36.1


WARNING: multiple messages have this Message-ID (diff)
From: Jim Cromie <jim.cromie@gmail.com>
To: jbaron@akamai.com
Cc: Jim Cromie <jim.cromie@gmail.com>,
	nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Subject: [PATCH v3 13/41] kernel/module: add __dyndbg_classes section
Date: Mon, 18 Jul 2022 00:35:57 -0600	[thread overview]
Message-ID: <20220718063641.9179-14-jim.cromie@gmail.com> (raw)
In-Reply-To: <20220718063641.9179-1-jim.cromie@gmail.com>

Like existing sections, particularly __dyndbg, this new one is an
array/address and its length.  In a close imitation of __dyndbg
handling, these are defined, then passed around, as follows:

vmlinux.lds.h:

KEEP the new section, which also silences orphan section warning on
loadable modules.  Add (__start_/__stop_)__dyndbg_classes linker
symbols for the c externs (below).

kernel/module/internal.h:
- add new fields for classes,length to struct load_info,

kernel/module.c:
- fill new fields in find_module_sections(), using section_objs()
- extend callchain prototypes
  to pass classes, length
  load_module(): pass new info to dynamic_debug_setup()
  dynamic_debug_setup(): new params, pass through to ddebug_add_module()

dynamic_debug.c:
- add externs to the linker symbols.

ddebug_add_module(): add params for classes, length.
- It currently builds a debug_table, and *will* find and attach classes.

dynamic_debug_init(): compute num_classes from linker symbols, and add
new _start, num_classes params to ddebug_add_module() calls.

Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
 include/asm-generic/vmlinux.lds.h |  3 +++
 include/linux/dynamic_debug.h     |  9 ++++++---
 kernel/module/internal.h          |  2 ++
 kernel/module/main.c              | 10 +++++++---
 lib/dynamic_debug.c               | 22 ++++++++++++++++------
 5 files changed, 34 insertions(+), 12 deletions(-)

diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 7515a465ec03..9b8bd5504ad9 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -345,6 +345,9 @@
 	*(__tracepoints)						\
 	/* implement dynamic printk debug */				\
 	. = ALIGN(8);							\
+	__start___dyndbg_classes = .;					\
+	KEEP(*(__dyndbg_classes))					\
+	__stop___dyndbg_classes = .;					\
 	__start___dyndbg = .;						\
 	KEEP(*(__dyndbg))						\
 	__stop___dyndbg = .;						\
diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
index 84e97cd0e8c4..f57076e02767 100644
--- a/include/linux/dynamic_debug.h
+++ b/include/linux/dynamic_debug.h
@@ -115,8 +115,10 @@ struct ddebug_class_map {
 
 #if defined(CONFIG_DYNAMIC_DEBUG_CORE)
 
-int ddebug_add_module(struct _ddebug *tab, unsigned int n,
-				const char *modname);
+int ddebug_add_module(struct _ddebug *tab, unsigned int num_debugs,
+		      struct ddebug_class_map *classes, unsigned int num_classes,
+		      const char *modname);
+
 extern int ddebug_remove_module(const char *mod_name);
 extern __printf(2, 3)
 void __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...);
@@ -285,7 +287,8 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor,
 #include <linux/errno.h>
 #include <linux/printk.h>
 
-static inline int ddebug_add_module(struct _ddebug *tab, unsigned int n,
+static inline int ddebug_add_module(struct _ddebug *tab, unsigned int num_debugs,
+				    struct ddebug_class_map *classes, unsigned int num_classes,
 				    const char *modname)
 {
 	return 0;
diff --git a/kernel/module/internal.h b/kernel/module/internal.h
index bc5507ab8450..02601dfe452b 100644
--- a/kernel/module/internal.h
+++ b/kernel/module/internal.h
@@ -60,7 +60,9 @@ struct load_info {
 	char *secstrings, *strtab;
 	unsigned long symoffs, stroffs, init_typeoffs, core_typeoffs;
 	struct _ddebug *debug;
+	struct ddebug_class_map *debug_classes;
 	unsigned int num_debug;
+	unsigned int num_debug_classes;
 	bool sig_ok;
 #ifdef CONFIG_KALLSYMS
 	unsigned long mod_kallsyms_init_off;
diff --git a/kernel/module/main.c b/kernel/module/main.c
index fed58d30725d..0f8e888908df 100644
--- a/kernel/module/main.c
+++ b/kernel/module/main.c
@@ -1593,11 +1593,12 @@ static void free_modinfo(struct module *mod)
 	}
 }
 
-static void dynamic_debug_setup(struct module *mod, struct _ddebug *debug, unsigned int num)
+static void dynamic_debug_setup(struct module *mod, struct _ddebug *debug, unsigned int num,
+				struct ddebug_class_map *classes, unsigned int num_classes)
 {
 	if (!debug)
 		return;
-	ddebug_add_module(debug, num, mod->name);
+	ddebug_add_module(debug, num, classes, num_classes, mod->name);
 }
 
 static void dynamic_debug_remove(struct module *mod, struct _ddebug *debug)
@@ -2093,6 +2094,8 @@ static int find_module_sections(struct module *mod, struct load_info *info)
 	if (section_addr(info, "__obsparm"))
 		pr_warn("%s: Ignoring obsolete parameters\n", mod->name);
 
+	info->debug_classes = section_objs(info, "__dyndbg_classes",
+				   sizeof(*info->debug_classes), &info->num_debug_classes);
 	info->debug = section_objs(info, "__dyndbg",
 				   sizeof(*info->debug), &info->num_debug);
 
@@ -2783,7 +2786,8 @@ static int load_module(struct load_info *info, const char __user *uargs,
 	}
 
 	init_build_id(mod, info);
-	dynamic_debug_setup(mod, info->debug, info->num_debug);
+	dynamic_debug_setup(mod, info->debug, info->num_debug,
+			    info->debug_classes, info->num_debug_classes);
 
 	/* Ftrace init must be called in the MODULE_STATE_UNFORMED state */
 	ftrace_module_init(mod);
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index e96dc216463b..b6d80ba25bf5 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -41,6 +41,8 @@
 
 extern struct _ddebug __start___dyndbg[];
 extern struct _ddebug __stop___dyndbg[];
+extern struct ddebug_class_map __start___dyndbg_classes[];
+extern struct ddebug_class_map __stop___dyndbg_classes[];
 
 struct ddebug_table {
 	struct list_head link;
@@ -923,8 +925,9 @@ static const struct proc_ops proc_fops = {
  * Allocate a new ddebug_table for the given module
  * and add it to the global list.
  */
-int ddebug_add_module(struct _ddebug *tab, unsigned int n,
-			     const char *name)
+int ddebug_add_module(struct _ddebug *tab, unsigned int num_debugs,
+		      struct ddebug_class_map *classes, unsigned int num_classes,
+		      const char *name)
 {
 	struct ddebug_table *dt;
 
@@ -940,14 +943,14 @@ int ddebug_add_module(struct _ddebug *tab, unsigned int n,
 	 * this struct ddebug_table.
 	 */
 	dt->mod_name = name;
-	dt->num_ddebugs = n;
+	dt->num_ddebugs = num_debugs;
 	dt->ddebugs = tab;
 
 	mutex_lock(&ddebug_lock);
 	list_add_tail(&dt->link, &ddebug_tables);
 	mutex_unlock(&ddebug_lock);
 
-	vpr_info("%3u debug prints in module %s\n", n, dt->mod_name);
+	vpr_info("%3u debug prints in module %s\n", num_debugs, dt->mod_name);
 	return 0;
 }
 
@@ -1064,6 +1067,7 @@ static int __init dynamic_debug_init(void)
 	char *cmdline;
 	int ret = 0;
 	int n = 0, entries = 0, modct = 0;
+	int num_classes = __stop___dyndbg_classes - __start___dyndbg_classes;
 
 	if (&__start___dyndbg == &__stop___dyndbg) {
 		if (IS_ENABLED(CONFIG_DYNAMIC_DEBUG)) {
@@ -1081,7 +1085,9 @@ static int __init dynamic_debug_init(void)
 		entries++;
 		if (strcmp(modname, iter->modname)) {
 			modct++;
-			ret = ddebug_add_module(iter_start, n, modname);
+			ret = ddebug_add_module(iter_start, n,
+						__start___dyndbg_classes, num_classes,
+						modname);
 			if (ret)
 				goto out_err;
 			n = 0;
@@ -1090,7 +1096,8 @@ static int __init dynamic_debug_init(void)
 		}
 		n++;
 	}
-	ret = ddebug_add_module(iter_start, n, modname);
+	ret = ddebug_add_module(iter_start, n,
+				__start___dyndbg_classes, num_classes, modname);
 	if (ret)
 		goto out_err;
 
@@ -1099,6 +1106,9 @@ static int __init dynamic_debug_init(void)
 		 entries, modct, (int)((modct * sizeof(struct ddebug_table)) >> 10),
 		 (int)((entries * sizeof(struct _ddebug)) >> 10));
 
+	if (num_classes)
+		v2pr_info("  %d builtin ddebug class-maps\n", num_classes);
+
 	/* now that ddebug tables are loaded, process all boot args
 	 * again to find and activate queries given in dyndbg params.
 	 * While this has already been done for known boot params, it
-- 
2.36.1


WARNING: multiple messages have this Message-ID (diff)
From: Jim Cromie <jim.cromie@gmail.com>
To: jbaron@akamai.com
Cc: Jim Cromie <jim.cromie@gmail.com>,
	nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Subject: [Nouveau] [PATCH v3 13/41] kernel/module: add __dyndbg_classes section
Date: Mon, 18 Jul 2022 00:35:57 -0600	[thread overview]
Message-ID: <20220718063641.9179-14-jim.cromie@gmail.com> (raw)
In-Reply-To: <20220718063641.9179-1-jim.cromie@gmail.com>

Like existing sections, particularly __dyndbg, this new one is an
array/address and its length.  In a close imitation of __dyndbg
handling, these are defined, then passed around, as follows:

vmlinux.lds.h:

KEEP the new section, which also silences orphan section warning on
loadable modules.  Add (__start_/__stop_)__dyndbg_classes linker
symbols for the c externs (below).

kernel/module/internal.h:
- add new fields for classes,length to struct load_info,

kernel/module.c:
- fill new fields in find_module_sections(), using section_objs()
- extend callchain prototypes
  to pass classes, length
  load_module(): pass new info to dynamic_debug_setup()
  dynamic_debug_setup(): new params, pass through to ddebug_add_module()

dynamic_debug.c:
- add externs to the linker symbols.

ddebug_add_module(): add params for classes, length.
- It currently builds a debug_table, and *will* find and attach classes.

dynamic_debug_init(): compute num_classes from linker symbols, and add
new _start, num_classes params to ddebug_add_module() calls.

Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
 include/asm-generic/vmlinux.lds.h |  3 +++
 include/linux/dynamic_debug.h     |  9 ++++++---
 kernel/module/internal.h          |  2 ++
 kernel/module/main.c              | 10 +++++++---
 lib/dynamic_debug.c               | 22 ++++++++++++++++------
 5 files changed, 34 insertions(+), 12 deletions(-)

diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 7515a465ec03..9b8bd5504ad9 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -345,6 +345,9 @@
 	*(__tracepoints)						\
 	/* implement dynamic printk debug */				\
 	. = ALIGN(8);							\
+	__start___dyndbg_classes = .;					\
+	KEEP(*(__dyndbg_classes))					\
+	__stop___dyndbg_classes = .;					\
 	__start___dyndbg = .;						\
 	KEEP(*(__dyndbg))						\
 	__stop___dyndbg = .;						\
diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
index 84e97cd0e8c4..f57076e02767 100644
--- a/include/linux/dynamic_debug.h
+++ b/include/linux/dynamic_debug.h
@@ -115,8 +115,10 @@ struct ddebug_class_map {
 
 #if defined(CONFIG_DYNAMIC_DEBUG_CORE)
 
-int ddebug_add_module(struct _ddebug *tab, unsigned int n,
-				const char *modname);
+int ddebug_add_module(struct _ddebug *tab, unsigned int num_debugs,
+		      struct ddebug_class_map *classes, unsigned int num_classes,
+		      const char *modname);
+
 extern int ddebug_remove_module(const char *mod_name);
 extern __printf(2, 3)
 void __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...);
@@ -285,7 +287,8 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor,
 #include <linux/errno.h>
 #include <linux/printk.h>
 
-static inline int ddebug_add_module(struct _ddebug *tab, unsigned int n,
+static inline int ddebug_add_module(struct _ddebug *tab, unsigned int num_debugs,
+				    struct ddebug_class_map *classes, unsigned int num_classes,
 				    const char *modname)
 {
 	return 0;
diff --git a/kernel/module/internal.h b/kernel/module/internal.h
index bc5507ab8450..02601dfe452b 100644
--- a/kernel/module/internal.h
+++ b/kernel/module/internal.h
@@ -60,7 +60,9 @@ struct load_info {
 	char *secstrings, *strtab;
 	unsigned long symoffs, stroffs, init_typeoffs, core_typeoffs;
 	struct _ddebug *debug;
+	struct ddebug_class_map *debug_classes;
 	unsigned int num_debug;
+	unsigned int num_debug_classes;
 	bool sig_ok;
 #ifdef CONFIG_KALLSYMS
 	unsigned long mod_kallsyms_init_off;
diff --git a/kernel/module/main.c b/kernel/module/main.c
index fed58d30725d..0f8e888908df 100644
--- a/kernel/module/main.c
+++ b/kernel/module/main.c
@@ -1593,11 +1593,12 @@ static void free_modinfo(struct module *mod)
 	}
 }
 
-static void dynamic_debug_setup(struct module *mod, struct _ddebug *debug, unsigned int num)
+static void dynamic_debug_setup(struct module *mod, struct _ddebug *debug, unsigned int num,
+				struct ddebug_class_map *classes, unsigned int num_classes)
 {
 	if (!debug)
 		return;
-	ddebug_add_module(debug, num, mod->name);
+	ddebug_add_module(debug, num, classes, num_classes, mod->name);
 }
 
 static void dynamic_debug_remove(struct module *mod, struct _ddebug *debug)
@@ -2093,6 +2094,8 @@ static int find_module_sections(struct module *mod, struct load_info *info)
 	if (section_addr(info, "__obsparm"))
 		pr_warn("%s: Ignoring obsolete parameters\n", mod->name);
 
+	info->debug_classes = section_objs(info, "__dyndbg_classes",
+				   sizeof(*info->debug_classes), &info->num_debug_classes);
 	info->debug = section_objs(info, "__dyndbg",
 				   sizeof(*info->debug), &info->num_debug);
 
@@ -2783,7 +2786,8 @@ static int load_module(struct load_info *info, const char __user *uargs,
 	}
 
 	init_build_id(mod, info);
-	dynamic_debug_setup(mod, info->debug, info->num_debug);
+	dynamic_debug_setup(mod, info->debug, info->num_debug,
+			    info->debug_classes, info->num_debug_classes);
 
 	/* Ftrace init must be called in the MODULE_STATE_UNFORMED state */
 	ftrace_module_init(mod);
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index e96dc216463b..b6d80ba25bf5 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -41,6 +41,8 @@
 
 extern struct _ddebug __start___dyndbg[];
 extern struct _ddebug __stop___dyndbg[];
+extern struct ddebug_class_map __start___dyndbg_classes[];
+extern struct ddebug_class_map __stop___dyndbg_classes[];
 
 struct ddebug_table {
 	struct list_head link;
@@ -923,8 +925,9 @@ static const struct proc_ops proc_fops = {
  * Allocate a new ddebug_table for the given module
  * and add it to the global list.
  */
-int ddebug_add_module(struct _ddebug *tab, unsigned int n,
-			     const char *name)
+int ddebug_add_module(struct _ddebug *tab, unsigned int num_debugs,
+		      struct ddebug_class_map *classes, unsigned int num_classes,
+		      const char *name)
 {
 	struct ddebug_table *dt;
 
@@ -940,14 +943,14 @@ int ddebug_add_module(struct _ddebug *tab, unsigned int n,
 	 * this struct ddebug_table.
 	 */
 	dt->mod_name = name;
-	dt->num_ddebugs = n;
+	dt->num_ddebugs = num_debugs;
 	dt->ddebugs = tab;
 
 	mutex_lock(&ddebug_lock);
 	list_add_tail(&dt->link, &ddebug_tables);
 	mutex_unlock(&ddebug_lock);
 
-	vpr_info("%3u debug prints in module %s\n", n, dt->mod_name);
+	vpr_info("%3u debug prints in module %s\n", num_debugs, dt->mod_name);
 	return 0;
 }
 
@@ -1064,6 +1067,7 @@ static int __init dynamic_debug_init(void)
 	char *cmdline;
 	int ret = 0;
 	int n = 0, entries = 0, modct = 0;
+	int num_classes = __stop___dyndbg_classes - __start___dyndbg_classes;
 
 	if (&__start___dyndbg == &__stop___dyndbg) {
 		if (IS_ENABLED(CONFIG_DYNAMIC_DEBUG)) {
@@ -1081,7 +1085,9 @@ static int __init dynamic_debug_init(void)
 		entries++;
 		if (strcmp(modname, iter->modname)) {
 			modct++;
-			ret = ddebug_add_module(iter_start, n, modname);
+			ret = ddebug_add_module(iter_start, n,
+						__start___dyndbg_classes, num_classes,
+						modname);
 			if (ret)
 				goto out_err;
 			n = 0;
@@ -1090,7 +1096,8 @@ static int __init dynamic_debug_init(void)
 		}
 		n++;
 	}
-	ret = ddebug_add_module(iter_start, n, modname);
+	ret = ddebug_add_module(iter_start, n,
+				__start___dyndbg_classes, num_classes, modname);
 	if (ret)
 		goto out_err;
 
@@ -1099,6 +1106,9 @@ static int __init dynamic_debug_init(void)
 		 entries, modct, (int)((modct * sizeof(struct ddebug_table)) >> 10),
 		 (int)((entries * sizeof(struct _ddebug)) >> 10));
 
+	if (num_classes)
+		v2pr_info("  %d builtin ddebug class-maps\n", num_classes);
+
 	/* now that ddebug tables are loaded, process all boot args
 	 * again to find and activate queries given in dyndbg params.
 	 * While this has already been done for known boot params, it
-- 
2.36.1


  parent reply	other threads:[~2022-07-18  6:39 UTC|newest]

Thread overview: 235+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-18  6:35 [PATCH v3 00/41] DYNDBG: opt-in class'd debug for modules, use in drm Jim Cromie
2022-07-18  6:35 ` [Nouveau] " Jim Cromie
2022-07-18  6:35 ` Jim Cromie
2022-07-18  6:35 ` [Intel-gfx] " Jim Cromie
2022-07-18  6:35 ` [PATCH v3 01/41] dyndbg: fix static_branch manipulation Jim Cromie
2022-07-18  6:35   ` [Nouveau] " Jim Cromie
2022-07-18  6:35   ` Jim Cromie
2022-07-18  6:35   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:35 ` [PATCH v3 02/41] dyndbg: fix module.dyndbg handling Jim Cromie
2022-07-18  6:35   ` [Nouveau] " Jim Cromie
2022-07-18  6:35   ` Jim Cromie
2022-07-18  6:35   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:35 ` [PATCH v3 03/41] dyndbg: show both old and new in change-info Jim Cromie
2022-07-18  6:35   ` [Nouveau] " Jim Cromie
2022-07-18  6:35   ` Jim Cromie
2022-07-18  6:35   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:35 ` [PATCH v3 04/41] dyndbg: reverse module walk in cat control Jim Cromie
2022-07-18  6:35   ` [Nouveau] " Jim Cromie
2022-07-18  6:35   ` Jim Cromie
2022-07-18  6:35   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:35 ` [Intel-gfx] [PATCH v3 05/41] dyndbg: reverse module.callsite " Jim Cromie
2022-07-18  6:35   ` [Nouveau] " Jim Cromie
2022-07-18  6:35   ` Jim Cromie
2022-07-18  6:35   ` Jim Cromie
2022-07-18  6:35 ` [Intel-gfx] [PATCH v3 06/41] dyndbg: use ESCAPE_SPACE for " Jim Cromie
2022-07-18  6:35   ` [Nouveau] " Jim Cromie
2022-07-18  6:35   ` Jim Cromie
2022-07-18  6:35   ` Jim Cromie
2022-07-18  6:35 ` [PATCH v3 07/41] dyndbg: let query-modname override actual module name Jim Cromie
2022-07-18  6:35   ` [Nouveau] " Jim Cromie
2022-07-18  6:35   ` Jim Cromie
2022-07-18  6:35   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:35 ` [PATCH v3 08/41] dyndbg: add test_dynamic_debug module Jim Cromie
2022-07-18  6:35   ` [Nouveau] " Jim Cromie
2022-07-18  6:35   ` Jim Cromie
2022-07-18  6:35   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:35 ` [PATCH v3 09/41] dyndbg: drop EXPORTed dynamic_debug_exec_queries Jim Cromie
2022-07-18  6:35   ` [Nouveau] " Jim Cromie
2022-07-18  6:35   ` Jim Cromie
2022-07-18  6:35   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:35 ` [PATCH v3 10/41] dyndbg: add class_id to pr_debug callsites Jim Cromie
2022-07-18  6:35   ` [Nouveau] " Jim Cromie
2022-07-18  6:35   ` Jim Cromie
2022-07-18  6:35   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:35 ` [PATCH v3 11/41] dyndbg: add __pr_debug_cls for testing Jim Cromie
2022-07-18  6:35   ` [Nouveau] " Jim Cromie
2022-07-18  6:35   ` Jim Cromie
2022-07-18  6:35   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:35 ` [PATCH v3 12/41] dyndbg: add DECLARE_DYNDBG_CLASSMAP Jim Cromie
2022-07-18  6:35   ` [Nouveau] " Jim Cromie
2022-07-18  6:35   ` Jim Cromie
2022-07-18  6:35   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:35 ` Jim Cromie [this message]
2022-07-18  6:35   ` [Nouveau] [PATCH v3 13/41] kernel/module: add __dyndbg_classes section Jim Cromie
2022-07-18  6:35   ` Jim Cromie
2022-07-18  6:35   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:35 ` [Intel-gfx] [PATCH v3 14/41] dyndbg: add ddebug_attach_module_classes Jim Cromie
2022-07-18  6:35   ` [Nouveau] " Jim Cromie
2022-07-18  6:35   ` Jim Cromie
2022-07-18  6:35   ` Jim Cromie
2022-07-18  6:35 ` [Intel-gfx] [PATCH v3 15/41] dyndbg: validate class FOO by checking with module Jim Cromie
2022-07-18  6:35   ` [Nouveau] " Jim Cromie
2022-07-18  6:35   ` Jim Cromie
2022-07-18  6:35   ` Jim Cromie
2022-07-18  6:36 ` [PATCH v3 16/41] dyndbg: add drm.debug style bitmap support Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36 ` [PATCH v3 17/41] dyndbg: test DECLARE_DYNDBG_CLASSMAP, sysfs nodes Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36 ` [PATCH v3 18/41] doc-dyndbg: describe "class CLASS_NAME" query support Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36 ` [PATCH v3 19/41] doc-dyndbg: edit dynamic-debug-howto for brevity, audience Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36 ` [Intel-gfx] [PATCH v3 20/41] drm_print: condense enum drm_debug_category Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36 ` [PATCH v3 21/41] drm: POC drm on dyndbg - use in core, 2 helpers, 3 drivers Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36 ` [Intel-gfx] [PATCH v3 22/41] drm_print: interpose drm_*dbg with forwarding macros Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36 ` [Intel-gfx] [PATCH v3 23/41] drm_print: wrap drm_*_dbg in dyndbg descriptor factory macro Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36 ` [Intel-gfx] [PATCH v3 24/41] drm-print: add drm_dbg_driver to improve namespace symmetry Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36 ` [Intel-gfx] [PATCH v3 24/39] drm-print: include dyndbg header indirectly Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36 ` [PATCH v3 25/41] " Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36 ` [Intel-gfx] [PATCH v3 25/39] drm_print: refine drm_debug_enabled for jump-label Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36 ` [PATCH v3 26/39] drm_print: prefer bare printk KERN_DEBUG on generic fn Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36 ` [PATCH v3 26/41] drm_print: refine drm_debug_enabled for jump-label Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36 ` [Intel-gfx] [PATCH v3 27/39] drm_print: add _ddebug descriptor to drm_*dbg prototypes Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36 ` [PATCH v3 27/41] drm_print: prefer bare printk KERN_DEBUG on generic fn Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36 ` [PATCH v3 28/41] drm_print: add _ddebug descriptor to drm_*dbg prototypes Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36 ` [PATCH v3 28/39] nouveau: change nvkm_debug/trace to use dev_dbg POC Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36 ` [PATCH v3 29/39] dyndbg: add _DPRINTK_FLAGS_ENABLED Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36 ` [PATCH v3 29/41] nouveau: change nvkm_debug/trace to use dev_dbg POC Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36 ` [Intel-gfx] [PATCH v3 30/39] dyndbg: add _DPRINTK_FLAGS_TRACE Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36 ` [Intel-gfx] [PATCH v3 30/41] tracing/events: Add __vstring() and __assign_vstr() helper macros Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36 ` [PATCH v3 31/41] dyndbg: add _DPRINTK_FLAGS_ENABLED Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36 ` [PATCH v3 31/39] dyndbg: add write-events-to-tracefs code Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36 ` [Intel-gfx] [PATCH v3 32/39] dyndbg: 4 new trace-events: pr_debug, dev_dbg, drm_{, dev}debug Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36 ` [PATCH v3 32/41] dyndbg: add _DPRINTK_FLAGS_TRACE Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36 ` [PATCH v3 33/41] dyndbg: add write-events-to-tracefs code Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36 ` [PATCH v3 33/39] dyndbg/drm: POC add tracebits sysfs-knob Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36 ` [PATCH v3 34/39] drm-print: add drm_dbg_driver, improve namespace symmetry Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36 ` [PATCH v3 34/41] dyndbg: add 2 trace-events: drm_{,dev}debug Jim Cromie
2022-07-18  6:36   ` [Nouveau] [PATCH v3 34/41] dyndbg: add 2 trace-events: drm_{, dev}debug Jim Cromie
2022-07-18  6:36   ` [PATCH v3 34/41] dyndbg: add 2 trace-events: drm_{,dev}debug Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] [PATCH v3 34/41] dyndbg: add 2 trace-events: drm_{, dev}debug Jim Cromie
2022-07-18  6:36 ` [PATCH v3 35/41] dyndbg: add 2 more trace-events: pr_debug, dev_dbg Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36 ` [PATCH v3 35/39] nouveau: adapt NV_DEBUG, NV_ATOMIC to use DRM.debug Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36 ` [PATCH v3 36/41] dyndbg/drm: POC add tracebits sysfs-knob Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36 ` [PATCH v3 36/39] nv-subdev-debug Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36 ` [PATCH v3 37/41] nouveau: adapt NV_DEBUG, NV_ATOMIC to use DRM.debug Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36 ` [PATCH v3 37/39] nouveau-dbg: add 2 verbose-classmaps for CLI, SUBDEV Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36 ` [Intel-gfx] [PATCH v3 38/39] nouveau-dbg: fixup lost prdbgs Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36 ` [PATCH v3 38/41] nouveau-dyndbg: alter DEBUG, TRACE, SPAM levels to use dyndbg Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36 ` [PATCH v3 39/41] nouveau-dbg: add 2 verbose-classmaps for CLI, SUBDEV Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36 ` [Intel-gfx] [PATCH v3 39/39] wip subdev refine breaks on use Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36 ` [PATCH v3 40/41] nouveau-dbg: fixup lost prdbgs Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` [Intel-gfx] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36 ` [Intel-gfx] [PATCH v3 41/41] nouveau-dyndbg: wip subdev refine, breaks on use Jim Cromie
2022-07-18  6:36   ` [Nouveau] " Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:36   ` Jim Cromie
2022-07-18  6:46 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for DYNDBG: opt-in class'd debug for modules, use in drm Patchwork
2022-07-18  6:46 ` Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220718063641.9179-14-jim.cromie@gmail.com \
    --to=jim.cromie@gmail.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jbaron@akamai.com \
    --cc=nouveau@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.