From: Jim Cromie <jim.cromie@gmail.com>
To: linux-kernel@vger.kernel.org, jbaron@akamai.com,
gregkh@linuxfoundation.org, ukaszb@chromium.org,
louis.chauvet@bootlin.com
Cc: 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, seanpaul@chromium.org,
robdclark@gmail.com, groeck@google.com, yanivt@google.com,
bleung@google.com, quic_saipraka@quicinc.com, will@kernel.org,
catalin.marinas@arm.com, quic_psodagud@quicinc.com,
maz@kernel.org, arnd@arndb.de,
linux-arm-kernel@lists.infradead.org,
linux-arm-msm@vger.kernel.org, mingo@redhat.com,
jim.cromie@gmail.com
Subject: [PATCH v4 27/58] dyndbg: drop "protection" of class'd pr_debugs from legacy queries
Date: Sat, 2 Aug 2025 21:57:45 -0600 [thread overview]
Message-ID: <20250803035816.603405-28-jim.cromie@gmail.com> (raw)
In-Reply-To: <20250803035816.603405-1-jim.cromie@gmail.com>
Current classmap code protects class'd pr_debugs from unintended
changes by "legacy" unclassed queries:
# this doesn't disable all of DRM_UT_* categories
echo "-p" > /proc/dynamic_debug/control
# name the class to change it - protective but tedious
echo "class DRM_UT_CORE +p" > /proc/dynamic_debug/control
# or do it the (old school) subsystem way
echo 1 > /sys/module/drm/parameters/debug
This "name the class to change it" behavior gave a modicum of
protection to classmap users (ie DRM) so their debug settings aren't
trivially and unintentionally altered underneath them.
And by "symmetry", if they're not picked by "class FOO", then they're
excluded from adjustment. This allowed all previously conceived
queries to work the way they always had; ie select the same set of
pr_debugs, despite the inclusion of whole new classes of pr_debugs.
That had 2 downsides:
1. "name the class to change it" means that every class must be
individually modified, quickly becoming long-winded and tedious to
adjust all the classes in a map via >control.
2. It made the class keyword special in some sense; the other keywords
skip only on explicit mismatch, otherwise the code falls thru to
adjust the pr-debug site.
So this patch reverts to the traditional view, it drops protection of
classes from default/legacy queries.
But it also refactors the skip/continue choice to allow the module
defining the classmap to protect its classes from unintended
alterations by legacy/class-less queries.
Next:
Author choice: use of DYNAMIC_DEBUG_CLASSMAP_PARAM() means they want
the drm.debug style control point. We should presume they want it to
reflect whats set underneath, with only "class FOO" qualified queries
changing the callsites beneath.
CC: jbaron@akamai.com
Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
--
v3- s/slctd_/selected_/
pitch the PARAM control of protection.
---
lib/dynamic_debug.c | 31 +++++++++++++++++++++++--------
1 file changed, 23 insertions(+), 8 deletions(-)
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index 73076709d169e..548a82a178d49 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -197,6 +197,17 @@ ddebug_find_valid_class(struct _ddebug_info const *di, const char *query_class,
return NULL;
}
+/*
+ * classmaps-v1 protected classes from changes by legacy commands
+ * (those selecting _DPRINTK_CLASS_DFLT by omission), v2 undoes that
+ * special treatment. State so explicitly. Later we could give
+ * modules the choice to protect their classes or to keep v2 behavior.
+ */
+static inline bool ddebug_client_module_protects_classes(const struct ddebug_table *dt)
+{
+ return false;
+}
+
/*
* Search the tables for _ddebug's which match the given `query' and
* apply the `flags' and `mask' to them. Returns number of matching
@@ -211,7 +222,7 @@ static int ddebug_change(const struct ddebug_query *query, struct flag_settings
unsigned int nfound = 0;
struct flagsbuf fbuf, nbuf;
struct _ddebug_class_map *map = NULL;
- int valid_class;
+ int selected_class;
/* search for matching ddebugs */
mutex_lock(&ddebug_lock);
@@ -224,21 +235,25 @@ static int ddebug_change(const struct ddebug_query *query, struct flag_settings
if (query->class_string) {
map = ddebug_find_valid_class(&dt->info, query->class_string,
- &valid_class);
+ &selected_class);
if (!map)
continue;
} else {
- /* constrain query, do not touch class'd callsites */
- valid_class = _DPRINTK_CLASS_DFLT;
+ selected_class = _DPRINTK_CLASS_DFLT;
}
for (i = 0; i < dt->info.descs.len; i++) {
struct _ddebug *dp = &dt->info.descs.start[i];
- /* match site against query-class */
- if (dp->class_id != valid_class)
- continue;
-
+ if (dp->class_id != selected_class) {
+ if (query->class_string)
+ /* site.class != given class */
+ continue;
+ /* legacy query, class'd site */
+ else if (ddebug_client_module_protects_classes(dt))
+ continue;
+ /* allow change on class'd pr_debug */
+ }
/* match against the source filename */
if (query->filename &&
!match_wildcard(query->filename, dp->filename) &&
--
2.50.1
next prev parent reply other threads:[~2025-08-03 5:13 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-03 3:57 [PATCH v4 00/58] fix CONFIG_DRM_USE_DYNAMIC_DEBUG=y Jim Cromie
2025-08-03 3:57 ` [PATCH v4 01/58] docs/dyndbg: update examples \012 to \n Jim Cromie
2025-08-03 3:57 ` [PATCH v4 02/58] docs/dyndbg: explain flags parse 1st Jim Cromie
2025-08-03 3:57 ` [PATCH v4 03/58] test-dyndbg: fixup CLASSMAP usage error Jim Cromie
2025-08-03 3:57 ` [PATCH v4 04/58] dyndbg: reword "class unknown," to "class:_UNKNOWN_" Jim Cromie
2025-08-03 3:57 ` [PATCH v4 05/58] dyndbg: make ddebug_class_param union members same size Jim Cromie
2025-08-03 3:57 ` [PATCH v4 06/58] dyndbg: drop NUM_TYPE_ARRAY Jim Cromie
2025-08-03 3:57 ` [PATCH v4 07/58] dyndbg: tweak pr_fmt to avoid expansion conflicts Jim Cromie
2025-08-03 3:57 ` [PATCH v4 08/58] dyndbg: reduce verbose/debug clutter Jim Cromie
2025-08-03 3:57 ` [PATCH v4 09/58] dyndbg: refactor param_set_dyndbg_classes and below Jim Cromie
2025-08-03 3:57 ` [PATCH v4 10/58] dyndbg: tighten fn-sig of ddebug_apply_class_bitmap Jim Cromie
2025-08-03 3:57 ` [PATCH v4 11/58] dyndbg: replace classmap list with a vector Jim Cromie
2025-08-03 3:57 ` [PATCH v4 12/58] dyndbg: macrofy a 2-index for-loop pattern Jim Cromie
2025-08-03 3:57 ` [PATCH v4 13/58] dyndbg,module: make proper substructs in _ddebug_info Jim Cromie
2025-08-03 3:57 ` [PATCH v4 14/58] dyndbg: hoist classmap-filter-by-modname up to ddebug_add_module Jim Cromie
2025-08-03 3:57 ` [PATCH v4 15/58] dyndbg: ddebug_table.mod_name down to _ddebug_info Jim Cromie
2025-08-03 3:57 ` [PATCH v4 16/58] dyndbg-API: remove DD_CLASS_TYPE_(DISJOINT|LEVEL)_NAMES and code Jim Cromie
2025-08-03 3:57 ` [PATCH v4 17/58] selftests-dyndbg: add a dynamic_debug run_tests target Jim Cromie
2025-08-03 3:57 ` [PATCH v4 18/58] dyndbg: change __dynamic_func_call_cls* macros into expressions Jim Cromie
2025-08-03 3:57 ` [PATCH v4 19/58] dyndbg-API: replace DECLARE_DYNDBG_CLASSMAP Jim Cromie
2025-08-03 3:57 ` [PATCH v4 20/58] dyndbg: detect class_id reservation conflicts Jim Cromie
2025-08-03 3:57 ` [PATCH v4 21/58] dyndbg: check DYNAMIC_DEBUG_CLASSMAP_DEFINE args at compile-time Jim Cromie
2025-08-03 3:57 ` [PATCH v4 22/58] dyndbg-test: change do_prints testpoint to accept a loopct Jim Cromie
2025-08-03 3:57 ` [PATCH v4 23/58] dyndbg-API: promote DYNAMIC_DEBUG_CLASSMAP_PARAM to API Jim Cromie
2025-08-03 3:57 ` [PATCH v4 24/58] dyndbg: treat comma as a token separator Jim Cromie
2025-08-03 3:57 ` [PATCH v4 25/58] dyndbg: split multi-query strings with % Jim Cromie
2025-08-03 3:57 ` [PATCH v4 26/58] selftests-dyndbg: add test_mod_submod Jim Cromie
2025-08-03 3:57 ` Jim Cromie [this message]
2025-08-03 3:57 ` [PATCH v4 28/58] dyndbg: restore classmap protection when theres a controlling_param Jim Cromie
2025-08-03 3:57 ` [PATCH v4 29/58] docs/dyndbg: add classmap info to howto Jim Cromie
2025-08-03 3:57 ` [PATCH v4 30/58] dyndbg: reserve flag-bit _DPRINTK_FLAGS_PREFIX_CACHED Jim Cromie
2025-08-03 3:57 ` [PATCH v4 31/58] dyndbg: add _DPRINTK_FLAGS_INCL_LOOKUP for +mfsl flags Jim Cromie
2025-08-03 3:57 ` [PATCH v4 32/58] dyndbg: refactor *dynamic_emit_prefix to split lookups Jim Cromie
2025-08-03 3:57 ` [PATCH v4 33/58] drm: use correct ccflags-y spelling Jim Cromie
2025-08-03 3:57 ` [PATCH v4 34/58] drm-dyndbg: adapt drm core to use dyndbg classmaps-v2 Jim Cromie
2025-08-03 3:57 ` [PATCH v4 35/58] drm-dyndbg: adapt DRM to invoke DYNAMIC_DEBUG_CLASSMAP_PARAM Jim Cromie
2025-08-03 3:57 ` [PATCH v4 36/58] drm-print: fix config-dependent unused variable Jim Cromie
2025-08-03 3:57 ` [PATCH v4 37/58] drm-dyndbg: DRM_CLASSMAP_USE in amdgpu driver Jim Cromie
2025-08-03 3:57 ` [PATCH v4 38/58] drm-dyndbg: DRM_CLASSMAP_USE in i915 driver Jim Cromie
2025-08-03 3:57 ` [PATCH v4 39/58] drm-dyndbg: DRM_CLASSMAP_USE in drm_crtc_helper Jim Cromie
2025-08-03 3:57 ` [PATCH v4 40/58] drm-dyndbg: DRM_CLASSMAP_USE in drm_dp_helper Jim Cromie
2025-08-03 3:57 ` [PATCH v4 41/58] drm-dyndbg: DRM_CLASSMAP_USE in nouveau Jim Cromie
2025-08-03 3:58 ` [PATCH v4 42/58] drm-dyndbg: add DRM_CLASSMAP_USE to Xe driver Jim Cromie
2025-08-03 3:58 ` [PATCH v4 43/58] drm-dyndbg: add DRM_CLASSMAP_USE to virtio_gpu Jim Cromie
2025-08-03 3:58 ` [PATCH v4 44/58] drm-dyndbg: add DRM_CLASSMAP_USE to simpledrm Jim Cromie
2025-08-03 3:58 ` [PATCH v4 45/58] drm-dyndbg: add DRM_CLASSMAP_USE to bochs Jim Cromie
2025-08-03 3:58 ` [PATCH v4 46/58] drm-dyndbg: add DRM_CLASSMAP_USE to etnaviv Jim Cromie
2025-08-03 3:58 ` [PATCH v4 47/58] drm-dyndbg: add DRM_CLASSMAP_USE to gma500 driver Jim Cromie
2025-08-03 3:58 ` [PATCH v4 48/58] drm-dyndbg: add DRM_CLASSMAP_USE to radeon Jim Cromie
2025-08-03 3:58 ` [PATCH v4 49/58] drm-dyndbg: add DRM_CLASSMAP_USE to vmwgfx driver Jim Cromie
2025-08-03 3:58 ` [PATCH v4 50/58] drm-dyndbg: add DRM_CLASSMAP_USE to vkms driver Jim Cromie
2025-08-03 3:58 ` [PATCH v4 51/58] drm-dyndbg: add DRM_CLASSMAP_USE to udl driver Jim Cromie
2025-08-03 3:58 ` [PATCH v4 52/58] drm-dyndbg: add DRM_CLASSMAP_USE to mgag200 driver Jim Cromie
2025-08-03 3:58 ` [PATCH v4 53/58] drm-dyndbg: add DRM_CLASSMAP_USE to the gud driver Jim Cromie
2025-08-03 3:58 ` [PATCH v4 54/58] drm-dyndbg: add DRM_CLASSMAP_USE to the qxl driver Jim Cromie
2025-08-03 3:58 ` [PATCH v4 55/58] drm-dyndbg: add DRM_CLASSMAP_USE to the drm_gem_shmem_helper driver Jim Cromie
2025-08-03 3:58 ` [PATCH v4 56/58] drm: restore CONFIG_DRM_USE_DYNAMIC_DEBUG un-BROKEN Jim Cromie
2025-08-03 3:58 ` [PATCH v4 57/58] amdxdna: add -DDYNAMIC_DEBUG_MODULE to cflags - RFC Jim Cromie
2025-08-03 3:58 ` [PATCH v4 58/58] accel: add -DDYNAMIC_DEBUG_MODULE to subdir-cflags " Jim Cromie
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=20250803035816.603405-28-jim.cromie@gmail.com \
--to=jim.cromie@gmail.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=arnd@arndb.de \
--cc=bleung@google.com \
--cc=catalin.marinas@arm.com \
--cc=daniel.vetter@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=gregkh@linuxfoundation.org \
--cc=groeck@google.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-gvt-dev@lists.freedesktop.org \
--cc=jani.nikula@intel.com \
--cc=jbaron@akamai.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=louis.chauvet@bootlin.com \
--cc=maz@kernel.org \
--cc=mingo@redhat.com \
--cc=quic_psodagud@quicinc.com \
--cc=quic_saipraka@quicinc.com \
--cc=robdclark@gmail.com \
--cc=seanpaul@chromium.org \
--cc=tvrtko.ursulin@linux.intel.com \
--cc=ukaszb@chromium.org \
--cc=ville.syrjala@linux.intel.com \
--cc=will@kernel.org \
--cc=yanivt@google.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).