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 34/41] dyndbg: add 2 trace-events: drm_{,dev}debug
Date: Mon, 18 Jul 2022 00:36:29 -0600	[thread overview]
Message-ID: <20220718063641.9179-46-jim.cromie@gmail.com> (raw)
In-Reply-To: <20220718063641.9179-1-jim.cromie@gmail.com>

Add include/trace/events/drm.h, with 2 new events: drm_debug() &
drm_devdbg(), and call them from drm_dbg() & drm_dev_dbg().  This is
easy, cuz the callers already build the vaf that the callee wants.

This allows the 3-5k drm.debug/on-dyndbg callsites to independently
(re-)direct messages to tracefs, not just syslog.  ISTM this is good;
debug traffic can be sent (just) to the tool where it can be best
used.  Over time, I'd expect to see less traffic to syslog.

NOTE: The message formats for the 2 events are both sub-optimal.
(both have event-name too)

drm_devdbg: TP_printk("cat:%d, %s %s", __entry->drm_debug_category,

  "cat:%d" should be "%s", but the classnames arent really in-scope
  here.  Maybe the events-decl-header should be under drm somewhere,
  so that class-names are available.

  It would also be nice to replace the event-name with the classname,
  as the names are highly client centric.

drm_dbg: TP_printk("%s", __get_str(msg))

  same as above.

NB:

The existing category param in this callchain is partially redundant;
when descriptor is available, it has the callsite's class_id.  If
later, CONFIG_DRM_USE_DYNAMIC_DEBUG:=y (hardwired), then category can
be dropped here, since the descriptor will always be available.

Also, if combined with header-move (or maybe its expanding inclusion
by lib/dynamic_debug), we could add the optional flags prefix, by
exposing dynamic_emit_prefix.  And perhaps this could be done only in
TP_printk, to save work while writing to the ring-buffer.

Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
 drivers/gpu/drm/drm_print.c | 25 ++++++++++++-----
 include/trace/events/drm.h  | 54 +++++++++++++++++++++++++++++++++++++
 2 files changed, 72 insertions(+), 7 deletions(-)
 create mode 100644 include/trace/events/drm.h

diff --git a/drivers/gpu/drm/drm_print.c b/drivers/gpu/drm/drm_print.c
index 92f3f45e410c..9fb0b8e40dca 100644
--- a/drivers/gpu/drm/drm_print.c
+++ b/drivers/gpu/drm/drm_print.c
@@ -35,6 +35,9 @@
 #include <drm/drm_drv.h>
 #include <drm/drm_print.h>
 
+#define CREATE_TRACE_POINTS
+#include <trace/events/drm.h>
+
 /*
  * __drm_debug: Enable debug output.
  * Bitmask of DRM_UT_x. See include/drm/drm_print.h for details.
@@ -293,13 +296,19 @@ void __drm_dev_dbg(struct _ddebug *desc, const struct device *dev,
 	vaf.fmt = format;
 	vaf.va = &args;
 
-	if (dev)
-		dev_printk(KERN_DEBUG, dev, "[" DRM_NAME ":%ps] %pV",
-			   __builtin_return_address(0), &vaf);
-	else
-		printk(KERN_DEBUG "[" DRM_NAME ":%ps] %pV",
-		       __builtin_return_address(0), &vaf);
-
+	if (dev) {
+		if (desc->flags & _DPRINTK_FLAGS_PRINTK)
+			dev_printk(KERN_DEBUG, dev, "[" DRM_NAME ":%ps] %pV",
+				   __builtin_return_address(0), &vaf);
+		if (desc->flags & _DPRINTK_FLAGS_TRACE)
+			trace_drm_devdbg(dev, category, &vaf);
+	} else {
+		if (desc->flags & _DPRINTK_FLAGS_PRINTK)
+			printk(KERN_DEBUG "[" DRM_NAME ":%ps] %pV",
+			       __builtin_return_address(0), &vaf);
+		if (desc->flags & _DPRINTK_FLAGS_TRACE)
+			trace_drm_debug(category, &vaf);
+	}
 	va_end(args);
 }
 EXPORT_SYMBOL(__drm_dev_dbg);
@@ -319,6 +328,8 @@ void ___drm_dbg(struct _ddebug *desc, enum drm_debug_category category, const ch
 	printk(KERN_DEBUG "[" DRM_NAME ":%ps] %pV",
 	       __builtin_return_address(0), &vaf);
 
+	trace_drm_debug(category, &vaf);
+
 	va_end(args);
 }
 EXPORT_SYMBOL(___drm_dbg);
diff --git a/include/trace/events/drm.h b/include/trace/events/drm.h
new file mode 100644
index 000000000000..589fa1e1f2c2
--- /dev/null
+++ b/include/trace/events/drm.h
@@ -0,0 +1,54 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM drm
+
+#if !defined(_TRACE_DRM_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_DRM_H
+
+#include <linux/tracepoint.h>
+
+/* drm_debug() was called, pass its args */
+TRACE_EVENT(drm_debug,
+	    TP_PROTO(int drm_debug_category, struct va_format *vaf),
+
+	    TP_ARGS(drm_debug_category, vaf),
+
+	    TP_STRUCT__entry(
+		    __field(int, drm_debug_category)
+		    __vstring(msg, vaf->fmt, vaf->va)
+		    ),
+
+	    TP_fast_assign(
+		    __entry->drm_debug_category = drm_debug_category;
+		    __assign_vstr(msg, vaf->fmt, vaf->va);
+		    ),
+
+	    TP_printk("%s", __get_str(msg))
+);
+
+/* drm_devdbg() was called, pass its args, preserving order */
+TRACE_EVENT(drm_devdbg,
+	    TP_PROTO(const struct device *dev, int drm_debug_category, struct va_format *vaf),
+
+	    TP_ARGS(dev, drm_debug_category, vaf),
+
+	    TP_STRUCT__entry(
+		    __field(const struct device*, dev)
+		    __field(int, drm_debug_category)
+		    __vstring(msg, vaf->fmt, vaf->va)
+		    ),
+
+	    TP_fast_assign(
+		    __entry->drm_debug_category = drm_debug_category;
+		    __entry->dev = dev;
+		    __assign_vstr(msg, vaf->fmt, vaf->va);
+		    ),
+
+	    TP_printk("cat:%d, %s %s", __entry->drm_debug_category,
+		      dev_name(__entry->dev), __get_str(msg))
+);
+
+#endif /* _TRACE_DRM_H */
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
-- 
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 34/41] dyndbg: add 2 trace-events: drm_{, dev}debug
Date: Mon, 18 Jul 2022 00:36:29 -0600	[thread overview]
Message-ID: <20220718063641.9179-46-jim.cromie@gmail.com> (raw)
In-Reply-To: <20220718063641.9179-1-jim.cromie@gmail.com>

