dri-devel.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
From: Louis Chauvet <louis.chauvet@bootlin.com>
To: Jim Cromie <jim.cromie@gmail.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,
	intel-gfx-trybot@lists.freedesktop.org
Cc: jbaron@akamai.com, gregkh@linuxfoundation.org,
	ukaszb@chromium.org, daniel.vetter@ffwll.ch,
	tvrtko.ursulin@linux.intel.com, jani.nikula@intel.com,
	ville.syrjala@linux.intel.com
Subject: Re: [PATCH v2 30/59] dyndbg: drop "protection" of class'd pr_debugs from legacy queries
Date: Mon, 24 Mar 2025 16:20:50 +0100	[thread overview]
Message-ID: <0828cfdb-abf3-42c5-8500-70f36affd0a8@bootlin.com> (raw)
In-Reply-To: <20250320185238.447458-31-jim.cromie@gmail.com>



Le 20/03/2025 à 19:52, Jim Cromie a écrit :
> 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 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.
> 
> But this made the class keyword special in some sense; the other
> keywords skip only on explicit mismatch, otherwize the code falls thru

s/otherwize/otherwise/

> to adjust the pr-debug site.
> 
> So Jason Baron didn't like this special case when I 1st proposed it;
> I argued 2 points:
> - "protection gives stable-debug, improving utility"
> - __drm_debug is authoritative w/o dyndbg under it.
> 
> I thought I'd convinced him back then, (and the patchset got merged),
> but he noted it again when he reviewed this series.  So this commit
> names the "special case": ddebug_client_module_protects_classes(), and
> reverts it to Jason's preference.
  >
> If a class mismatch is seen, code distinguishes whether the class was
> explicitly given (and always skips/continue), or the DFLT was assumed
> because no class was given.  Here we test
> ddebug_client_module_protects_classes(), skip if so.
> 
> Later, if any user/module wants to protect its classes, we could add a
> flag to ddebug_table, a means to set it from CLASSMAP_DEFINE, and
> check it when applying a classless query/cmd.

I don't really understand the goal of the protection, do you have the 
discussion between you and Jason so I can have some context and some 
answer to my questions?

With the example you gave above, I think this could lead to a very odd 
behavior: if I enable dyndbg, I expect any pr_dbg to be managed by 
dyndbg settings.

If a user writes stuff on dyndbg control, he clearly knows what he is 
doing, and he wants to control what logs he wants.

And if you allow multiple "protected" users, the normal way to disable 
all dyndbg logs will be:

	ddcmd -p
	ddcmd class DRM_UT_CORE -p
	ddcmd class DRM_... -p # all drm classes
	ddcmd class SPI_... -p # all spi classes
	ddcmd class WHATEVER_... -p # all other subsystem

	# And only now you can enable only what you want
	ddcmd module my_mod +p

This is clearly annoying to write.

If DRM (or whatever subsystem) wants to add a debug parameter and use it 
to control their logs without being impacted by dyndbg, I believe it 
should not use dyndbg classes to do it.

