[PATCH 00/17] dynamic-debug cleanups refactors maintenance

Jim Cromie posted 17 patches 1 month, 1 week ago
MAINTAINERS                                        |   1 +
include/linux/dynamic_debug.h                      | 106 ++---
kernel/module/main.c                               |  12 +-
lib/dynamic_debug.c                                | 504 ++++++++++-----------
lib/test_dynamic_debug.c                           |  28 +-
tools/testing/selftests/Makefile                   |   1 +
tools/testing/selftests/dynamic_debug/Makefile     |   9 +
tools/testing/selftests/dynamic_debug/config       |   7 +
.../selftests/dynamic_debug/dyndbg_selftest.sh     | 257 +++++++++++
9 files changed, 582 insertions(+), 343 deletions(-)
[PATCH 00/17] dynamic-debug cleanups refactors maintenance
Posted by Jim Cromie 1 month, 1 week ago
This series is nearly all maintenance: it refactors/splits functions,
tightens an internal callchain, drops linked-listing where an
array,length is already available, reduces verbose=3 logging for
usability, and reorganizes several structs for better organization.

Getting these into linux-next for integration testing would clear the
deck for fixing Dynamic-debug classmaps, which is needed to restore
the un-BROKEN status of DRM_USE_DYNAMIC_DEBUG.

Theyre on master at v7.1-rc2

The "modules" intersection is on the re-composing of struct
ddebug_info, which is a member in struct module, and maps a module's
__dyndbg* elf sections.

The user visible change to /proc/dynamic_debug/control is s/class
unknown/class:_UNKNOWN_/, which is a more visible/greppable indication
of incomplete class definitions.

Coder visible change is to drop the enum ddebug_class_map_type's
unused vals - namely: DD_CLASS_TYPE_DISJOINT_NAMES
& DD_CLASS_TYPE_LEVEL_NAMES

These allowed more symbolic named inputs:
  echo +DRM_UT_CORE > /sys/module/drm/parameters/debug

But theyre unused 3 years later, and probably not worth keeping.
With a removal commit in the log, its easy enough to restore them later.

Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
Jim Cromie (17):
      dyndbg: factor ddebug_match_desc out from ddebug_change
      dyndbg: add stub macro for DECLARE_DYNDBG_CLASSMAP
      dyndbg: reword "class unknown," to "class:_UNKNOWN_"
      dyndbg: make ddebug_class_param union members same size
      dyndbg: drop NUM_TYPE_ARRAY
      dyndbg: tweak pr_fmt to avoid expansion conflicts
      dyndbg: reduce verbose/debug clutter
      dyndbg: refactor param_set_dyndbg_classes and below
      dyndbg: tighten fn-sig of ddebug_apply_class_bitmap
      dyndbg: replace classmap list with a vector
      dyndbg: macrofy a 2-index for-loop pattern
      dyndbg,module: make proper substructs in _ddebug_info
      dyndbg: move mod_name down from struct ddebug_table to _ddebug_info
      dyndbg: hoist classmap-filter-by-modname up to ddebug_add_module
      dyndbg-API: remove DD_CLASS_TYPE_(DISJOINT|LEVEL)_NAMES and code
      selftests-dyndbg: add a dynamic_debug run_tests target
      dyndbg: change __dynamic_func_call_cls* macros into expressions

 MAINTAINERS                                        |   1 +
 include/linux/dynamic_debug.h                      | 106 ++---
 kernel/module/main.c                               |  12 +-
 lib/dynamic_debug.c                                | 504 ++++++++++-----------
 lib/test_dynamic_debug.c                           |  28 +-
 tools/testing/selftests/Makefile                   |   1 +
 tools/testing/selftests/dynamic_debug/Makefile     |   9 +
 tools/testing/selftests/dynamic_debug/config       |   7 +
 .../selftests/dynamic_debug/dyndbg_selftest.sh     | 257 +++++++++++
 9 files changed, 582 insertions(+), 343 deletions(-)
---
base-commit: 6d35786de28116ecf78797a62b84e6bf3c45aa5a
change-id: 20260504-dd-cleanups-2-5c37432d5c03

Best regards,
-- 
Jim Cromie <jim.cromie@gmail.com>
Re: [PATCH 00/17] dynamic-debug cleanups refactors maintenance
Posted by Andrew Morton 1 month ago
On Mon, 04 May 2026 14:45:06 -0600 Jim Cromie <jim.cromie@gmail.com> wrote:

> This series is nearly all maintenance: it refactors/splits functions,
> tightens an internal callchain, drops linked-listing where an
> array,length is already available, reduces verbose=3 logging for
> usability, and reorganizes several structs for better organization.
> 
> Getting these into linux-next for integration testing would clear the
> deck for fixing Dynamic-debug classmaps, which is needed to restore
> the un-BROKEN status of DRM_USE_DYNAMIC_DEBUG.
> 
> Theyre on master at v7.1-rc2
> 
> The "modules" intersection is on the re-composing of struct
> ddebug_info, which is a member in struct module, and maps a module's
> __dyndbg* elf sections.
> 
> The user visible change to /proc/dynamic_debug/control is s/class
> unknown/class:_UNKNOWN_/, which is a more visible/greppable indication
> of incomplete class definitions.

Wait.  We can't make userspace-visible changes?

> Coder visible change is to drop the enum ddebug_class_map_type's
> unused vals - namely: DD_CLASS_TYPE_DISJOINT_NAMES
> & DD_CLASS_TYPE_LEVEL_NAMES
> 
> These allowed more symbolic named inputs:
>   echo +DRM_UT_CORE > /sys/module/drm/parameters/debug
> 
> But theyre unused 3 years later, and probably not worth keeping.
> With a removal commit in the log, its easy enough to restore them later.
> 
> ...
> 
>  MAINTAINERS                                        |   1 +
>  include/linux/dynamic_debug.h                      | 106 ++---
>  kernel/module/main.c                               |  12 +-
>  lib/dynamic_debug.c                                | 504 ++++++++++-----------
>  lib/test_dynamic_debug.c                           |  28 +-
>  tools/testing/selftests/Makefile                   |   1 +
>  tools/testing/selftests/dynamic_debug/Makefile     |   9 +
>  tools/testing/selftests/dynamic_debug/config       |   7 +
>  .../selftests/dynamic_debug/dyndbg_selftest.sh     | 257 +++++++++++
>  9 files changed, 582 insertions(+), 343 deletions(-)

No Documentation/ updates?
Re: [PATCH 00/17] dynamic-debug cleanups refactors maintenance
Posted by jim.cromie@gmail.com 1 month ago
On Fri, May 8, 2026 at 8:01 PM Andrew Morton <akpm@linux-foundation.org> wrote:
>
> On Mon, 04 May 2026 14:45:06 -0600 Jim Cromie <jim.cromie@gmail.com> wrote:
>
> > This series is nearly all maintenance: it refactors/splits functions,
> > The user visible change to /proc/dynamic_debug/control is s/class
> > unknown/class:_UNKNOWN_/, which is a more visible/greppable indication
> > of incomplete class definitions.
>
> Wait.  We can't make userspace-visible changes?
>

- the code has been marked BROKEN for its 1st, intended user: DRM,
so there are no users affected by this change
- UNKNOWN is an error condition, an incomplete/incorrect classmap definition,
and is expected to be caught in implementation or review.
- phase 2 of the patch set has improved compile-time and modprobe-time
validation,
they would catch this coding error.
- I will drop this patch if these reasons are insufficient.


> > Coder visible change is to drop the enum ddebug_class_map_type's
> > unused vals - namely: DD_CLASS_TYPE_DISJOINT_NAMES
> > & DD_CLASS_TYPE_LEVEL_NAMES
> >
> > These allowed more symbolic named inputs:
> >   echo +DRM_UT_CORE > /sys/module/drm/parameters/debug
> >
> > But theyre unused 3 years later, and probably not worth keeping.
> > With a removal commit in the log, its easy enough to restore them later.
> >
> > ...
> >
> >  MAINTAINERS                                        |   1 +
> >  include/linux/dynamic_debug.h                      | 106 ++---
> >  kernel/module/main.c                               |  12 +-
> >  lib/dynamic_debug.c                                | 504 ++++++++++-----------
> >  lib/test_dynamic_debug.c                           |  28 +-
> >  tools/testing/selftests/Makefile                   |   1 +
> >  tools/testing/selftests/dynamic_debug/Makefile     |   9 +
> >  tools/testing/selftests/dynamic_debug/config       |   7 +
> >  .../selftests/dynamic_debug/dyndbg_selftest.sh     | 257 +++++++++++
> >  9 files changed, 582 insertions(+), 343 deletions(-)
>
> No Documentation/ updates?

I have 2 doc-only updates I peeled off and sent to @Linux Documentation List
Otherwise, there are no behavioral changes here to write about.
Phase 2 has API changes needed to actually fix classmaps for DRM, and
docs to go with it.

I split out phase-1 to lower the barrier to review and apply.
By your response, it seems to have helped.

wrt sashiko review, Ive made several adjustments, Im reviewing,
working the others.

Thanks
Jim
Re: [PATCH 00/17] dynamic-debug cleanups refactors maintenance
Posted by Andrew Morton 1 month ago
On Mon, 04 May 2026 14:45:06 -0600 Jim Cromie <jim.cromie@gmail.com> wrote:

> This series is nearly all maintenance: it refactors/splits functions,
> tightens an internal callchain, drops linked-listing where an
> array,length is already available, reduces verbose=3 logging for
> usability, and reorganizes several structs for better organization.
> 
> Getting these into linux-next for integration testing would clear the
> deck for fixing Dynamic-debug classmaps, which is needed to restore
> the un-BROKEN status of DRM_USE_DYNAMIC_DEBUG.
> 
> Theyre on master at v7.1-rc2
> 
> The "modules" intersection is on the re-composing of struct
> ddebug_info, which is a member in struct module, and maps a module's
> __dyndbg* elf sections.
> 
> The user visible change to /proc/dynamic_debug/control is s/class
> unknown/class:_UNKNOWN_/, which is a more visible/greppable indication
> of incomplete class definitions.
> 
> Coder visible change is to drop the enum ddebug_class_map_type's
> unused vals - namely: DD_CLASS_TYPE_DISJOINT_NAMES
> & DD_CLASS_TYPE_LEVEL_NAMES
> 
> These allowed more symbolic named inputs:
>   echo +DRM_UT_CORE > /sys/module/drm/parameters/debug
> 
> But theyre unused 3 years later, and probably not worth keeping.
> With a removal commit in the log, its easy enough to restore them later.

Thanks, Jim.

I'll queue this for some runtime testing in linux-next.  But AI review
really went to town over it:

	https://sashiko.dev/#/patchset/20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com