Add include/trace/events/drm.h, with 2 new events: drm_debug() &
drm_devdbg(), and call them from drm_dbg() & drm_dev_dbg().  This is
easy, cuz the callers already build the vaf that the callee wants.

This allows the 3-5k drm.debug/on-dyndbg callsites to independently
(re-)direct messages to tracefs, not just syslog.  ISTM this is good;
debug traffic can be sent (just) to the tool where it can be best
used.  Over time, I'd expect to see less traffic to syslog.

NOTE: The message formats for the 2 events are both sub-optimal.
(both have event-name too)

drm_devdbg: TP_printk("cat:%d, %s %s", __entry->drm_debug_category,

  "cat:%d" should be "%s", but the classnames arent really in-scope
  here.  Maybe the events-decl-header should be under drm somewhere,
  so that class-names are available.

  It would also be nice to replace the event-name with the classname,
  as the names are highly client centric.

drm_dbg: TP_printk("%s", __get_str(msg))

  same as above.

NB:

The existing category param in this callchain is partially redundant;
when descriptor is available, it has the callsite's class_id.  If
later, CONFIG_DRM_USE_DYNAMIC_DEBUG:=y (hardwired), then category can
be dropped here, since the descriptor will always be available.

Also, if combined with header-move (or maybe its expanding inclusion
by lib/dynamic_debug), we could add the optional flags prefix, by
exposing dynamic_emit_prefix.  And perhaps this could be done only in
TP_printk, to save work while writing to the ring-buffer.

Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
 drivers/gpu/drm/drm_print.c | 25 ++++++++++++-----
 include/trace/events/drm.h  | 54 +++++++++++++++++++++++++++++++++++++
 2 files changed, 72 insertions(+), 7 deletions(-)
 create mode 100644 include/trace/events/drm.h

diff --git a/drivers/gpu/drm/drm_print.c b/drivers/gpu/drm/drm_print.c
index 92f3f45e410c..9fb0b8e40dca 100644
--- a/drivers/gpu/drm/drm_print.c
+++ b/drivers/gpu/drm/drm_print.c
@@ -35,6 +35,9 @@
 #include <drm/drm_drv.h>
 #include <drm/drm_print.h>
 
+#define CREATE_TRACE_POINTS
+#include <trace/events/drm.h>
+
 /*
  * __drm_debug: Enable debug output.
  * Bitmask of DRM_UT_x. See include/drm/drm_print.h for details.
@@ -293,13 +296,19 @@ void __drm_dev_dbg(struct _ddebug *desc, const struct device *dev,
 	vaf.fmt = format;
 	vaf.va = &args;
 
-	if (dev)
-		dev_printk(KERN_DEBUG, dev, "[" DRM_NAME ":%ps] %pV",
-			   __builtin_return_address(0), &vaf);
-	else
-		printk(KERN_DEBUG "[" DRM_NAME ":%ps] %pV",
-		       __builtin_return_address(0), &vaf);
-
+	if (dev) {
+		if (desc->flags & _DPRINTK_FLAGS_PRINTK)
+			dev_printk(KERN_DEBUG, dev, "[" DRM_NAME ":%ps] %pV",
+				   __builtin_return_address(0), &vaf);
+		if (desc->flags & _DPRINTK_FLAGS_TRACE)
+			trace_drm_devdbg(dev, category, &vaf);
+	} else {
+		if (desc->flags & _DPRINTK_FLAGS_PRINTK)
+			printk(KERN_DEBUG "[" DRM_NAME ":%ps] %pV",
+			       __builtin_return_address(0), &vaf);
+		if (desc->flags & _DPRINTK_FLAGS_TRACE)
+			trace_drm_debug(category, &vaf);
+	}
 	va_end(args);
 }
 EXPORT_SYMBOL(__drm_dev_dbg);
@@ -319,6 +328,8 @@ void ___drm_dbg(struct _ddebug *desc, enum drm_debug_category category, const ch
 	printk(KERN_DEBUG "[" DRM_NAME ":%ps] %pV",
 	       __builtin_return_address(0), &vaf);
 
+	trace_drm_debug(category, &vaf);
+
 	va_end(args);
 }
 EXPORT_SYMBOL(___drm_dbg);
diff --git a/include/trace/events/drm.h b/include/trace/events/drm.h
new file mode 100644
index 000000000000..589fa1e1f2c2
--- /dev/null
+++ b/include/trace/events/drm.h
@@ -0,0 +1,54 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM drm
+
+#if !defined(_TRACE_DRM_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_DRM_H
+
+#include <linux/tracepoint.h>
+
+/* drm_debug() was called, pass its args */
+TRACE_EVENT(drm_debug,
+	    TP_PROTO(int drm_debug_category, struct va_format *vaf),
+
+	    TP_ARGS(drm_debug_category, vaf),
+
+	    TP_STRUCT__entry(
+		    __field(int, drm_debug_category)
+		    __vstring(msg, vaf->fmt, vaf->va)
+		    ),
+
+	    TP_fast_assign(
+		    __entry->drm_debug_category = drm_debug_category;
+		    __assign_vstr(msg, vaf->fmt, vaf->va);
+		    ),
+
+	    TP_printk("%s", __get_str(msg))
+);
+
+/* drm_devdbg() was called, pass its args, preserving order */
+TRACE_EVENT(drm_devdbg,
+	    TP_PROTO(const struct device *dev, int drm_debug_category, struct va_format *vaf),
+
+	    TP_ARGS(dev, drm_debug_category, vaf),
+
+	    TP_STRUCT__entry(
+		    __field(const struct device*, dev)
+		    __field(int, drm_debug_category)
+		    __vstring(msg, vaf->fmt, vaf->va)
+		    ),
+
+	    TP_fast_assign(
+		    __entry->drm_debug_category = drm_debug_category;
+		    __entry->dev = dev;
+		    __assign_vstr(msg, vaf->fmt, vaf->va);
+		    ),
+
+	    TP_printk("cat:%d, %s %s", __entry->drm_debug_category,
+		      dev_name(__entry->dev), __get_str(msg))
+);
+
+#endif /* _TRACE_DRM_H */
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
-- 
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 34/41] dyndbg: add 2 trace-events: drm_{,dev}debug
Date: Mon, 18 Jul 2022 00:36:29 -0600	[thread overview]
Message-ID: <20220718063641.9179-46-jim.cromie@gmail.com> (raw)
In-Reply-To: <20220718063641.9179-1-jim.cromie@gmail.com>

