All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jim Cromie <jim.cromie@gmail.com>
To: jbaron@akamai.com, linux-kernel@vger.kernel.org,
	dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org,
	intel-gvt-dev@lists.freedesktop.org,
	intel-gfx@lists.freedesktop.org
Cc: gregkh@linuxfoundation.org, daniel.vetter@ffwll.ch,
	seanpaul@chromium.org, robdclark@gmail.com, rostedt@goodmis.org,
	mathieu.desnoyers@efficios.com, quic_saipraka@quicinc.com,
	will@kernel.org, catalin.marinas@arm.com,
	quic_psodagud@quicinc.com, maz@kernel.org, arnd@arndb.de,
	linux-arm-kernel@lists.infradead.org,
	linux-arm-msm@vger.kernel.org, mingo@redhat.com,
	jim.cromie@gmail.com
Subject: [PATCH v2 08/27] dyndbg: add drm.debug style bitmap support
Date: Mon, 16 May 2022 16:56:21 -0600	[thread overview]
Message-ID: <20220516225640.3102269-9-jim.cromie@gmail.com> (raw)
In-Reply-To: <20220516225640.3102269-1-jim.cromie@gmail.com>

Add kernel_param_ops and callbacks to implement a bitmap in a
sysfs-node.  IE, add these:

 - int param_set_dyndbg_classes()
 - int param_get_dyndbg_classes()
 - struct kernel_param_ops param_ops_dyndbg_classes

Following the model of kernel/params.c STANDARD_PARAM_DEFS, these are
non-static and exported.

get/set use an augmented kernel_param; the arg refs a new struct
dyndbg_classes_param, initialized by the macro, containing:

BITS: a pointer to the user module's ulong holding the bits/state.
By ref'g the client's bit-state, we coordinate with existing code that
uses it, so it works unchanged; for example drm_debug_enabled().  The
change to ulong allows use of BIT() etc.

FLAGS: dyndbg.flags toggled by bit-changes. Usually just "p".

MAP: a pointer to struct ddebug_known_classes, which maps those
class-names to pr_debug.class_ids 0..N.

Using the sys-node, with dynamic_debug.verbose=1:

bash-5.1# echo 1 > /sys/module/drm/parameters/debug
[   29.821298] dyndbg: set_dyndbg_classes: new 0x1 current 0x0
[   29.822841] dyndbg: query 0: "class DRM_UT_CORE +p" mod:*
[   29.824348] dyndbg: no matches for query
[   29.825428] dyndbg: total matches: 0

Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
 include/linux/dynamic_debug.h | 17 ++++++++
 lib/dynamic_debug.c           | 81 +++++++++++++++++++++++++++++++++++
 2 files changed, 98 insertions(+)

diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
index 328722ba2d8e..e9e6d0f503f3 100644
--- a/include/linux/dynamic_debug.h
+++ b/include/linux/dynamic_debug.h
@@ -85,6 +85,11 @@ struct ddebug_known_classes_map {
 		.classes = { __VA_ARGS__ }				\
 	}
 
+struct ddebug_classes_bitmap_param {
+	unsigned long *bits;
+	char flags[8];
+	const struct ddebug_known_classes_map *map;
+};
 
 #if defined(CONFIG_DYNAMIC_DEBUG_CORE)
 
@@ -237,6 +242,10 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor,
 int  dynamic_debug_register_classes(struct ddebug_known_classes_map *map);
 void dynamic_debug_unregister_classes(struct ddebug_known_classes_map *map);
 
+struct kernel_param;
+int param_set_dyndbg_classes(const char *instr, const struct kernel_param *kp);
+int param_get_dyndbg_classes(char *buffer, const struct kernel_param *kp);
+
 #else /* !CONFIG_DYNAMIC_DEBUG_CORE */
 
 #include <linux/string.h>
@@ -283,6 +292,14 @@ static inline int dynamic_debug_register_classes(const struct ddebug_known_class
 static inline void dynamic_debug_unregister_classes(struct ddebug_known_classes_map *map)
 {}
 
+struct kernel_param;
+static inline int param_set_dyndbg_classes(const char *instr, const struct kernel_param *kp)
+{ return 0; }
+static inline int param_get_dyndbg_classes(char *buffer, const struct kernel_param *kp)
+{ return 0; }
+
 #endif /* !CONFIG_DYNAMIC_DEBUG_CORE */
 
+extern const struct kernel_param_ops param_ops_dyndbg_classes;
+
 #endif
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index b1aaf8893cdf..b67bf9efec07 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -597,6 +597,87 @@ static int ddebug_exec_queries(char *query, const char *modname)
 	return nfound;
 }
 