> CC: jbaron@akamai.com
> Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
> ---
>   lib/dynamic_debug.c | 34 +++++++++++++++++++++++++---------
>   1 file changed, 25 insertions(+), 9 deletions(-)
> 
> diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
> index c44502787c2b..13de0dd3a4ad 100644
> --- a/lib/dynamic_debug.c
> +++ b/lib/dynamic_debug.c
> @@ -193,6 +193,17 @@ static int ddebug_find_valid_class(struct ddebug_table const *dt, const char *cl
>   	return -ENOENT;
>   }
>   
> +/*
> + * 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
> @@ -206,7 +217,7 @@ static int ddebug_change(const struct ddebug_query *query, struct flag_settings
>   	unsigned int newflags;
>   	unsigned int nfound = 0;
>   	struct flagsbuf fbuf, nbuf;
> -	int valid_class;
> +	int slctd_class;

Nitpick: can you use full words? slctd is difficult to read.

>   
>   	/* search for matching ddebugs */
>   	mutex_lock(&ddebug_lock);
> @@ -218,21 +229,26 @@ static int ddebug_change(const struct ddebug_query *query, struct flag_settings
>   			continue;
>   
>   		if (query->class_string) {
> -			valid_class = ddebug_find_valid_class(dt, query->class_string);
> -			if (valid_class < 0)
> +			slctd_class = ddebug_find_valid_class(dt, query->class_string);
> +			if (slctd_class < 0)
> +				/* skip/reject classes unknown by module */
>   				continue;
>   		} else {
> -			/* constrain query, do not touch class'd callsites */
> -			valid_class = _DPRINTK_CLASS_DFLT;
> +			slctd_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 != slctd_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) &&

-- 
Louis Chauvet, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com



  reply	other threads:[~2025-03-24 15:20 UTC|newest]

Thread overview: 103+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-20 18:51 [PATCH v2 00/59] Fix CONFIG_DRM_USE_DYNAMIC_DEBUG=y Jim Cromie
2025-03-20 18:51 ` [PATCH v2 01/59] vmlinux.lds.h: fixup HEADERED_SECTION{,_BY} macros Jim Cromie
2025-03-20 18:51 ` [PATCH v2 02/59] docs/dyndbg: update examples \012 to \n Jim Cromie
2025-03-20 18:51 ` [PATCH v2 03/59] test-dyndbg: fixup CLASSMAP usage error Jim Cromie
2025-03-20 18:51 ` [PATCH v2 04/59] dyndbg: reword "class unknown, " to "class:_UNKNOWN_" Jim Cromie
2025-03-20 18:51 ` [PATCH v2 05/59] dyndbg: make ddebug_class_param union members same size Jim Cromie
2025-03-20 18:51 ` [PATCH v2 06/59] dyndbg: drop NUM_TYPE_ARRAY Jim Cromie
2025-03-20 18:51 ` [PATCH v2 07/59] dyndbg: reduce verbose/debug clutter Jim Cromie
2025-03-20 18:51 ` [PATCH v2 08/59] dyndbg: refactor param_set_dyndbg_classes and below Jim Cromie
2025-03-20 18:51 ` [PATCH v2 09/59] dyndbg: tighten fn-sig of ddebug_apply_class_bitmap Jim Cromie
2025-03-20 18:51 ` [PATCH v2 10/59] dyndbg: replace classmap list with a vector Jim Cromie
2025-03-24 15:08   ` Louis Chauvet
2025-03-24 22:33     ` jim.cromie
2025-03-20 18:51 ` [PATCH v2 11/59] dyndbg: macrofy a 2-index for-loop pattern Jim Cromie
2025-03-24 15:10   ` Louis Chauvet
2025-03-20 18:51 ` [PATCH v2 12/59] dyndbg, module: make proper substructs in _ddebug_info Jim Cromie
2025-03-24 15:10   ` Louis Chauvet
2025-03-20 18:51 ` [PATCH v2 13/59] dyndbg: add 2 new _DPRINTK_FLAGS_: INCL_LOOKUP, PREFIX_CACHED Jim Cromie
2025-03-24 15:11   ` Louis Chauvet
2025-03-20 18:51 ` [PATCH v2 14/59] dyndbg: split _emit_lookup() out of dynamic_emit_prefix() Jim Cromie
2025-03-24 15:14   ` Louis Chauvet
2025-03-20 18:51 ` [PATCH v2 15/59] dyndbg: hoist classmap-filter-by-modname up to ddebug_add_module Jim Cromie
2025-03-24 15:14   ` Louis Chauvet
2025-03-20 18:51 ` [PATCH v2 16/59] dyndbg-API: remove DD_CLASS_TYPE_(DISJOINT|LEVEL)_NAMES and code Jim Cromie
2025-03-24 15:15   ` Louis Chauvet
2025-03-20 18:51 ` [PATCH v2 17/59] dyndbg-API: replace DECLARE_DYNDBG_CLASSMAP Jim Cromie
2025-03-24 15:16   ` Louis Chauvet
2025-03-20 18:51 ` [PATCH v2 18/59] selftests-dyndbg: add tools/testing/selftests/dynamic_debug/* Jim Cromie
2025-03-20 18:51 ` [PATCH v2 19/59] dyndbg: detect class_id reservation conflicts Jim Cromie
2025-03-20 18:51 ` [PATCH v2 20/59] dyndbg: check DYNDBG_CLASSMAP_DEFINE args at compile-time Jim Cromie
2025-03-24 15:16   ` Louis Chauvet
2025-03-20 18:51 ` [PATCH v2 21/59] dyndbg-test: change do_prints testpoint to accept a loopct Jim Cromie
2025-03-20 18:52 ` [PATCH v2 22/59] dyndbg-API: promote DYNAMIC_DEBUG_CLASSMAP_PARAM to API Jim Cromie
2025-03-24 15:18   ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 23/59] dyndbg: move .mod_name from/to structs ddebug_table/_ddebug_info Jim Cromie
2025-03-24 15:19   ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 24/59] dyndbg: treat comma as a token separator Jim Cromie
2025-03-24 15:18   ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 25/59] selftests-dyndbg: add comma_terminator_tests Jim Cromie
2025-03-24 15:19   ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 26/59] dyndbg: split multi-query strings with % Jim Cromie
2025-03-24 15:19   ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 27/59] selftests-dyndbg: test_percent_splitting Jim Cromie
2025-03-24 15:19   ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 28/59] selftests-dyndbg: add test_mod_submod Jim Cromie
2025-03-24 15:20   ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 29/59] dyndbg: change __dynamic_func_call_cls* macros into expressions Jim Cromie
2025-03-24 15:19   ` Louis Chauvet
2025-03-25 16:23     ` jim.cromie
2025-03-20 18:52 ` [PATCH v2 30/59] dyndbg: drop "protection" of class'd pr_debugs from legacy queries Jim Cromie
2025-03-24 15:20   ` Louis Chauvet [this message]
2025-03-25 18:29     ` jim.cromie
2025-03-25 23:05       ` jim.cromie
2025-03-25 20:02     ` jim.cromie
2025-03-20 18:52 ` [PATCH v2 31/59] docs/dyndbg: explain new delimiters: comma, percent Jim Cromie
2025-03-24 15:22   ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 32/59] docs/dyndbg: explain flags parse 1st Jim Cromie
2025-03-24 15:23   ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 33/59] docs/dyndbg: add classmap info to howto (TBD) Jim Cromie
2025-03-24 15:23   ` Louis Chauvet
2025-03-25 18:42     ` jim.cromie
2025-03-20 18:52 ` [PATCH v2 34/59] checkpatch: dont warn about unused macro arg on empty body Jim Cromie
2025-03-21  3:14   ` Joe Perches
2025-03-24 15:23   ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 35/59] drm: use correct ccflags-y spelling Jim Cromie
2025-03-20 18:52 ` [PATCH v2 36/59] drm-dyndbg: adapt drm core to use dyndbg classmaps-v2 Jim Cromie
2025-03-24 15:23   ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 37/59] drm-dyndbg: adapt DRM to invoke DYNAMIC_DEBUG_CLASSMAP_PARAM Jim Cromie
2025-03-24 15:23   ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 38/59] drm-print: fix config-dependent unused variable Jim Cromie
2025-03-24 15:23   ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 39/59] drm-dyndbg: DRM_CLASSMAP_USE in amdgpu driver Jim Cromie
2025-03-24 15:24   ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 40/59] drm-dyndbg: DRM_CLASSMAP_USE in i915 driver Jim Cromie
2025-03-24 15:24   ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 41/59] drm-dyndbg: DRM_CLASSMAP_USE in drm_crtc_helper Jim Cromie
2025-03-24 15:23   ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 42/59] drm-dyndbg: DRM_CLASSMAP_USE in drm_dp_helper Jim Cromie
2025-03-24 15:24   ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 43/59] drm-dyndbg: DRM_CLASSMAP_USE in nouveau Jim Cromie
2025-03-20 18:52 ` [PATCH v2 44/59] drm-dyndbg: add DRM_CLASSMAP_USE to Xe driver Jim Cromie
2025-03-24 15:24   ` Louis Chauvet
2025-03-25 18:56     ` jim.cromie
2025-03-20 18:52 ` [PATCH v2 45/59] drm-dyndbg: add DRM_CLASSMAP_USE to virtio_gpu Jim Cromie
2025-03-20 18:52 ` [PATCH v2 46/59] drm-dyndbg: add DRM_CLASSMAP_USE to simpledrm Jim Cromie
2025-03-20 18:52 ` [PATCH v2 47/59] drm-dyndbg: add DRM_CLASSMAP_USE to bochs Jim Cromie
2025-03-24 15:03   ` Louis Chauvet
2025-03-25 19:34     ` jim.cromie
2025-03-20 18:52 ` [PATCH v2 48/59] drm-dyndbg: add DRM_CLASSMAP_USE to etnaviv Jim Cromie
2025-03-20 18:52 ` [PATCH v2 49/59] drm-dyndbg: add DRM_CLASSMAP_USE to gma500 driver Jim Cromie
2025-03-20 18:52 ` [PATCH v2 50/59] drm-dyndbg: add DRM_CLASSMAP_USE to radeon Jim Cromie
2025-03-20 18:52 ` [PATCH v2 51/59] drm-dyndbg: add DRM_CLASSMAP_USE to vmwgfx driver Jim Cromie
2025-03-20 18:52 ` [PATCH v2 52/59] drm-dyndbg: add DRM_CLASSMAP_USE to vkms driver Jim Cromie
2025-03-24 15:00   ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 53/59] drm-dyndbg: add DRM_CLASSMAP_USE to udl driver Jim Cromie
2025-03-24 15:00   ` Louis Chauvet
2025-03-20 18:52 ` [PATCH v2 54/59] drm-dyndbg: add DRM_CLASSMAP_USE to mgag200 driver Jim Cromie
2025-03-20 18:52 ` [PATCH v2 55/59] drm-dyndbg: add DRM_CLASSMAP_USE to the gud driver Jim Cromie
2025-03-20 18:52 ` [PATCH v2 56/59] drm-dyndbg: add DRM_CLASSMAP_USE to the qxl driver Jim Cromie
2025-03-20 18:52 ` [PATCH v2 57/59] drm-dyndbg: add DRM_CLASSMAP_USE to the drm_gem_shmem_helper driver Jim Cromie
2025-03-20 18:52 ` [PATCH v2 58/59] drm: restore CONFIG_DRM_USE_DYNAMIC_DEBUG un-BROKEN Jim Cromie
2025-03-20 18:52 ` [PATCH v2 59/59] drm: RFC - make drm_dyndbg_user.o for drm-*_helpers, drivers Jim Cromie
2025-03-24 15:00   ` Louis Chauvet

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=0828cfdb-abf3-42c5-8500-70f36affd0a8@bootlin.com \
    --to=louis.chauvet@bootlin.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-trybot@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-gvt-dev@lists.freedesktop.org \
    --cc=jani.nikula@intel.com \
    --cc=jbaron@akamai.com \
    --cc=jim.cromie@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --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).