Add include/trace/events/drm.h, with 2 new events: drm_debug() &
drm_devdbg(), and call them from drm_dbg() & drm_dev_dbg().  This is
easy, cuz the callers already build the vaf that the callee wants.

This allows the 3-5k drm.debug/on-dyndbg callsites to independently
(re-)direct messages to tracefs, not just syslog.  ISTM this is good;
debug traffic can be sent (just) to the tool where it can be best
used.  Over time, I'd expect to see less traffic to syslog.

NOTE: The message formats for the 2 events are both sub-optimal.
(both have event-name too)

drm_devdbg: TP_printk("cat:%d, %s %s", __entry->drm_debug_category,

  "cat:%d" should be "%s", but the classnames arent really in-scope
  here.  Maybe the events-decl-header should be under drm somewhere,
  so that class-names are available.

  It would also be nice to replace the event-name with the classname,
  as the names are highly client centric.

drm_dbg: TP_printk("%s", __get_str(msg))

  same as above.

NB:

The existing category param in this callchain is partially redundant;
when descriptor is available, it has the callsite's class_id.  If
later, CONFIG_DRM_USE_DYNAMIC_DEBUG:=y (hardwired), then category can
be dropped here, since the descriptor will always be available.

Also, if combined with header-move (or maybe its expanding inclusion
by lib/dynamic_debug), we could add the optional flags prefix, by
exposing dynamic_emit_prefix.  And perhaps this could be done only in
TP_printk, to save work while writing to the ring-buffer.

Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
 drivers/gpu/drm/drm_print.c | 25 ++++++++++++-----
 include/trace/events/drm.h  | 54 +++++++++++++++++++++++++++++++++++++
 2 files changed, 72 insertions(+), 7 deletions(-)
 create mode 100644 include/trace/events/drm.h

diff --git a/drivers/gpu/drm/drm_print.c b/drivers/gpu/drm/drm_print.c
index 92f3f45e410c..9fb0b8e40dca 100644
--- a/drivers/gpu/drm/drm_print.c
+++ b/drivers/gpu/drm/drm_print.c
@@ -35,6 +35,9 @@
 #include <drm/drm_drv.h>
 #include <drm/drm_print.h>
 
+#define CREATE_TRACE_POINTS
+#include <trace/events/drm.h>
+
 /*
  * __drm_debug: Enable debug output.
  * Bitmask of DRM_UT_x. See include/drm/drm_print.h for details.
@@ -293,13 +296,19 @@ void __drm_dev_dbg(struct _ddebug *desc, const struct device *dev,
 	vaf.fmt = format;
 	vaf.va = &args;
 
-	if (dev)
-		dev_printk(KERN_DEBUG, dev, "[" DRM_NAME ":%ps] %pV",
-			   __builtin_return_address(0), &vaf);
-	else
-		printk(KERN_DEBUG "[" DRM_NAME ":%ps] %pV",
-		       __builtin_return_address(0), &vaf);
-
+	if (dev) {
+		if (desc->flags & _DPRINTK_FLAGS_PRINTK)
+			dev_printk(KERN_DEBUG, dev, "[" DRM_NAME ":%ps] %pV",
+				   __builtin_return_address(0), &vaf);
+		if (desc->flags & _DPRINTK_FLAGS_TRACE)
+			trace_drm_devdbg(dev, category, &vaf);
+	} else {
+		if (desc->flags & _DPRINTK_FLAGS_PRINTK)
+			printk(KERN_DEBUG "[" DRM_NAME ":%ps] %pV",
+			       __builtin_return_address(0), &vaf);
+		if (desc->flags & _DPRINTK_FLAGS_TRACE)
+			trace_drm_debug(category, &vaf);
+	}
 	va_end(args);
 }
 EXPORT_SYMBOL(__drm_dev_dbg);
@@ -319,6 +328,8 @@ void ___drm_dbg(struct _ddebug *desc, enum drm_debug_category category, const ch
 	printk(KERN_DEBUG "[" DRM_NAME ":%ps] %pV",
 	       __builtin_return_address(0), &vaf);
 
+	trace_drm_debug(category, &vaf);
+
 	va_end(args);
 }
 EXPORT_SYMBOL(___drm_dbg);
diff --git a/include/trace/events/drm.h b/include/trace/events/drm.h
new file mode 100644
index 000000000000..589fa1e1f2c2
--- /dev/null
+++ b/include/trace/events/drm.h
@@ -0,0 +1,54 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM drm
+
+#if !defined(_TRACE_DRM_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_DRM_H
+
+#include <linux/tracepoint.h>
+
+/* drm_debug() was called, pass its args */
+TRACE_EVENT(drm_debug,
+	    TP_PROTO(int drm_debug_category, struct va_format *vaf),
+
+	    TP_ARGS(drm_debug_category, vaf),
+
+	    TP_STRUCT__entry(
+		    __field(int, drm_debug_category)
+		    __vstring(msg, vaf->fmt, vaf->va)
+		    ),
+
+	    TP_fast_assign(
+		    __entry->drm_debug_category = drm_debug_category;
+		    __assign_vstr(msg, vaf->fmt, vaf->va);
+		    ),
+
+	    TP_printk("%s", __get_str(msg))
+);
+
+/* drm_devdbg() was called, pass its args, preserving order */
+TRACE_EVENT(drm_devdbg,
+	    TP_PROTO(const struct device *dev, int drm_debug_category, struct va_format *vaf),
+
+	    TP_ARGS(dev, drm_debug_category, vaf),
+
+	    TP_STRUCT__entry(
+		    __field(const struct device*, dev)
+		    __field(int, drm_debug_category)
+		    __vstring(msg, vaf->fmt, vaf->va)
+		    ),
+
+	    TP_fast_assign(
+		    __entry->drm_debug_category = drm_debug_category;
+		    __entry->dev = dev;
+		    __assign_vstr(msg, vaf->fmt, vaf->va);
+		    ),
+
+	    TP_printk("cat:%d, %s %s", __entry->drm_debug_category,
+		      dev_name(__entry->dev), __get_str(msg))
+);
+
+#endif /* _TRACE_DRM_H */
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
-- 
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 34/41] dyndbg: add 2 trace-events: drm_{, dev}debug
Date: Mon, 18 Jul 2022 00:36:29 -0600	[thread overview]
Message-ID: <20220718063641.9179-46-jim.cromie@gmail.com> (raw)
In-Reply-To: <20220718063641.9179-1-jim.cromie@gmail.com>