+static int do_callback_changes(const struct ddebug_classes_bitmap_param *dcp,
+			       int bitpos, unsigned long *inbits)
+{
+#define QUERY_SIZE 128
+	char query[QUERY_SIZE];
+	int matches;
+
+	snprintf(query, QUERY_SIZE, "class %s %c%s", dcp->map->classes[bitpos],
+		 test_bit(bitpos, inbits) ? '+' : '-', dcp->flags);
+
+	matches = ddebug_exec_queries(query, NULL);
+
+	v2pr_info("bit-%d: %d matches on class:%s\n", bitpos,
+		  matches, dcp->map->classes[bitpos]);
+
+	return matches;
+}
+
+/**
+ * param_set_dyndbg_classes - bits => categories >control setter
+ * @instr: string echo>d to sysfs
+ * @kp:    kp->arg has state: bits, map
+ *
+ * Enable/disable prdbgs by their "category", as specified in the
+ * arguments to DEFINE_DYNAMIC_DEBUG_CLASSES.
+ *
+ * Returns: 0 or <0 if error.
+ */
+int param_set_dyndbg_classes(const char *instr, const struct kernel_param *kp)
+{
+	const struct ddebug_classes_bitmap_param *dcp = kp->arg;
+	unsigned long inbits;
+	int rc, i, totct = 0;
+
+	if (!dcp || !dcp->map) {
+		pr_err("set_dyndbg_classes: no bits=>queries map\n");
+		return -EINVAL;
+	}
+	rc = kstrtoul(instr, 0, &inbits);
+	if (rc) {
+		pr_err("set_dyndbg_classes: expecting bits/integer\n");
+		return -EINVAL;
+	}
+	vpr_info("set_dyndbg_classes: new 0x%lx current 0x%lx\n", inbits, *dcp->bits);
+
+	for (i = 0; i < dcp->map->length; i++) {
+
+		if (test_bit(i, &inbits) == test_bit(i, dcp->bits))
+			continue;
+
+		totct += do_callback_changes(dcp, i, &inbits);
+	}
+	*dcp->bits = inbits;
+	vpr_info("total matches: %d\n", totct);
+	return 0;
+}
+EXPORT_SYMBOL(param_set_dyndbg_classes);
+
+/**
+ * param_get_dyndbg_classes - classes reader
+ * @buffer: string description of controlled bits -> classes
+ * @kp:     kp->arg has state: bits, map
+ *
+ * Reads last written bits, underlying prdbg state may have changed since.
+ * Returns: #chars written or <0 on error
+ */
+int param_get_dyndbg_classes(char *buffer, const struct kernel_param *kp)
+{
+	const struct ddebug_classes_bitmap_param *p = kp->arg;
+	unsigned long val = *p->bits;
+
+	return scnprintf(buffer, PAGE_SIZE, "0x%lx\n", val);
+}
+EXPORT_SYMBOL(param_get_dyndbg_classes);
+
+const struct kernel_param_ops param_ops_dyndbg_classes = {
+	.set = param_set_dyndbg_classes,
+	.get = param_get_dyndbg_classes,
+};
+EXPORT_SYMBOL(param_ops_dyndbg_classes);
+
 #define PREFIX_SIZE 64
 
 static int remaining(int wrote)
-- 
2.35.3


WARNING: multiple messages have this Message-ID (diff)
From: Jim Cromie <jim.cromie@gmail.com>
To: jbaron@akamai.com, linux-kernel@vger.kernel.org,
	dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org,
	intel-gvt-dev@lists.freedesktop.org,
	intel-gfx@lists.freedesktop.org
Cc: maz@kernel.org, quic_saipraka@quicinc.com,
	catalin.marinas@arm.com, arnd@arndb.de,
	gregkh@linuxfoundation.org, linux-arm-msm@vger.kernel.org,
	rostedt@goodmis.org, mingo@redhat.com,
	mathieu.desnoyers@efficios.com, quic_psodagud@quicinc.com,
	daniel.vetter@ffwll.ch, seanpaul@chromium.org, will@kernel.org,
	linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 08/27] dyndbg: add drm.debug style bitmap support
Date: Mon, 16 May 2022 16:56:21 -0600	[thread overview]
Message-ID: <20220516225640.3102269-9-jim.cromie@gmail.com> (raw)
In-Reply-To: <20220516225640.3102269-1-jim.cromie@gmail.com>

Add kernel_param_ops and callbacks to implement a bitmap in a
sysfs-node.  IE, add these:

 - int param_set_dyndbg_classes()
 - int param_get_dyndbg_classes()
 - struct kernel_param_ops param_ops_dyndbg_classes

Following the model of kernel/params.c STANDARD_PARAM_DEFS, these are
non-static and exported.

get/set use an augmented kernel_param; the arg refs a new struct
dyndbg_classes_param, initialized by the macro, containing:

BITS: a pointer to the user module's ulong holding the bits/state.
By ref'g the client's bit-state, we coordinate with existing code that
uses it, so it works unchanged; for example drm_debug_enabled().  The
change to ulong allows use of BIT() etc.

FLAGS: dyndbg.flags toggled by bit-changes. Usually just "p".

MAP: a pointer to struct ddebug_known_classes, which maps those
class-names to pr_debug.class_ids 0..N.

Using the sys-node, with dynamic_debug.verbose=1:

bash-5.1# echo 1 > /sys/module/drm/parameters/debug
[   29.821298] dyndbg: set_dyndbg_classes: new 0x1 current 0x0
[   29.822841] dyndbg: query 0: "class DRM_UT_CORE +p" mod:*
[   29.824348] dyndbg: no matches for query
[   29.825428] dyndbg: total matches: 0

Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
 include/linux/dynamic_debug.h | 17 ++++++++
 lib/dynamic_debug.c           | 81 +++++++++++++++++++++++++++++++++++
 2 files changed, 98 insertions(+)

diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
index 328722ba2d8e..e9e6d0f503f3 100644
--- a/include/linux/dynamic_debug.h
+++ b/include/linux/dynamic_debug.h
@@ -85,6 +85,11 @@ struct ddebug_known_classes_map {
 		.classes = { __VA_ARGS__ }				\
 	}
 
+struct ddebug_classes_bitmap_param {
+	unsigned long *bits;
+	char flags[8];
+	const struct ddebug_known_classes_map *map;
+};
 
 #if defined(CONFIG_DYNAMIC_DEBUG_CORE)
 
