From: Jason Baron <jbaron@akamai.com>
To: Jim Cromie <jim.cromie@gmail.com>, <linux-kernel@vger.kernel.org>,
<dri-devel@lists.freedesktop.org>, <gregkh@linuxfoundation.org>
Cc: <ukaszb@chromium.org>, <louis.chauvet@bootlin.com>
Subject: Re: [PATCH v6 00/31] drm/dyndbg: Fix dynamic debug classmap regression
Date: Wed, 10 Dec 2025 14:09:10 -0500 [thread overview]
Message-ID: <76038c97-39ca-4672-adc0-4e8fe0e39fc8@akamai.com> (raw)
In-Reply-To: <20251118201842.1447666-1-jim.cromie@gmail.com>
On 11/18/25 3:18 PM, Jim Cromie wrote:
> !-------------------------------------------------------------------|
> This Message Is From an External Sender
> This message came from outside your organization.
> |-------------------------------------------------------------------!
>
> hello all,
>
> commit aad0214f3026 ("dyndbg: add DECLARE_DYNDBG_CLASSMAP macro")
>
> added dyndbg's "classmaps" feature, which brought dyndbg's 0-off-cost
> debug to DRM. Dyndbg wired to /sys/module/drm/parameters/debug,
> mapped its bits to classes named "DRM_UT_*", and effected the callsite
> enablements only on updates to the sys-node (and underlying >control).
>
> Sadly, it hit a CI failure, resulting in:
> commit bb2ff6c27bc9 ("drm: Disable dynamic debug as broken")
>
> The regression was that drivers, when modprobed, did not get the
> drm.debug=0xff turn-on action, because that had already been done for
> drm.ko itself.
>
> The core design bug is in the DECLARE_DYNDBG_CLASSMAP macro. Its use
> in both drm.ko (ie core) and all drivers.ko meant that they couldn't
> fundamentally distinguish their respective roles. They each
> "re-defined" the classmap separately, breaking K&R-101.
>
> My ad-hoc test scripting helped to hide the error from me, by 1st
> testing various combos of boot-time module.dyndbg=... and
> drm.debug=... configurations, and then inadvertently relying upon
> those initializations.
>
> This series addresses both failings:
>
> It replaces DECLARE_DYNDBG_CLASSMAP with
>
> - `DYNAMIC_DEBUG_CLASSMAP_DEFINE`: Used by core modules (e.g.,
> `drm.ko`) to define their classmaps. Based upon DECLARE, it exports
> the classmap so USE can use it.
>
> - `DYNAMIC_DEBUG_CLASSMAP_USE`: this lets other "subsystem" users
> create a linkage to the classmap defined elsewhere (ie drm.ko).
> These users can then find their "parent" and apply its settings.
>
> It adds a selftest script, and a 2nd "sub-module" to recapitulate
> DRM's multi-module "subsystem" use-case, including the specific
> failure scenario.
>
> It also adds minor parsing enhancements, allowing easier construction
> of multi-part debug configurations. These enhancements are used to
> test classmaps in particular, but are not otherwize required.
>
> Thank you for your review.
>
> P.S. Id also like to "tease" some other work:
>
> 1. patchset to send pr_debugs to tracefs on +T flag
>
> allows 63 "private" tracebufs, 1 "common" one (at 0)
> "drm.debug_2trace=0x1ff" is possible
> from Lukas Bartoski
>
> 2. patchset to save 40% of DATA_DATA footprint
>
> move (modname,filename,function) to struct _ddebug_site
> save their descriptor intervals to 3 maple-trees
> 3 accessors fetch on descriptor, from trees
> move __dyndbg_sites __section to INIT_DATA
>
> 3. patchset to cache dynamic-prefixes
> should hide 2.s cost increase.
>
>
Hi Jim,
I just wanted to confirm my understanding that the class names here are
'global'. That is if say two different modules both used say the name
"core" in their DYNAMIC_DEBUG_CLASSMAP_DEFINE() name array, then if the
user did: echo "class core +p > control", then that would enable all the
sites that had the class name "core" in both modules. One could add the
"module" modifier to the request if needed.
One could prepend the module name to the class names to make them unique
but it's not much different from adding a separate 'module blah' in the
request. So probably fine as is, but maybe worth calling out in the docs
a bit?
Thanks,
-Jason
next prev parent reply other threads:[~2025-12-10 19:09 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-18 20:18 Jim Cromie
2025-11-18 20:18 ` [PATCH v6 01/31] dyndbg: factor ddebug_match_desc out from ddebug_change Jim Cromie
2025-11-18 20:18 ` [PATCH v6 02/31] dyndbg: add stub macro for DECLARE_DYNDBG_CLASSMAP Jim Cromie
2025-11-18 20:18 ` [PATCH v6 03/31] docs/dyndbg: update examples \012 to \n Jim Cromie
2025-11-18 20:18 ` [PATCH v6 04/31] docs/dyndbg: explain flags parse 1st Jim Cromie
2025-11-20 9:30 ` Bagas Sanjaya
2025-11-18 20:18 ` [PATCH v6 05/31] test-dyndbg: fixup CLASSMAP usage error Jim Cromie
2025-11-18 20:18 ` [PATCH v6 06/31] dyndbg: reword "class unknown," to "class:_UNKNOWN_" Jim Cromie
2025-11-18 20:18 ` [PATCH v6 07/31] dyndbg: make ddebug_class_param union members same size Jim Cromie
2025-11-18 20:18 ` [PATCH v6 08/31] dyndbg: drop NUM_TYPE_ARRAY Jim Cromie
2025-11-18 20:18 ` [PATCH v6 09/31] dyndbg: tweak pr_fmt to avoid expansion conflicts Jim Cromie
2025-11-18 20:18 ` [PATCH v6 10/31] dyndbg: reduce verbose/debug clutter Jim Cromie
2025-11-18 20:18 ` [PATCH v6 11/31] dyndbg: refactor param_set_dyndbg_classes and below Jim Cromie
2025-11-18 20:18 ` [PATCH v6 12/31] dyndbg: tighten fn-sig of ddebug_apply_class_bitmap Jim Cromie
2025-11-18 20:18 ` [PATCH v6 13/31] dyndbg: replace classmap list with a vector Jim Cromie
2025-11-18 20:18 ` [PATCH v6 14/31] dyndbg: macrofy a 2-index for-loop pattern Jim Cromie
2025-11-18 20:18 ` [PATCH v6 15/31] dyndbg,module: make proper substructs in _ddebug_info Jim Cromie
2025-11-18 20:18 ` [PATCH v6 16/31] dyndbg: hoist classmap-filter-by-modname up to ddebug_add_module Jim Cromie
2025-12-09 22:43 ` Jason Baron
2025-12-10 6:33 ` jim.cromie
2025-12-10 19:14 ` Jason Baron
2025-12-10 20:21 ` jim.cromie
2025-12-12 16:05 ` Jason Baron
2025-12-14 18:09 ` jim.cromie
2025-11-18 20:18 ` [PATCH v6 17/31] dyndbg: move mod_name down from struct ddebug_table to _ddebug_info Jim Cromie
2025-11-18 20:18 ` [PATCH v6 18/31] dyndbg-API: remove DD_CLASS_TYPE_(DISJOINT|LEVEL)_NAMES and code Jim Cromie
2025-11-18 20:18 ` [PATCH v6 19/31] selftests-dyndbg: add a dynamic_debug run_tests target Jim Cromie
2025-11-18 20:18 ` [PATCH v6 20/31] dyndbg: change __dynamic_func_call_cls* macros into expressions Jim Cromie
2025-11-18 20:18 ` [PATCH v6 21/31] dyndbg-API: replace DECLARE_DYNDBG_CLASSMAP Jim Cromie
2025-11-18 20:18 ` [PATCH v6 22/31] dyndbg: detect class_id reservation conflicts Jim Cromie
2025-11-18 20:18 ` [PATCH v6 23/31] dyndbg: check DYNAMIC_DEBUG_CLASSMAP_DEFINE args at compile-time Jim Cromie
2025-11-18 20:18 ` [PATCH v6 24/31] dyndbg-test: change do_prints testpoint to accept a loopct Jim Cromie
2025-11-18 20:18 ` [PATCH v6 25/31] dyndbg-API: promote DYNAMIC_DEBUG_CLASSMAP_PARAM to API Jim Cromie
2025-11-18 20:18 ` [PATCH v6 26/31] dyndbg: treat comma as a token separator Jim Cromie
2025-11-18 20:18 ` [PATCH v6 27/31] dyndbg: split multi-query strings with % Jim Cromie
2025-11-18 20:18 ` [PATCH v6 28/31] selftests-dyndbg: add test_mod_submod Jim Cromie
2025-11-18 20:18 ` [PATCH v6 29/31] dyndbg: resolve "protection" of class'd pr_debug Jim Cromie
2025-12-11 21:25 ` Jason Baron
2025-12-14 18:04 ` jim.cromie
2025-11-18 20:18 ` [PATCH v6 30/31] dyndbg: add DYNAMIC_DEBUG_CLASSMAP_USE_(dd_class_name, offset) Jim Cromie
2025-12-11 21:22 ` Jason Baron
2025-11-18 20:18 ` [PATCH v6 31/31] docs/dyndbg: add classmap info to howto Jim Cromie
2025-11-20 3:08 ` Bagas Sanjaya
2025-11-20 16:22 ` jim.cromie
2025-11-19 1:35 ` [PATCH v6 00/31] drm/dyndbg: Fix dynamic debug classmap regression Bagas Sanjaya
2025-11-19 8:12 ` jim.cromie
2025-11-20 2:00 ` Bagas Sanjaya
2025-12-10 19:09 ` Jason Baron [this message]
2025-12-10 21:12 ` jim.cromie
2025-12-12 15:56 ` Jason Baron
2025-12-14 18:24 ` jim.cromie
2025-12-14 19:54 ` Jeff King
2025-12-14 22:52 ` jim.cromie
2025-12-15 8:07 ` Jeff King
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=76038c97-39ca-4672-adc0-4e8fe0e39fc8@akamai.com \
--to=jbaron@akamai.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=gregkh@linuxfoundation.org \
--cc=jim.cromie@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=louis.chauvet@bootlin.com \
--cc=ukaszb@chromium.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®