Add include/trace/events/drm.h, with 2 new events: drm_debug() &
drm_devdbg(), and call them from drm_dbg() & drm_dev_dbg().  This is
easy, cuz the callers already build the vaf that the callee wants.

This allows the 3-5k drm.debug/on-dyndbg callsites to independently
(re-)direct messages to tracefs, not just syslog.  ISTM this is good;
debug traffic can be sent (just) to the tool where it can be best
used.  Over time, I'd expect to see less traffic to syslog.

NOTE: The message formats for the 2 events are both sub-optimal.
(both have event-name too)

drm_devdbg: TP_printk("cat:%d, %s %s", __entry->drm_debug_category,

  "cat:%d" should be "%s", but the classnames arent really in-scope
  here.  Maybe the events-decl-header should be under drm somewhere,
  so that class-names are available.

  It would also be nice to replace the event-name with the classname,
  as the names are highly client centric.

drm_dbg: TP_printk("%s", __get_str(msg))

  same as above.

NB:

The existing category param in this callchain is partially redundant;
when descriptor is available, it has the callsite's class_id.  If
later, CONFIG_DRM_USE_DYNAMIC_DEBUG:=y (hardwired), then category can
be dropped here, since the descriptor will always be available.

Also, if combined with header-move (or maybe its expanding inclusion
by lib/dynamic_debug), we could add the optional flags prefix, by
exposing dynamic_emit_prefix.  And perhaps this could be done only in
TP_printk, to save work while writing to the ring-buffer.

Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
 drivers/gpu/drm/drm_print.c | 25 ++++++++++++-----
 include/trace/events/drm.h  | 54 +++++++++++++++++++++++++++++++++++++
 2 files changed, 72 insertions(+), 7 deletions(-)
 create mode 100644 include/trace/events/drm.h

diff --git a/drivers/gpu/drm/drm_print.c b/drivers/gpu/drm/drm_print.c
index 92f3f45e410c..9fb0b8e40dca 100644
--- a/drivers/gpu/drm/drm_print.c
+++ b/drivers/gpu/drm/drm_print.c
@@ -35,6 +35,9 @@
 #include <drm/drm_drv.h>
 #include <drm/drm_print.h>
 
+#define CREATE_TRACE_POINTS
+#include <trace/events/drm.h>
+
 /*
  * __drm_debug: Enable debug output.
  * Bitmask of DRM_UT_x. See include/drm/drm_print.h for details.
@@ -293,13 +296,19 @@ void __drm_dev_dbg(struct _ddebug *desc, const struct device *dev,
 	vaf.fmt = format;
 	vaf.va = &args;
 
-	if (dev)
-		dev_printk(KERN_DEBUG, dev, "[" DRM_NAME ":%ps] %pV",
-			   __builtin_return_address(0), &vaf);
-	else
-		printk(KERN_DEBUG "[" DRM_NAME ":%ps] %pV",
-		       __builtin_return_address(0), &vaf);
-
+	if (dev) {
+		if (desc->flags & _DPRINTK_FLAGS_PRINTK)
+			dev_printk(KERN_DEBUG, dev, "[" DRM_NAME ":%ps] %pV",
+				   __builtin_return_address(0), &vaf);
+		if (desc->flags & _DPRINTK_FLAGS_TRACE)
+			trace_drm_devdbg(dev, category, &vaf);
+	} else {
+		if (desc->flags & _DPRINTK_FLAGS_PRINTK)
+			printk(KERN_DEBUG "[" DRM_NAME ":%ps] %pV",
+			       __builtin_return_address(0), &vaf);
+		if (desc->flags & _DPRINTK_FLAGS_TRACE)
+			trace_drm_debug(category, &vaf);
+	}
 	va_end(args);
 }
 EXPORT_SYMBOL(__drm_dev_dbg);
@@ -319,6 +328,8 @@ void ___drm_dbg(struct _ddebug *desc, enum drm_debug_category category, const ch
 	printk(KERN_DEBUG "[" DRM_NAME ":%ps] %pV",
 	       __builtin_return_address(0), &vaf);
 
+	trace_drm_debug(category, &vaf);
+
 	va_end(args);
 }
 EXPORT_SYMBOL(___drm_dbg);
diff --git a/include/trace/events/drm.h b/include/trace/events/drm.h
new file mode 100644
index 000000000000..589fa1e1f2c2
--- /dev/null
+++ b/include/trace/events/drm.h
@@ -0,0 +1,54 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM drm
+
+#if !defined(_TRACE_DRM_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_DRM_H
+
+#include <linux/tracepoint.h>
+
+/* drm_debug() was called, pass its args */
+TRACE_EVENT(drm_debug,
+	    TP_PROTO(int drm_debug_category, struct va_format *vaf),
+
+	    TP_ARGS(drm_debug_category, vaf),
+
+	    TP_STRUCT__entry(
+		    __field(int, drm_debug_category)
+		    __vstring(msg, vaf->fmt, vaf->va)
+		    ),
+
+	    TP_fast_assign(
+		    __entry->drm_debug_category = drm_debug_category;
+		    __assign_vstr(msg, vaf->fmt, vaf->va);
+		    ),
+
+	    TP_printk("%s", __get_str(msg))
+);
+
+/* drm_devdbg() was called, pass its args, preserving order */
+TRACE_EVENT(drm_devdbg,
+	    TP_PROTO(const struct device *dev, int drm_debug_category, struct va_format *vaf),
+
+	    TP_ARGS(dev, drm_debug_category, vaf),
+
+	    TP_STRUCT__entry(
+		    __field(const struct device*, dev)
+		    __field(int, drm_debug_category)
+		    __vstring(msg, vaf->fmt, vaf->va)
+		    ),
+
+	    TP_fast_assign(
+		    __entry->drm_debug_category = drm_debug_category;
+		    __entry->dev = dev;
+		    __assign_vstr(msg, vaf->fmt, vaf->va);
+		    ),
+
+	    TP_printk("cat:%d, %s %s", __entry->drm_debug_category,
+		      dev_name(__entry->dev), __get_str(msg))
+);
+
+#endif /* _TRACE_DRM_H */
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
-- 
2.36.1


  parent reply	other threads:[~2022-07-18  6:41 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 ` [PATCH v3 13/41] kernel/module: add __dyndbg_classes section 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 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 ` Jim Cromie [this message]
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-46-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.