@@ -237,6 +242,10 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor,
 int  dynamic_debug_register_classes(struct ddebug_known_classes_map *map);
 void dynamic_debug_unregister_classes(struct ddebug_known_classes_map *map);
 
+struct kernel_param;
+int param_set_dyndbg_classes(const char *instr, const struct kernel_param *kp);
+int param_get_dyndbg_classes(char *buffer, const struct kernel_param *kp);
+
 #else /* !CONFIG_DYNAMIC_DEBUG_CORE */
 
 #include <linux/string.h>
@@ -283,6 +292,14 @@ static inline int dynamic_debug_register_classes(const struct ddebug_known_class
 static inline void dynamic_debug_unregister_classes(struct ddebug_known_classes_map *map)
 {}
 
+struct kernel_param;
+static inline int param_set_dyndbg_classes(const char *instr, const struct kernel_param *kp)
+{ return 0; }
+static inline int param_get_dyndbg_classes(char *buffer, const struct kernel_param *kp)
+{ return 0; }
+
 #endif /* !CONFIG_DYNAMIC_DEBUG_CORE */
 
+extern const struct kernel_param_ops param_ops_dyndbg_classes;
+
 #endif
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index b1aaf8893cdf..b67bf9efec07 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -597,6 +597,87 @@ static int ddebug_exec_queries(char *query, const char *modname)
 	return nfound;
 }
 
+static int do_callback_changes(const struct ddebug_classes_bitmap_param *dcp,
+			       int bitpos, unsigned long *inbits)
+{
+#define QUERY_SIZE 128
+	char query[QUERY_SIZE];
+	int matches;
+
+	snprintf(query, QUERY_SIZE, "class %s %c%s", dcp->map->classes[bitpos],
+		 test_bit(bitpos, inbits) ? '+' : '-', dcp->flags);
+
+	matches = ddebug_exec_queries(query, NULL);
+
+	v2pr_info("bit-%d: %d matches on class:%s\n", bitpos,
+		  matches, dcp->map->classes[bitpos]);
+
+	return matches;
+}
+
+/**
+ * param_set_dyndbg_classes - bits => categories >control setter
+ * @instr: string echo>d to sysfs
+ * @kp:    kp->arg has state: bits, map
+ *
+ * Enable/disable prdbgs by their "category", as specified in the
+ * arguments to DEFINE_DYNAMIC_DEBUG_CLASSES.
+ *
+ * Returns: 0 or <0 if error.
+ */
+int param_set_dyndbg_classes(const char *instr, const struct kernel_param *kp)
+{
+	const struct ddebug_classes_bitmap_param *dcp = kp->arg;
+	unsigned long inbits;
+	int rc, i, totct = 0;
+
+	if (!dcp || !dcp->map) {
+		pr_err("set_dyndbg_classes: no bits=>queries map\n");
+		return -EINVAL;
+	}
+	rc = kstrtoul(instr, 0, &inbits);
+	if (rc) {
+		pr_err("set_dyndbg_classes: expecting bits/integer\n");
+		return -EINVAL;
+	}
+	vpr_info("set_dyndbg_classes: new 0x%lx current 0x%lx\n", inbits, *dcp->bits);
+
+	for (i = 0; i < dcp->map->length; i++) {
+
+		if (test_bit(i, &inbits) == test_bit(i, dcp->bits))
+			continue;
+
+		totct += do_callback_changes(dcp, i, &inbits);
+	}
+	*dcp->bits = inbits;
+	vpr_info("total matches: %d\n", totct);
+	return 0;
+}
+EXPORT_SYMBOL(param_set_dyndbg_classes);
+
+/**
+ * param_get_dyndbg_classes - classes reader
+ * @buffer: string description of controlled bits -> classes
+ * @kp:     kp->arg has state: bits, map
+ *
+ * Reads last written bits, underlying prdbg state may have changed since.
+ * Returns: #chars written or <0 on error
+ */
+int param_get_dyndbg_classes(char *buffer, const struct kernel_param *kp)
+{
+	const struct ddebug_classes_bitmap_param *p = kp->arg;
+	unsigned long val = *p->bits;
+
+	return scnprintf(buffer, PAGE_SIZE, "0x%lx\n", val);
+}
+EXPORT_SYMBOL(param_get_dyndbg_classes);
+
+const struct kernel_param_ops param_ops_dyndbg_classes = {
+	.set = param_set_dyndbg_classes,
+	.get = param_get_dyndbg_classes,
+};
+EXPORT_SYMBOL(param_ops_dyndbg_classes);
+
 #define PREFIX_SIZE 64
 
 static int remaining(int wrote)
-- 
2.35.3


WARNING: multiple messages have this Message-ID (diff)
From: Jim Cromie <jim.cromie@gmail.com>
To: jbaron@akamai.com, linux-kernel@vger.kernel.org,
	dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org,
	intel-gvt-dev@lists.freedesktop.org,
	intel-gfx@lists.freedesktop.org
Cc: maz@kernel.org, quic_saipraka@quicinc.com,
	catalin.marinas@arm.com, arnd@arndb.de, jim.cromie@gmail.com,
	gregkh@linuxfoundation.org, linux-arm-msm@vger.kernel.org,
	rostedt@goodmis.org, mingo@redhat.com,
	mathieu.desnoyers@efficios.com, quic_psodagud@quicinc.com,
	daniel.vetter@ffwll.ch, seanpaul@chromium.org, will@kernel.org,
	linux-arm-kernel@lists.infradead.org
