public inbox for drm-ai-reviews@public-inbox.freedesktop.org
 help / color / mirror / Atom feed
From: Jim Cromie <jim.cromie@gmail.com>
To: Jonathan Corbet <corbet@lwn.net>,
	Shuah Khan <skhan@linuxfoundation.org>,
	Arnd Bergmann <arnd@arndb.de>, Jason Baron <jbaron@akamai.com>,
	Luis Chamberlain <mcgrof@kernel.org>,
	Petr Pavlu <petr.pavlu@suse.com>,
	Daniel Gomez <da.gomez@kernel.org>,
	Sami Tolvanen <samitolvanen@google.com>,
	Aaron Tomlin <atomlin@atomlin.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Shuah Khan <shuah@kernel.org>,
	Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Maxime Ripard <mripard@kernel.org>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>
Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-arch@vger.kernel.org, linux-modules@vger.kernel.org,
	linux-kselftest@vger.kernel.org, dri-devel@lists.freedesktop.org,
	Jim Cromie <jim.cromie@gmail.com>,
	Louis Chauvet <louis.chauvet@bootlin.com>
Subject: [PATCH v4 14/25] dyndbg: refactor param_set_dyndbg_classes and below
Date: Tue, 02 Jun 2026 22:48:11 +0000	[thread overview]
Message-ID: <20260602-dd-maint-2-v4-14-19a1445585a8@gmail.com> (raw)
In-Reply-To: <20260602-dd-maint-2-v4-0-19a1445585a8@gmail.com>

Refactor callchain below param_set_dyndbg_classes(1) to allow mod-name
specific settings.  Split (1) into upper/lower fns, adding modname
param to lower, and passing NULL in from upper.  Below that, add the
same param to ddebug_apply_class_bitmap(), and pass it thru to
_ddebug_queries(), replacing NULL with the param.

This allows the callchain to update the classmap in just one module,
vs just all as currently done.  While the sysfs param is unlikely to
ever update just one module, the callchain will be used for modprobe
handling, which should update only that just-probed module.

In ddebug_apply_class_bitmap(), also check for actual changes to the
bits before announcing them, to declutter logs.

No functional change.

Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
---
v2: move RvB after SoB
---
 lib/dynamic_debug.c | 51 +++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 39 insertions(+), 12 deletions(-)

diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index a967e3ef1dbc..f59fe7b25ea9 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -610,9 +610,10 @@ static int ddebug_exec_queries(char *query, const char *modname)
 	return nfound;
 }
 
