[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <cc2d32df-94e5-4f54-a395-36208d472c20@akamai.com>
Date: Thu, 11 Dec 2025 16:22:02 -0500
From: Jason Baron <jbaron@...mai.com>
To: Jim Cromie <jim.cromie@...il.com>, <linux-kernel@...r.kernel.org>,
<dri-devel@...ts.freedesktop.org>, <gregkh@...uxfoundation.org>
CC: <ukaszb@...omium.org>, <louis.chauvet@...tlin.com>
Subject: Re: [PATCH v6 30/31] dyndbg: add
DYNAMIC_DEBUG_CLASSMAP_USE_(dd_class_name, offset)
On 11/18/25 3:18 PM, Jim Cromie wrote:
----------------------------------------------!
>
> Allow a module to use 2 classmaps together that would otherwise have a
> class_id range conflict.
>
> Suppose drm-driver does:
>
> DYNAMIC_DEBUG_CLASSMAP_USE(drm_debug_classes);
> DYNAMIC_DEBUG_CLASSMAP_USE(drm_accel_xfer_debug);
>
> And (for some reason) drm-accel will not define their constants to
> avoid DRM's 0..10 reservations (seems a long stretch).
>
> So I dont think this potential conflict would become an issue until we
> have at least a 3-X-3 of classmap-defns X classmap-users
>
> So drop this if its too speculative, knowing theres at least a
> notional solution should the situation arise.
>
> Signed-off-by: Jim Cromie <jim.cromie@...il.com>
> ---
> re-ref of an lvalue is fine.
> CHECK: Macro argument reuse '_var' - possible side-effects?
>
> -v5+ less hand-wavy
> ---
> include/linux/dynamic_debug.h | 30 +++++++++++++++++++++++-------
> lib/dynamic_debug.c | 19 ++++++++++++-------
> 2 files changed, 35 insertions(+), 14 deletions(-)
>
> diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
> index b22da40e2583..5307be8da5c1 100644
> --- a/include/linux/dynamic_debug.h
> +++ b/include/linux/dynamic_debug.h
> @@ -87,7 +87,7 @@ struct _ddebug_class_map {
> struct _ddebug_class_user {
> char *mod_name;
> struct _ddebug_class_map *map;
> - const int base; /* user offset to re-number the used map */
> + const int offset; /* offset from map->base */
> };
>
> /*
> @@ -235,21 +235,37 @@ struct _ddebug_class_param {
> /**
> * DYNAMIC_DEBUG_CLASSMAP_USE - refer to a classmap, DEFINEd elsewhere.
> * @_var: name of the exported classmap var
> - * @_not_yet: _base-like, but applies only to this USEr. (if needed)
> *
> * This tells dyndbg that the module has prdbgs with classids defined
> * in the named classmap. This qualifies "class NAME" >controls on
> - * the user module, and ignores unknown names.
> + * the user module, and ignores unknown names. This is a wrapper for
> + * DYNAMIC_DEBUG_CLASSMAP_USE_() with a base offset of 0.
> */
> -#define DYNAMIC_DEBUG_CLASSMAP_USE(_var) \
> - DYNAMIC_DEBUG_CLASSMAP_USE_(_var, 0, __UNIQUE_ID(_ddebug_class_user))
> -#define DYNAMIC_DEBUG_CLASSMAP_USE_(_var, _base, _uname) \
> +#define DYNAMIC_DEBUG_CLASSMAP_USE(_var) \
> + DYNAMIC_DEBUG_CLASSMAP_USE_(_var, 0)
> +
> +/**
> + * DYNAMIC_DEBUG_CLASSMAP_USE_ - refer to a classmap with a manual offset.
> + * @_var: name of the exported classmap var to use.
> + * @_offset: an integer offset to add to the class IDs of the used map.
> + *
> + * This is an extended version of DYNAMIC_DEBUG_CLASSMAP_USE(). It should
> + * only be used to resolve class ID conflicts when a module uses multiple
> + * classmaps that have overlapping ID ranges.
> + *
> + * The final class IDs for the used map will be calculated as:
> + * original_map_base + class_index + @_base.
Shouldn't this be @offset here in the comment?
> + */
> +#define DYNAMIC_DEBUG_CLASSMAP_USE_(_var, _offset) \
> + __DYNAMIC_DEBUG_CLASSMAP_USE(_var, _offset, __UNIQUE_ID(_ddebug_class_user))
> +
> +#define __DYNAMIC_DEBUG_CLASSMAP_USE(_var, _offset, _uname) \
> extern struct _ddebug_class_map _var; \
> static struct _ddebug_class_user __aligned(8) __used \
> __section("__dyndbg_class_users") _uname = { \
> .mod_name = KBUILD_MODNAME, \
> .map = &(_var), \
> - .base = _base \
> + .offset = _offset \
> }
>
> /**
> diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
> index 1082e0273f0e..bf1ff29cca95 100644
> --- a/lib/dynamic_debug.c
> +++ b/lib/dynamic_debug.c
> @@ -198,7 +198,7 @@ ddebug_find_valid_class(struct _ddebug_info const *di, const char *query_class,
> if (idx >= 0) {
> vpr_di_info(di, "class-ref: %s -> %s.%s ",
> cli->mod_name, cli->map->mod_name, query_class);
> - *class_id = idx + cli->map->base;
> + *class_id = idx + cli->map->base - cli->offset;
Why is this '-'? Comment above says offset says:
"@_offset: an integer offset to add to the class IDs of the used map."
Thanks,
-Jason
Powered by blists - more mailing lists