Subject: [Intel-gfx] [PATCH v2 08/27] dyndbg: add drm.debug style bitmap support
Date: Mon, 16 May 2022 16:56:21 -0600	[thread overview]
Message-ID: <20220516225640.3102269-9-jim.cromie@gmail.com> (raw)
In-Reply-To: <20220516225640.3102269-1-jim.cromie@gmail.com>

Add kernel_param_ops and callbacks to implement a bitmap in a
sysfs-node.  IE, add these:

 - int param_set_dyndbg_classes()
 - int param_get_dyndbg_classes()
 - struct kernel_param_ops param_ops_dyndbg_classes

Following the model of kernel/params.c STANDARD_PARAM_DEFS, these are
non-static and exported.

get/set use an augmented kernel_param; the arg refs a new struct
dyndbg_classes_param, initialized by the macro, containing:

BITS: a pointer to the user module's ulong holding the bits/state.
By ref'g the client's bit-state, we coordinate with existing code that
uses it, so it works unchanged; for example drm_debug_enabled().  The
change to ulong allows use of BIT() etc.

FLAGS: dyndbg.flags toggled by bit-changes. Usually just "p".

MAP: a pointer to struct ddebug_known_classes, which maps those
class-names to pr_debug.class_ids 0..N.

Using the sys-node, with dynamic_debug.verbose=1:

bash-5.1# echo 1 > /sys/module/drm/parameters/debug
[   29.821298] dyndbg: set_dyndbg_classes: new 0x1 current 0x0
[   29.822841] dyndbg: query 0: "class DRM_UT_CORE +p" mod:*
[   29.824348] dyndbg: no matches for query
[   29.825428] dyndbg: total matches: 0

Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
 include/linux/dynamic_debug.h | 17 ++++++++
 lib/dynamic_debug.c           | 81 +++++++++++++++++++++++++++++++++++
 2 files changed, 98 insertions(+)

diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
index 328722ba2d8e..e9e6d0f503f3 100644
--- a/include/linux/dynamic_debug.h
+++ b/include/linux/dynamic_debug.h
@@ -85,6 +85,11 @@ struct ddebug_known_classes_map {
 		.classes = { __VA_ARGS__ }				\
 	}
 
+struct ddebug_classes_bitmap_param {
+	unsigned long *bits;
+	char flags[8];
+	const struct ddebug_known_classes_map *map;
+};
 
 #if defined(CONFIG_DYNAMIC_DEBUG_CORE)
 
@@ -237,6 +242,10 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor,
 int  dynamic_debug_register_classes(struct ddebug_known_classes_map *map);
 void dynamic_debug_unregister_classes(struct ddebug_known_classes_map *map);
 
+struct kernel_param;
+int param_set_dyndbg_classes(const char *instr, const struct kernel_param *kp);
+int param_get_dyndbg_classes(char *buffer, const struct kernel_param *kp);
+
 #else /* !CONFIG_DYNAMIC_DEBUG_CORE */
 
 #include <linux/string.h>
@@ -283,6 +292,14 @@ static inline int dynamic_debug_register_classes(const struct ddebug_known_class
 static inline void dynamic_debug_unregister_classes(struct ddebug_known_classes_map *map)
 {}
 
+struct kernel_param;
+static inline int param_set_dyndbg_classes(const char *instr, const struct kernel_param *kp)
+{ return 0; }
+static inline int param_get_dyndbg_classes(char *buffer, const struct kernel_param *kp)
+{ return 0; }
+
 #endif /* !CONFIG_DYNAMIC_DEBUG_CORE */
 
+extern const struct kernel_param_ops param_ops_dyndbg_classes;
+
 #endif
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index b1aaf8893cdf..b67bf9efec07 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -597,6 +597,87 @@ static int ddebug_exec_queries(char *query, const char *modname)
 	return nfound;
 }
 
+static int do_callback_changes(const struct ddebug_classes_bitmap_param *dcp,
+			       int bitpos, unsigned long *inbits)
+{
+#define QUERY_SIZE 128
+	char query[QUERY_SIZE];
+	int matches;
+
+	snprintf(query, QUERY_SIZE, "class %s %c%s", dcp->map->classes[bitpos],
+		 test_bit(bitpos, inbits) ? '+' : '-', dcp->flags);
+
+	matches = ddebug_exec_queries(query, NULL);
+
+	v2pr_info("bit-%d: %d matches on class:%s\n", bitpos,
+		  matches, dcp->map->classes[bitpos]);
+
+	return matches;
+}
+
+/**
+ * param_set_dyndbg_classes - bits => categories >control setter
+ * @instr: string echo>d to sysfs
+ * @kp:    kp->arg has state: bits, map
+ *
+ * Enable/disable prdbgs by their "category", as specified in the
+ * arguments to DEFINE_DYNAMIC_DEBUG_CLASSES.
+ *
+ * Returns: 0 or <0 if error.
+ */
+int param_set_dyndbg_classes(const char *instr, const struct kernel_param *kp)
+{
+	const struct ddebug_classes_bitmap_param *dcp = kp->arg;
+	unsigned long inbits;
+	int rc, i, totct = 0;
+
+	if (!dcp || !dcp->map) {
+		pr_err("set_dyndbg_classes: no bits=>queries map\n");
+		return -EINVAL;
+	}
+	rc = kstrtoul(instr, 0, &inbits);
+	if (rc) {
+		pr_err("set_dyndbg_classes: expecting bits/integer\n");
+		return -EINVAL;
+	}
+	vpr_info("set_dyndbg_classes: new 0x%lx current 0x%lx\n", inbits, *dcp->bits);
+
+	for (i = 0; i < dcp->map->length; i++) {
+
+		if (test_bit(i, &inbits) == test_bit(i, dcp->bits))
+			continue;
+
+		totct += do_callback_changes(dcp, i, &inbits);
+	}
+	*dcp->bits = inbits;
+	vpr_info("total matches: %d\n", totct);
+	return 0;
+}
+EXPORT_SYMBOL(param_set_dyndbg_classes);
+
+/**
+ * param_get_dyndbg_classes - classes reader
+ * @buffer: string description of controlled bits -> classes
+ * @kp:     kp->arg has state: bits, map
+ *
+ * Reads last written bits, underlying prdbg state may have changed since.
+ * Returns: #chars written or <0 on error
+ */
+int param_get_dyndbg_classes(char *buffer, const struct kernel_param *kp)
+{
+	const struct ddebug_classes_bitmap_param *p = kp->arg;
+	unsigned long val = *p->bits;
+
+	return scnprintf(buffer, PAGE_SIZE, "0x%lx\n", val);
+}
+EXPORT_SYMBOL(param_get_dyndbg_classes);
+
+const struct kernel_param_ops param_ops_dyndbg_classes = {
+	.set = param_set_dyndbg_classes,
+	.get = param_get_dyndbg_classes,
+};
+EXPORT_SYMBOL(param_ops_dyndbg_classes);
+
 #define PREFIX_SIZE 64
 
 static int remaining(int wrote)