-/* apply a new bitmap to the sys-knob's current bit-state */
+/* apply a new class-param setting */
 static int ddebug_apply_class_bitmap(const struct ddebug_class_param *dcp,
-				     unsigned long *new_bits, unsigned long *old_bits)
+				     unsigned long *new_bits, unsigned long *old_bits,
+				     const char *query_modname)
 {
 #define QUERY_SIZE 128
 	char query[QUERY_SIZE];
@@ -620,7 +621,9 @@ static int ddebug_apply_class_bitmap(const struct ddebug_class_param *dcp,
 	int matches = 0;
 	int bi, ct;
 
-	v2pr_info("apply: 0x%lx to: 0x%lx\n", *new_bits, *old_bits);
+	if (*new_bits != *old_bits)
+		v2pr_info("apply bitmap: 0x%lx to: 0x%lx for %s\n", *new_bits,
+			  *old_bits, query_modname ?: "'*'");
 
 	for (bi = 0; bi < map->length; bi++) {
 		if (test_bit(bi, new_bits) == test_bit(bi, old_bits))
@@ -629,12 +632,16 @@ static int ddebug_apply_class_bitmap(const struct ddebug_class_param *dcp,
 		snprintf(query, QUERY_SIZE, "class %s %c%s", map->class_names[bi],
 			 test_bit(bi, new_bits) ? '+' : '-', dcp->flags);
 
-		ct = ddebug_exec_queries(query, NULL);
+		ct = ddebug_exec_queries(query, query_modname);
 		matches += ct;
 
 		v2pr_info("bit_%d: %d matches on class: %s -> 0x%lx\n", bi,
 			  ct, map->class_names[bi], *new_bits);
 	}
+	if (*new_bits != *old_bits)
+		v2pr_info("applied bitmap: 0x%lx to: 0x%lx for %s\n", *new_bits,
+			  *old_bits, query_modname ?: "'*'");
+
 	return matches;
 }
 
@@ -647,6 +654,7 @@ static int ddebug_apply_class_bitmap(const struct ddebug_class_param *dcp,
  * param_set_dyndbg_classes - class FOO >control
  * @instr: string echo>d to sysfs, input depends on map_type
  * @kp:    kp->arg has state: bits/lvl, map, map_type
+ * @mod_name: module name or null for all modules with the classes
  *
  * Enable/disable prdbgs by their class, as given in the arguments to
  * DECLARE_DYNDBG_CLASSMAP.  For LEVEL map-types, enforce relative
@@ -654,7 +662,9 @@ static int ddebug_apply_class_bitmap(const struct ddebug_class_param *dcp,
  *
  * Returns: 0 or <0 if error.
  */
-int param_set_dyndbg_classes(const char *instr, const struct kernel_param *kp)
+static int param_set_dyndbg_module_classes(const char *instr,
+					   const struct kernel_param *kp,
+					   const char *mod_name)
 {
 	const struct ddebug_class_param *dcp = kp->arg;
 	const struct ddebug_class_map *map = dcp->map;
@@ -677,8 +687,8 @@ int param_set_dyndbg_classes(const char *instr, const struct kernel_param *kp)
 				KP_NAME(kp), inrep, CLASSMAP_BITMASK(map->length));
 			inrep &= CLASSMAP_BITMASK(map->length);
 		}
-		v2pr_info("bits:%lx > %s\n", inrep, KP_NAME(kp));
-		totct += ddebug_apply_class_bitmap(dcp, &inrep, dcp->bits);
+		v2pr_info("bits:0x%lx > %s.%s\n", inrep, mod_name ?: "*", KP_NAME(kp));
+		totct += ddebug_apply_class_bitmap(dcp, &inrep, dcp->bits, mod_name);
 		*dcp->bits = inrep;
 		break;
 	case DD_CLASS_TYPE_LEVEL_NUM:
@@ -691,7 +701,7 @@ int param_set_dyndbg_classes(const char *instr, const struct kernel_param *kp)
 		old_bits = CLASSMAP_BITMASK(*dcp->lvl);
 		new_bits = CLASSMAP_BITMASK(inrep);
 		v2pr_info("lvl:%ld bits:0x%lx > %s\n", inrep, new_bits, KP_NAME(kp));
-		totct += ddebug_apply_class_bitmap(dcp, &new_bits, &old_bits);
+		totct += ddebug_apply_class_bitmap(dcp, &new_bits, &old_bits, mod_name);
 		*dcp->lvl = inrep;
 		break;
 	default:
@@ -701,16 +711,33 @@ int param_set_dyndbg_classes(const char *instr, const struct kernel_param *kp)
 	vpr_info("%s: total matches: %d\n", KP_NAME(kp), totct);
 	return 0;
 }
+
+/**
+ * param_set_dyndbg_classes - classmap kparam setter
+ * @instr: string echo>d to sysfs, input depends on map_type
+ * @kp:    kp->arg has state: bits/lvl, map, map_type
+ *
+ * enable/disable all class'd pr_debugs in the classmap. For LEVEL
+ * map-types, enforce * relative levels by bitpos.
+ *
+ * Returns: 0 or <0 if error.
+ */
+int param_set_dyndbg_classes(const char *instr, const struct kernel_param *kp)
+{
+	return param_set_dyndbg_module_classes(instr, kp, NULL);
+}
 EXPORT_SYMBOL(param_set_dyndbg_classes);
 
 /**
- * param_get_dyndbg_classes - classes reader
+ * param_get_dyndbg_classes - classmap kparam getter
  * @buffer: string description of controlled bits -> classes
  * @kp:     kp->arg has state: bits, map
  *
- * Reads last written state, underlying prdbg state may have been
- * altered by direct >control.  Displays 0x for DISJOINT, 0-N for
- * LEVEL Returns: #chars written or <0 on error
+ * Reads last written state, underlying pr_debug states may have been
+ * altered by direct >control.  Displays 0x for DISJOINT classmap
+ * types, 0-N for LEVEL types.
+ *
+ * Returns: ct of chars written or <0 on error
  */
 int param_get_dyndbg_classes(char *buffer, const struct kernel_param *kp)
 {

-- 
2.54.0


  parent reply	other threads:[~2026-06-02 22:48 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-02 22:47 [PATCH v4 00/25] dynamic-debug cleanups refactors maintenance + alignment fix Jim Cromie
2026-06-02 22:47 ` [PATCH v4 01/25] docs/dyndbg: update examples \012 to \n Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:47 ` [PATCH v4 02/25] docs/dyndbg: explain flags parse 1st Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:48 ` [PATCH v4 03/25] vmlinux.lds.h: refactor BOUNDED_SECTION_* macros into bounded_sections.lds.h Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:48 ` [PATCH v4 04/25] vmlinux.lds.h: drop unused HEADERED_SECTION* macros Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:48 ` [PATCH v4 05/25] vmlinux.lds.h: Fix ALIGN(8) omission causing NULL ptr on i386 Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:48 ` [PATCH v4 06/25] vmlinux.lds.h: remove redundant ALIGN(8) directives Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:48 ` [PATCH v4 07/25] dyndbg.lds.S: fix lost dyndbg sections in modules Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:48 ` [PATCH v4 08/25] dyndbg: factor ddebug_match_desc out from ddebug_change Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:48 ` [PATCH v4 09/25] dyndbg: add stub macro for DECLARE_DYNDBG_CLASSMAP Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:48 ` [PATCH v4 10/25] dyndbg: reword "class unknown," to "class:_UNKNOWN_" Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:48 ` [PATCH v4 11/25] dyndbg-API: remove DD_CLASS_TYPE_(DISJOINT|LEVEL)_NAMES and code Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:48 ` [PATCH v4 12/25] dyndbg: drop NUM_TYPE_ARGS Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:48 ` [PATCH v4 13/25] dyndbg: reduce verbose/debug clutter Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:48 ` Jim Cromie [this message]
2026-06-04  2:12   ` Claude review: dyndbg: refactor param_set_dyndbg_classes and below Claude Code Review Bot
2026-06-02 22:48 ` [PATCH v4 15/25] dyndbg: tighten fn-sig of ddebug_apply_class_bitmap Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:48 ` [PATCH v4 16/25] dyndbg: replace classmap list with an array-slice Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:48 ` [PATCH v4 17/25] dyndbg: macrofy a 2-index for-loop pattern Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:48 ` [PATCH v4 18/25] dyndbg: Upgrade class param storage to u64 for 64-bit classmaps Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:48 ` [PATCH v4 19/25] dyndbg,module: make proper substructs in _ddebug_info Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:48 ` [PATCH v4 20/25] dyndbg: move mod_name down from struct ddebug_table to _ddebug_info Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:48 ` [PATCH v4 21/25] dyndbg: hoist classmap-filter-by-modname up to ddebug_add_module Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:48 ` [PATCH v4 22/25] selftests-dyndbg: add a dynamic_debug run_tests target Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:48 ` [PATCH v4 23/25] dyndbg: change __dynamic_func_call_cls* macros into expressions Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:48 ` [PATCH v4 24/25] lib/parser: add match_wildcard_hyphen() for agnostic matching Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-02 22:48 ` [PATCH v4 25/25] dynamic_debug: use KBUILD_MODFILE for unique builtin module names Jim Cromie
2026-06-04  2:12   ` Claude review: " Claude Code Review Bot
2026-06-04  2:12 ` Claude review: dynamic-debug cleanups refactors maintenance + alignment fix Claude Code Review Bot

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=20260602-dd-maint-2-v4-14-19a1445585a8@gmail.com \
    --to=jim.cromie@gmail.com \
    --cc=airlied@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=arnd@arndb.de \
    --cc=atomlin@atomlin.com \
    --cc=corbet@lwn.net \
    --cc=da.gomez@kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jbaron@akamai.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-modules@vger.kernel.org \
    --cc=louis.chauvet@bootlin.com \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=mcgrof@kernel.org \
    --cc=mripard@kernel.org \
    --cc=petr.pavlu@suse.com \
    --cc=samitolvanen@google.com \
    --cc=shuah@kernel.org \
    --cc=simona@ffwll.ch \
    --cc=skhan@linuxfoundation.org \
    --cc=tzimmermann@suse.de \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox