From: Jim Cromie <jim.cromie@gmail.com>
To: jbaron@akamai.com
Cc: gregkh@linuxfoundation.org, ukaszb@chromium.org,
louis.chauvet@bootlin.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, daniel.vetter@ffwll.ch,
tvrtko.ursulin@linux.intel.com, jani.nikula@intel.com,
ville.syrjala@linux.intel.com, Jim Cromie <jim.cromie@gmail.com>
Subject: [PATCH v5 15/30] dyndbg: hoist classmap-filter-by-modname up to ddebug_add_module
Date: Thu, 9 Oct 2025 11:58:19 -0600 [thread overview]
Message-ID: <20251009175834.1024308-16-jim.cromie@gmail.com> (raw)
In-Reply-To: <20251009175834.1024308-1-jim.cromie@gmail.com>
The body of ddebug_attach_module_classes() is dominated by a
code-block that finds the contiguous subrange of classmaps matching on
modname, and saves it into the ddebug_table's info record.
Implement this block in a macro to accommodate different component
vectors in the "box" (as named in the for_subvec macro).
And hoist its invocation out of ddebug_attach_module_classes() up into
ddebug_add_module(). This moves the filtering step up closer to
dynamic_debug_init(), which effectively does the same for builtin
pr_debug descriptors; segmenting them into subranges by modname.
Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
lib/dynamic_debug.c | 56 ++++++++++++++++++++++++++-------------------
1 file changed, 32 insertions(+), 24 deletions(-)
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index 53ce28255426..bbbdb8aba071 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -161,8 +161,8 @@ static void vpr_info_dq(const struct ddebug_query *query, const char *msg)
}
static struct _ddebug_class_map *ddebug_find_valid_class(struct ddebug_table const *dt,
- const char *class_string,
- int *class_id)
+ const char *class_string,
+ int *class_id)
{
struct _ddebug_class_map *map;
int i, idx;
@@ -1224,30 +1224,34 @@ static const struct proc_ops proc_fops = {
static void ddebug_attach_module_classes(struct ddebug_table *dt, struct _ddebug_info *di)
{
- struct _ddebug_class_map *cm;
- int i, nc = 0;
-
- /*
- * Find this module's classmaps in a subrange/wholerange of
- * the builtin/modular classmap vector/section. Save the start
- * and length of the subrange at its edges.
- */
- for_subvec(i, cm, di, maps) {
- if (!strcmp(cm->mod_name, dt->mod_name)) {
- if (!nc) {
- v2pr_info("start subrange, class[%d]: module:%s base:%d len:%d ty:%d\n",
- i, cm->mod_name, cm->base, cm->length, cm->map_type);
- dt->info.maps.start = cm;
- }
- nc++;
- }
- }
- if (nc) {
- dt->info.maps.len = nc;
- vpr_info("module:%s attached %d classes\n", dt->mod_name, nc);
- }
+ vpr_info("module:%s attached %d classes\n", dt->mod_name, dt->info.maps.len);
}
+/*
+ * Walk the @_box->@_vec member, over @_vec.start[0..len], and find
+ * the contiguous subrange of elements matching on ->mod_name. Copy
+ * the subrange into @_dst. This depends on vars defd by caller.
+ *
+ * @_i: caller provided counter var, init'd by macro
+ * @_sp: cursor into @_vec.
+ * @_box: contains member named @_vec
+ * @_vec: an array-ref, with: .start .len fields.
+ * @_dst: an array-ref: to remember the module's subrange
+ */
+#define dd_mark_vector_subrange(_i, _dst, _sp, _box, _vec) ({ \
+ int nc = 0; \
+ for_subvec(_i, _sp, _box, _vec) { \
+ if (!strcmp((_sp)->mod_name, (_dst)->mod_name)) { \
+ if (!nc++) \
+ (_dst)->info._vec.start = (_sp); \
+ } else { \
+ if (nc) \
+ break; /* end of consecutive matches */ \
+ } \
+ } \
+ (_dst)->info._vec.len = nc; \
+})
+
/*
* Allocate a new ddebug_table for the given module
* and add it to the global list.
@@ -1255,6 +1259,8 @@ static void ddebug_attach_module_classes(struct ddebug_table *dt, struct _ddebug
static int ddebug_add_module(struct _ddebug_info *di, const char *modname)
{
struct ddebug_table *dt;
+ struct _ddebug_class_map *cm;
+ int i;
if (!di->descs.len)
return 0;
@@ -1277,6 +1283,8 @@ static int ddebug_add_module(struct _ddebug_info *di, const char *modname)
INIT_LIST_HEAD(&dt->link);
+ dd_mark_vector_subrange(i, dt, cm, di, maps);
+
if (di->maps.len)
ddebug_attach_module_classes(dt, di);
--
2.51.0
next prev parent reply other threads:[~2025-10-13 19:04 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-09 17:58 [PATCH v5 00/30] Fix DYNAMIC_DEBUG classmaps for DRM Jim Cromie
2025-10-09 17:58 ` [PATCH v5 01/30] docs/dyndbg: update examples \012 to \n Jim Cromie
2025-10-09 17:58 ` [PATCH v5 02/30] docs/dyndbg: explain flags parse 1st Jim Cromie
2025-10-09 17:58 ` [PATCH v5 03/30] test-dyndbg: fixup CLASSMAP usage error Jim Cromie
2025-10-09 17:58 ` [PATCH v5 04/30] dyndbg: reword "class unknown, " to "class:_UNKNOWN_" Jim Cromie
2025-10-09 17:58 ` [PATCH v5 05/30] dyndbg: make ddebug_class_param union members same size Jim Cromie
2025-10-09 17:58 ` [PATCH v5 06/30] dyndbg: drop NUM_TYPE_ARRAY Jim Cromie
2025-10-09 17:58 ` [PATCH v5 07/30] dyndbg: tweak pr_fmt to avoid expansion conflicts Jim Cromie
2025-10-09 17:58 ` [PATCH v5 08/30] dyndbg: reduce verbose/debug clutter Jim Cromie
2025-10-09 17:58 ` [PATCH v5 09/30] dyndbg: refactor param_set_dyndbg_classes and below Jim Cromie
2025-10-09 17:58 ` [PATCH v5 10/30] dyndbg: tighten fn-sig of ddebug_apply_class_bitmap Jim Cromie
2025-10-09 17:58 ` [PATCH v5 11/30] dyndbg: replace classmap list with a vector Jim Cromie
2025-10-09 17:58 ` [PATCH v5 12/30] dyndbg: macrofy a 2-index for-loop pattern Jim Cromie
2025-10-09 17:58 ` [PATCH v5 13/30] dyndbg: DECLARE_DYNDBG_CLASSMAP needs stub defn Jim Cromie
2025-10-09 17:58 ` [PATCH v5 14/30] dyndbg, module: make proper substructs in _ddebug_info Jim Cromie
2025-10-09 17:58 ` Jim Cromie [this message]
2025-10-09 17:58 ` [PATCH v5 16/30] dyndbg: move mod_name from ddebug_table down to _ddebug_info Jim Cromie
2025-10-09 17:58 ` [PATCH v5 17/30] dyndbg-API: remove DD_CLASS_TYPE_(DISJOINT|LEVEL)_NAMES and code Jim Cromie
2025-10-09 17:58 ` [PATCH v5 18/30] selftests-dyndbg: add a dynamic_debug run_tests target Jim Cromie
2025-10-09 17:58 ` [PATCH v5 19/30] dyndbg: change __dynamic_func_call_cls* macros into expressions Jim Cromie
2025-10-09 17:58 ` [PATCH v5 20/30] dyndbg-API: replace DECLARE_DYNDBG_CLASSMAP Jim Cromie
2025-10-09 17:58 ` [PATCH v5 21/30] dyndbg: detect class_id reservation conflicts Jim Cromie
2025-10-09 17:58 ` [PATCH v5 22/30] dyndbg: check DYNAMIC_DEBUG_CLASSMAP_DEFINE args at compile-time Jim Cromie
2025-10-09 17:58 ` [PATCH v5 23/30] dyndbg-test: change do_prints testpoint to accept a loopct Jim Cromie
2025-10-09 17:58 ` [PATCH v5 24/30] dyndbg-API: promote DYNAMIC_DEBUG_CLASSMAP_PARAM to API Jim Cromie
2025-10-09 17:58 ` [PATCH v5 25/30] dyndbg: treat comma as a token separator Jim Cromie
2025-10-09 17:58 ` [PATCH v5 26/30] dyndbg: split multi-query strings with % Jim Cromie
2025-10-09 17:58 ` [PATCH v5 27/30] selftests-dyndbg: add test_mod_submod Jim Cromie
2025-10-09 17:58 ` [PATCH v5 28/30] dyndbg: resolve "protection" of class'd pr_debugs Jim Cromie
2025-10-09 17:58 ` [PATCH v5 29/30] dyndbg: add DYNAMIC_DEBUG_CLASSMAP_USE_(clname, _base) Jim Cromie
2025-10-09 17:58 ` [PATCH v5 30/30] docs/dyndbg: add classmap info to howto Jim Cromie
2025-10-13 23:03 ` ✓ i915.CI.BAT: success for Fix DYNAMIC_DEBUG classmaps for DRM Patchwork
2025-10-14 8:03 ` ✓ i915.CI.Full: " 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=20251009175834.1024308-16-jim.cromie@gmail.com \
--to=jim.cromie@gmail.com \
--cc=amd-gfx@lists.freedesktop.org \
--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=jani.nikula@intel.com \
--cc=jbaron@akamai.com \
--cc=linux-kernel@vger.kernel.org \
--cc=louis.chauvet@bootlin.com \
--cc=tvrtko.ursulin@linux.intel.com \
--cc=ukaszb@chromium.org \
--cc=ville.syrjala@linux.intel.com \
/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;
as well as URLs for NNTP newsgroup(s).