-- 
2.35.3


WARNING: multiple messages have this Message-ID (diff)
From: Jim Cromie <jim.cromie@gmail.com>
To: jbaron@akamai.com, linux-kernel@vger.kernel.org,
	dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org,
	intel-gvt-dev@lists.freedesktop.org,
	intel-gfx@lists.freedesktop.org
Cc: maz@kernel.org, quic_saipraka@quicinc.com,
	catalin.marinas@arm.com, arnd@arndb.de, jim.cromie@gmail.com,
	gregkh@linuxfoundation.org, linux-arm-msm@vger.kernel.org,
	rostedt@goodmis.org, robdclark@gmail.com, mingo@redhat.com,
	mathieu.desnoyers@efficios.com, quic_psodagud@quicinc.com,
	daniel.vetter@ffwll.ch, seanpaul@chromium.org, will@kernel.org,
	linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 08/27] dyndbg: add drm.debug style bitmap support
Date: Mon, 16 May 2022 16:56:21 -0600	[thread overview]
Message-ID: <20220516225640.3102269-9-jim.cromie@gmail.com> (raw)
In-Reply-To: <20220516225640.3102269-1-jim.cromie@gmail.com>

Add kernel_param_ops and callbacks to implement a bitmap in a
sysfs-node.  IE, add these:

 - int param_set_dyndbg_classes()
 - int param_get_dyndbg_classes()
 - struct kernel_param_ops param_ops_dyndbg_classes

Following the model of kernel/params.c STANDARD_PARAM_DEFS, these are
non-static and exported.

get/set use an augmented kernel_param; the arg refs a new struct
dyndbg_classes_param, initialized by the macro, containing:

BITS: a pointer to the user module's ulong holding the bits/state.
By ref'g the client's bit-state, we coordinate with existing code that
uses it, so it works unchanged; for example drm_debug_enabled().  The
change to ulong allows use of BIT() etc.

FLAGS: dyndbg.flags toggled by bit-changes. Usually just "p".

MAP: a pointer to struct ddebug_known_classes, which maps those
class-names to pr_debug.class_ids 0..N.

Using the sys-node, with dynamic_debug.verbose=1:

bash-5.1# echo 1 > /sys/module/drm/parameters/debug
[   29.821298] dyndbg: set_dyndbg_classes: new 0x1 current 0x0
[   29.822841] dyndbg: query 0: "class DRM_UT_CORE +p" mod:*
[   29.824348] dyndbg: no matches for query
[   29.825428] dyndbg: total matches: 0

Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
 include/linux/dynamic_debug.h | 17 ++++++++
 lib/dynamic_debug.c           | 81 +++++++++++++++++++++++++++++++++++
 2 files changed, 98 insertions(+)

diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
index 328722ba2d8e..e9e6d0f503f3 100644
--- a/include/linux/dynamic_debug.h
+++ b/include/linux/dynamic_debug.h
@@ -85,6 +85,11 @@ struct ddebug_known_classes_map {
 		.classes = { __VA_ARGS__ }				\
 	}
 
+struct ddebug_classes_bitmap_param {
+	unsigned long *bits;
+	char flags[8];
+	const struct ddebug_known_classes_map *map;
+};
 
 #if defined(CONFIG_DYNAMIC_DEBUG_CORE)
 
@@ -237,6 +242,10 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor,
 int  dynamic_debug_register_classes(struct ddebug_known_classes_map *map);
 void dynamic_debug_unregister_classes(struct ddebug_known_classes_map *map);
 
+struct kernel_param;
+int param_set_dyndbg_classes(const char *instr, const struct kernel_param *kp);
+int param_get_dyndbg_classes(char *buffer, const struct kernel_param *kp);
+
 #else /* !CONFIG_DYNAMIC_DEBUG_CORE */
 
 #include <linux/string.h>
