[PATCH v2 16/27] drm/print: POC drm on dyndbg - use bitmap
Jim Cromie
jim.cromie at gmail.com
Mon May 16 15:56:29 PDT 2022
POC: adapt drm_print to use/test the bitmap callback support.
with dynamic_debug.verbose=1:
bash-5.1# echo 1 > /sys/module/drm/parameters/debug
[ 33.697039] dyndbg: set_dyndbg_classes: new 0x1 current 0x0
[ 33.697571] dyndbg: query 0: "class DRM_UT_CORE +p" mod:*
[ 33.698072] dyndbg: no matches for query
[ 33.698498] dyndbg: total matches: 0
bash-5.1# echo 2 > /sys/module/drm/parameters/debug
[ 46.687012] dyndbg: set_dyndbg_classes: new 0x2 current 0x1
[ 46.687655] dyndbg: query 0: "class DRM_UT_CORE -p" mod:*
[ 46.688280] dyndbg: no matches for query
[ 46.688632] dyndbg: query 0: "class DRM_UT_DRIVER +p" mod:*
[ 46.689122] dyndbg: no matches for query
[ 46.689441] dyndbg: total matches: 0
This changes typeof __drm_debug to unsigned long from unsigned int,
which dyndbg requires so it can use BIT().
It is currently dependent on CONFIG_DYNAMIC_DEBUG_CORE, which is only
aproximately correct, it will need proper DRM dependence too.
Signed-off-by: Jim Cromie <jim.cromie at gmail.com>
---
drivers/gpu/drm/drm_print.c | 14 ++++++++++++--
include/drm/drm_print.h | 3 ++-
2 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/drm_print.c b/drivers/gpu/drm/drm_print.c
index f783d4963d4b..e49ffda0a47e 100644
--- a/drivers/gpu/drm/drm_print.c
+++ b/drivers/gpu/drm/drm_print.c
@@ -40,7 +40,7 @@
* __drm_debug: Enable debug output.
* Bitmask of DRM_UT_x. See include/drm/drm_print.h for details.
*/
-unsigned int __drm_debug;
+unsigned long __drm_debug;
EXPORT_SYMBOL(__drm_debug);
MODULE_PARM_DESC(debug, "Enable debug output, where each bit enables a debug category.\n"
@@ -52,7 +52,17 @@ MODULE_PARM_DESC(debug, "Enable debug output, where each bit enables a debug cat
"\t\tBit 5 (0x20) will enable VBL messages (vblank code)\n"
"\t\tBit 7 (0x80) will enable LEASE messages (leasing code)\n"
"\t\tBit 8 (0x100) will enable DP messages (displayport code)");
-module_param_named(debug, __drm_debug, int, 0600);
+
+#if !defined(CONFIG_DYNAMIC_DEBUG_CORE)
+module_param_named(debug, __drm_debug, ulong, 0600);
+#else
+static struct ddebug_classes_bitmap_param drm_debug_bitmap = {
+ .bits = &__drm_debug,
+ .flags = "p",
+ .map = &drm_debug_classes,
+};
+module_param_cb(debug, ¶m_ops_dyndbg_classes, &drm_debug_bitmap, 0600);
+#endif
void __drm_puts_coredump(struct drm_printer *p, const char *str)
{
diff --git a/include/drm/drm_print.h b/include/drm/drm_print.h
index 5b7eedb0f477..0597137bac75 100644
--- a/include/drm/drm_print.h
+++ b/include/drm/drm_print.h
@@ -31,11 +31,12 @@
#include <linux/seq_file.h>
#include <linux/device.h>
#include <linux/debugfs.h>
+#include <linux/dynamic_debug.h>
#include <drm/drm.h>
/* Do *not* use outside of drm_print.[ch]! */
-extern unsigned int __drm_debug;
+extern unsigned long __drm_debug;
/**
* DOC: print
--
2.35.3
More information about the linux-arm-kernel
mailing list