@@ -283,6 +292,14 @@ static inline int dynamic_debug_register_classes(const struct ddebug_known_class
 static inline void dynamic_debug_unregister_classes(struct ddebug_known_classes_map *map)
 {}
 
+struct kernel_param;
+static inline int param_set_dyndbg_classes(const char *instr, const struct kernel_param *kp)
+{ return 0; }
+static inline int param_get_dyndbg_classes(char *buffer, const struct kernel_param *kp)
+{ return 0; }
+
 #endif /* !CONFIG_DYNAMIC_DEBUG_CORE */
 
+extern const struct kernel_param_ops param_ops_dyndbg_classes;
+
 #endif
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index b1aaf8893cdf..b67bf9efec07 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -597,6 +597,87 @@ static int ddebug_exec_queries(char *query, const char *modname)
 	return nfound;
 }
 
+static int do_callback_changes(const struct ddebug_classes_bitmap_param *dcp,
+			       int bitpos, unsigned long *inbits)
+{
+#define QUERY_SIZE 128
+	char query[QUERY_SIZE];
+	int matches;
+
+	snprintf(query, QUERY_SIZE, "class %s %c%s", dcp->map->classes[bitpos],
+		 test_bit(bitpos, inbits) ? '+' : '-', dcp->flags);
+
+	matches = ddebug_exec_queries(query, NULL);
+
+	v2pr_info("bit-%d: %d matches on class:%s\n", bitpos,
+		  matches, dcp->map->classes[bitpos]);
+
+	return matches;
+}
+
+/**
+ * param_set_dyndbg_classes - bits => categories >control setter
+ * @instr: string echo>d to sysfs
+ * @kp:    kp->arg has state: bits, map
+ *
+ * Enable/disable prdbgs by their "category", as specified in the
+ * arguments to DEFINE_DYNAMIC_DEBUG_CLASSES.
+ *
+ * Returns: 0 or <0 if error.
+ */
+int param_set_dyndbg_classes(const char *instr, const struct kernel_param *kp)
+{
+	const struct ddebug_classes_bitmap_param *dcp = kp->arg;
+	unsigned long inbits;
+	int rc, i, totct = 0;
+
+	if (!dcp || !dcp->map) {
+		pr_err("set_dyndbg_classes: no bits=>queries map\n");
+		return -EINVAL;
+	}
+	rc = kstrtoul(instr, 0, &inbits);
+	if (rc) {
+		pr_err("set_dyndbg_classes: expecting bits/integer\n");
+		return -EINVAL;
+	}
+	vpr_info("set_dyndbg_classes: new 0x%lx current 0x%lx\n", inbits, *dcp->bits);
+
+	for (i = 0; i < dcp->map->length; i++) {
+
+		if (test_bit(i, &inbits) == test_bit(i, dcp->bits))
+			continue;
+
+		totct += do_callback_changes(dcp, i, &inbits);
+	}
+	*dcp->bits = inbits;
+	vpr_info("total matches: %d\n", totct);
+	return 0;
+}
+EXPORT_SYMBOL(param_set_dyndbg_classes);
+
+/**
+ * param_get_dyndbg_classes - classes reader
+ * @buffer: string description of controlled bits -> classes
+ * @kp:     kp->arg has state: bits, map
+ *
+ * Reads last written bits, underlying prdbg state may have changed since.
+ * Returns: #chars written or <0 on error
+ */
+int param_get_dyndbg_classes(char *buffer, const struct kernel_param *kp)
+{
+	const struct ddebug_classes_bitmap_param *p = kp->arg;
+	unsigned long val = *p->bits;
+
+	return scnprintf(buffer, PAGE_SIZE, "0x%lx\n", val);
+}
+EXPORT_SYMBOL(param_get_dyndbg_classes);
+
+const struct kernel_param_ops param_ops_dyndbg_classes = {
+	.set = param_set_dyndbg_classes,
+	.get = param_get_dyndbg_classes,
+};
+EXPORT_SYMBOL(param_ops_dyndbg_classes);
+
 #define PREFIX_SIZE 64
 
 static int remaining(int wrote)
-- 
2.35.3


WARNING: multiple messages have this Message-ID (diff)
From: Jim Cromie <jim.cromie@gmail.com>
To: jbaron@akamai.com, linux-kernel@vger.kernel.org,
	dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org,
	intel-gvt-dev@lists.freedesktop.org,
	intel-gfx@lists.freedesktop.org
Cc: gregkh@linuxfoundation.org, daniel.vetter@ffwll.ch,
	seanpaul@chromium.org, robdclark@gmail.com, rostedt@goodmis.org,
	mathieu.desnoyers@efficios.com, quic_saipraka@quicinc.com,
	will@kernel.org, catalin.marinas@arm.com,
	quic_psodagud@quicinc.com, maz@kernel.org, arnd@arndb.de,
	linux-arm-kernel@lists.infradead.org,
	linux-arm-msm@vger.kernel.org, mingo@redhat.com,
	jim.cromie@gmail.com
Subject: [PATCH v2 08/27] dyndbg: add drm.debug style bitmap support
Date: Mon, 16 May 2022 16:56:21 -0600	[thread overview]
Message-ID: <20220516225640.3102269-9-jim.cromie@gmail.com> (raw)
In-Reply-To: <20220516225640.3102269-1-jim.cromie@gmail.com>

Add kernel_param_ops and callbacks to implement a bitmap in a
sysfs-node.  IE, add these:

 - int param_set_dyndbg_classes()
 - int param_get_dyndbg_classes()
 - struct kernel_param_ops param_ops_dyndbg_classes

Following the model of kernel/params.c STANDARD_PARAM_DEFS, these are
non-static and exported.

get/set use an augmented kernel_param; the arg refs a new struct
dyndbg_classes_param, initialized by the macro, containing:

BITS: a pointer to the user module's ulong holding the bits/state.
By ref'g the client's bit-state, we coordinate with existing code that
uses it, so it works unchanged; for example drm_debug_enabled().  The
change to ulong allows use of BIT() etc.

FLAGS: dyndbg.flags toggled by bit-changes. Usually just "p".

MAP: a pointer to struct ddebug_known_classes, which maps those
class-names to pr_debug.class_ids 0..N.

Using the sys-node, with dynamic_debug.verbose=1:

bash-5.1# echo 1 > /sys/module/drm/parameters/debug
[   29.821298] dyndbg: set_dyndbg_classes: new 0x1 current 0x0
[   29.822841] dyndbg: query 0: "class DRM_UT_CORE +p" mod:*
[   29.824348] dyndbg: no matches for query
[   29.825428] dyndbg: total matches: 0

Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
 include/linux/dynamic_debug.h | 17 ++++++++
 lib/dynamic_debug.c           | 81 +++++++++++++++++++++++++++++++++++
 2 files changed, 98 insertions(+)

diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
index 328722ba2d8e..e9e6d0f503f3 100644
--- a/include/linux/dynamic_debug.h
+++ b/include/linux/dynamic_debug.h
@@ -85,6 +85,11 @@ struct ddebug_known_classes_map {
 		.classes = { __VA_ARGS__ }				\
 	}
 
+struct ddebug_classes_bitmap_param {
+	unsigned long *bits;
+	char flags[8];
+	const struct ddebug_known_classes_map *map;
+};
 
 #if defined(CONFIG_DYNAMIC_DEBUG_CORE)
 
@@ -237,6 +242,10 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor,
 int  dynamic_debug_register_classes(struct ddebug_known_classes_map *map);
 void dynamic_debug_unregister_classes(struct ddebug_known_classes_map *map);
 
+struct kernel_param;
+int param_set_dyndbg_classes(const char *instr, const struct kernel_param *kp);
+int param_get_dyndbg_classes(char *buffer, const struct kernel_param *kp);
+
 #else /* !CONFIG_DYNAMIC_DEBUG_CORE */
 
 #include <linux/string.h>
@@ -283,6 +292,14 @@ static inline int dynamic_debug_register_classes(const struct ddebug_known_class
 static inline void dynamic_debug_unregister_classes(struct ddebug_known_classes_map *map)
 {}
 
+struct kernel_param;
+static inline int param_set_dyndbg_classes(const char *instr, const struct kernel_param *kp)
+{ return 0; }
+static inline int param_get_dyndbg_classes(char *buffer, const struct kernel_param *kp)
+{ return 0; }
+
 #endif /* !CONFIG_DYNAMIC_DEBUG_CORE */
 
+extern const struct kernel_param_ops param_ops_dyndbg_classes;
+
 #endif
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index b1aaf8893cdf..b67bf9efec07 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -597,6 +597,87 @@ static int ddebug_exec_queries(char *query, const char *modname)
 	return nfound;
 }
 
+static int do_callback_changes(const struct ddebug_classes_bitmap_param *dcp,
+			       int bitpos, unsigned long *inbits)
+{
+#define QUERY_SIZE 128
+	char query[QUERY_SIZE];
+	int matches;
+
+	snprintf(query, QUERY_SIZE, "class %s %c%s", dcp->map->classes[bitpos],
+		 test_bit(bitpos, inbits) ? '+' : '-', dcp->flags);
+
+	matches = ddebug_exec_queries(query, NULL);
+
+	v2pr_info("bit-%d: %d matches on class:%s\n", bitpos,
+		  matches, dcp->map->classes[bitpos]);
+
+	return matches;
+}
+
+/**
+ * param_set_dyndbg_classes - bits => categories >control setter
+ * @instr: string echo>d to sysfs
+ * @kp:    kp->arg has state: bits, map
+ *
+ * Enable/disable prdbgs by their "category", as specified in the
+ * arguments to DEFINE_DYNAMIC_DEBUG_CLASSES.
+ *
+ * Returns: 0 or <0 if error.
+ */
+int param_set_dyndbg_classes(const char *instr, const struct kernel_param *kp)
+{
+	const struct ddebug_classes_bitmap_param *dcp = kp->arg;
+	unsigned long inbits;
+	int rc, i, totct = 0;
+
+	if (!dcp || !dcp->map) {
+		pr_err("set_dyndbg_classes: no bits=>queries map\n");
+		return -EINVAL;
+	}
+	rc = kstrtoul(instr, 0, &inbits);
+	if (rc) {
+		pr_err("set_dyndbg_classes: expecting bits/integer\n");
+		return -EINVAL;
+	}
+	vpr_info("set_dyndbg_classes: new 0x%lx current 0x%lx\n", inbits, *dcp->bits);
+
+	for (i = 0; i < dcp->map->length; i++) {
+
+		if (test_bit(i, &inbits) == test_bit(i, dcp->bits))
+			continue;
+
+		totct += do_callback_changes(dcp, i, &inbits);
+	}
+	*dcp->bits = inbits;
+	vpr_info("total matches: %d\n", totct);
+	return 0;
+}
+EXPORT_SYMBOL(param_set_dyndbg_classes);
+
+/**
+ * param_get_dyndbg_classes - classes reader
+ * @buffer: string description of controlled bits -> classes
+ * @kp:     kp->arg has state: bits, map
+ *
+ * Reads last written bits, underlying prdbg state may have changed since.
+ * Returns: #chars written or <0 on error
+ */
+int param_get_dyndbg_classes(char *buffer, const struct kernel_param *kp)
+{
+	const struct ddebug_classes_bitmap_param *p = kp->arg;
+	unsigned long val = *p->bits;
+
+	return scnprintf(buffer, PAGE_SIZE, "0x%lx\n", val);
+}
+EXPORT_SYMBOL(param_get_dyndbg_classes);
+
+const struct kernel_param_ops param_ops_dyndbg_classes = {
+	.set = param_set_dyndbg_classes,
+	.get = param_get_dyndbg_classes,
+};
+EXPORT_SYMBOL(param_ops_dyndbg_classes);
+
 #define PREFIX_SIZE 64
 
 static int remaining(int wrote)
-- 
2.35.3


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2022-05-16 22:57 UTC|newest]

Thread overview: 161+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-16 22:56 [RFC PATCH v2 00/27] DRM.debug on DYNAMIC_DEBUG, add trace events Jim Cromie
2022-05-16 22:56 ` Jim Cromie
2022-05-16 22:56 ` Jim Cromie
2022-05-16 22:56 ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56 ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 01/27] dyndbg: fix static_branch manipulation Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 02/27] dyndbg: show both old and new in change-info Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 03/27] dyndbg: fix module.dyndbg handling Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 04/27] dyndbg: drop EXPORTed dynamic_debug_exec_queries Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 05/27] dyndbg: add exclusive class_id to pr_debug callsites Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 06/27] dyndbg: add dynamic_debug_(un)register_classes Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 07/27] dyndbg: validate class FOO on module Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` Jim Cromie [this message]
2022-05-16 22:56   ` [PATCH v2 08/27] dyndbg: add drm.debug style bitmap support Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 09/27] Doc/dyndbg: document new class class_name query support Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 10/27] dyndbg: let query-modname override defaulting modname Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 11/27] dyndbg: support symbolic class-names in bitmap Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 12/27] dyndbg: change zero-or-one classes-map to maps list Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 13/27] dyndbg: add __pr_debug_cls(class, fmt, ...) Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 14/27] dyndbg: add test_dynamic_debug module Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 15/27] drm: POC drm on dyndbg - map class-names to drm_debug_category's Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 16/27] drm/print: POC drm on dyndbg - use bitmap Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 17/27] drm_print: condense enum drm_debug_category Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 18/27] drm_print: interpose drm_*dbg with forwarding macros Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56 ` [PATCH v2 19/27] drm_print: wrap drm_*_dbg in dyndbg descriptor factory macro Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56 ` [PATCH v2 20/27] drm_print: refine drm_debug_enabled for jump-label Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 21/27] drm_print: prefer bare printk KERN_DEBUG on generic fn Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 22/27] drm_print: add _ddebug desc to drm_*dbg prototypes Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 23/27] dyndbg: add _DPRINTK_FLAGS_ENABLED Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 24/27] dyndbg: add _DPRINTK_FLAGS_TRACE Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 25/27] dyndbg: add write-events-to-tracefs code Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56 ` [PATCH v2 26/27] dyndbg: 4 new trace-events: pr_debug, dev_dbg, drm_{,dev}debug Jim Cromie
2022-05-16 22:56   ` [PATCH v2 26/27] dyndbg: 4 new trace-events: pr_debug, dev_dbg, drm_{, dev}debug Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-06-29 20:30   ` [PATCH v2 26/27] dyndbg: 4 new trace-events: pr_debug, dev_dbg, drm_{,dev}debug Steven Rostedt
2022-06-29 20:30     ` Steven Rostedt
2022-06-29 20:30     ` Steven Rostedt
2022-06-29 20:30     ` [Intel-gfx] [PATCH v2 26/27] dyndbg: 4 new trace-events: pr_debug, dev_dbg, drm_{, dev}debug Steven Rostedt
2022-06-29 20:30     ` [PATCH v2 26/27] dyndbg: 4 new trace-events: pr_debug, dev_dbg, drm_{,dev}debug Steven Rostedt
2022-05-16 22:56 ` [PATCH v2 27/27] dyndbg/drm: POC add tracebits sysfs-knob Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-16 22:56   ` [Intel-gfx] " Jim Cromie
2022-05-16 22:56   ` Jim Cromie
2022-05-17  0:20 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for DRM.debug on DYNAMIC_DEBUG, add trace events Patchwork
2022-05-17  0:21 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2022-05-17  0:37 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2022-05-17  4:52 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2022-05-25 15:02 ` [RFC PATCH v2 00/27] " Daniel Vetter
2022-05-25 15:02   ` Daniel Vetter
2022-05-25 15:02   ` Daniel Vetter
2022-05-25 15:02   ` Daniel Vetter
2022-05-25 15:02   ` [Intel-gfx] " Daniel Vetter
2022-06-06 14:59   ` jim.cromie
2022-06-06 14:59     ` [Intel-gfx] " jim.cromie
2022-06-08 15:56     ` Daniel Vetter
2022-06-08 15:56       ` Daniel Vetter
2022-06-08 15:56       ` Daniel Vetter
2022-06-08 15:56       ` [Intel-gfx] " Daniel Vetter
2022-06-08 15:56       ` Daniel Vetter

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=20220516225640.3102269-9-jim.cromie@gmail.com \
    --to=jim.cromie@gmail.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=arnd@arndb.de \
    --cc=catalin.marinas@arm.com \
    --cc=daniel.vetter@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-gvt-dev@lists.freedesktop.org \
    --cc=jbaron@akamai.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=maz@kernel.org \
    --cc=mingo@redhat.com \
    --cc=quic_psodagud@quicinc.com \
    --cc=quic_saipraka@quicinc.com \
    --cc=robdclark@gmail.com \
    --cc=rostedt@goodmis.org \
    --cc=seanpaul@chromium.org \
    --cc=will@kernel.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.