Linux Modules
 help / color / mirror / Atom feed
* [PATCH v5 00/18] dyndbg: cleanups, refactors in prep for API fix
@ 2026-07-02 16:40 Jim Cromie
  2026-07-02 16:40 ` [PATCH v5 01/18] dyndbg: factor ddebug_match_desc out from ddebug_change Jim Cromie
                   ` (17 more replies)
  0 siblings, 18 replies; 19+ messages in thread
From: Jim Cromie @ 2026-07-02 16:40 UTC (permalink / raw)
  To: Andrew Morton, Jason Baron, Jim Cromie, Jonathan Corbet,
	Shuah Khan, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
	David Airlie, Simona Vetter, Arnd Bergmann, Luis Chamberlain,
	Petr Pavlu, Daniel Gomez, Sami Tolvanen, Aaron Tomlin
  Cc: linux-kernel, linux-doc, dri-devel, linux-arch, linux-modules,
	Louis Chauvet

This series has cleanups and refactors in preparation for an API
change needed to fix a regression in DRM when it uses dyndbg
classmaps.  I split these out for easier review, and to stay under
gmail's 500/day message limit.

Whats here:

. factor ddebug_match_desc out from ddebug_change
  separate selecting from altering

. add stub macro for DECLARE_DYNDBG_CLASSMAP
  for cleaner patches later
  
. reword class unknown to class _UNKNOWN_
  a more greppable error announcement

. API remove DD_CLASS_TYPE_ DISJOINT LEVEL _NAME
  these are unused, just extra untested code.

. drop NUM_TYPE_ARGS - just use ~ARRAY_SIZE
  
. bump num tokens in a query cmd from 9 to 15
  with class keyword, can have 13 words in a query

. reduce verbose debug clutter
  7 log-lines to 4, with same info
  
. lib parser add match_wildcard_hyphen for underscore/hypen equivalence
  "module kvm-intel" is same as "module kvm_intel"

. dynamic_debug use KBUILD_MODFILE for unique builtin names
  disambiguate init/main from kernel/module/main

. refactor param_set_dyndbg_classes and below
  improve selectivity of callchain underneath
  
. tighten fn sig of ddebug_apply_class_bitmap
  make more args const

. replace classmap list with an array slice
  section records are directly usable from the array

. macrofy a 2 index for loop pattern - DRY

. pin class param storage to u32
  avoid param size ambiguity across arches
  this also changes __drm_debug from long unsigned to u32.
  
. module make proper substructs in _ddebug_info
  its just cleaner

. move mod_name down from struct ddebug_table to _ddebug_info
  makes mod_name more available where its needed

. hoist classmap filter-by-modname up to ddebug_add_module
  closer to where its done for pr-debug descriptors

. change __dynamic_func_call_cls macros into expressions
  Xe driver uses it inside an if (cond), do-while-0 cant sit there.

"user visible" changes:

The KBUILD_MODFILE derived name appears in dynamic_debug/control, so
[main] changes to [init/main] etc.  The query parser is adjusted so
that "module main" still selects all of the former [main] modules.
It is user visible, but not a behavior change.

If a coder calls __pr_debug_cls(5, "...") but does not register a
classmap for it, that callsite will display in dynamic_debug/control
as "class:_UNKNOWN_ _id:5", not "class unknown, _id:5" as previously.
This is an error case, and has never been seen in the wild.

---
Changes in v5:
  moves KBUILD_MODFILE ahead of array-slice, to address sashiko
  complaints which were fixed later in V4.

Changes in v4:

Dyndbg previously used KBUILD_MODNAME to provide module-name, this
works well for loadable modules (module loader requires unique module
names), but for builtin modules, is effectively kbasename, and is not
guaranteed unique.

So we get 4 modules named "main": init/main, kernel/power/main,
kernel/base/power/main.  This ambiguity is visible in user-space since
the beginning of dyndbg.

Now suppose kernel/{,base}/power/main want to define classmaps to
categorize the various pr-debugs they have.  The current code finds a
module's classmaps by strcmp on modname, so init/main will match
against classmaps defined by both kernel/{,base}/power/main.

The current code will also map "main" classes to kernel/*/power/main,
so they will probably work at first, but 2 independent classmaps can
both use class-ids 0-N, but will conflict if they're both used by a
module.  Then we have classmap overlaps and unpredictable results.

Changes in v3:

fix some (not all) of sashiko's complaints.

Changes in v2:

 https://lore.kernel.org/lkml/20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com/
    
V2 addressed most of sashiko's feedback on V1:
 https://sashiko.dev/#/patchset/20260504-dd-cleanups-2-v1-0-6fdd24040642%40gmail.com

---
Jim Cromie (18):
      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-API: remove DD_CLASS_TYPE_(DISJOINT|LEVEL)_NAMES and code
      dyndbg: drop NUM_TYPE_ARGS
      dyndbg: bump num-tokens in a query-cmd from 9 to 15
      dyndbg: reduce verbose/debug clutter
      lib/parser: add match_wildcard_hyphen() for agnostic matching
      dyndbg: use KBUILD_MODFILE for unique builtin module names
      dyndbg: refactor param_set_dyndbg_classes and below
      dyndbg: tighten fn-sig of ddebug_apply_class_bitmap
      dyndbg: replace classmap list with an array-slice
      dyndbg: macrofy a 2-index for-loop pattern
      dyndbg: pin class param storage to u32
      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: change __dynamic_func_call_cls* macros into expressions

 Documentation/admin-guide/dynamic-debug-howto.rst |  42 +-
 drivers/gpu/drm/drm_print.c                       |   6 +-
 include/asm-generic/dyndbg.lds.h                  |  14 +-
 include/drm/drm_print.h                           |   2 +-
 include/linux/dynamic_debug.h                     | 130 +++---
 include/linux/parser.h                            |   1 +
 kernel/module/main.c                              |  12 +-
 lib/dynamic_debug.c                               | 494 +++++++++++-----------
 lib/parser.c                                      |  58 ++-
 lib/test_dynamic_debug.c                          |  28 +-
 10 files changed, 397 insertions(+), 390 deletions(-)
---
base-commit: 4dcdecc52686a3fbd4545e86fc711fdcd15f09cb
change-id: 20260521-dd-maint-2-76c542079420
prerequisite-change-id: 20260630-fix-align-589738662161:v4
prerequisite-patch-id: d6b2b7d254c7e8bbc0aea891d49b15dc1e71eaa4
prerequisite-patch-id: 3dffaa165e78dc58e443469755eddb07972d0ddf
prerequisite-patch-id: 2c4827d84b4159e71df89cca2a03938a534ecdb5
prerequisite-patch-id: 4599f9be1eb06c0d7f2a7c657d4940411635e94b
prerequisite-patch-id: aea9e121b30e3c7f3d76921b49f81ad421b7af51

Best regards,
-- 
Jim Cromie <jim.cromie@gmail.com>


^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2026-07-02 16:41 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-02 16:40 [PATCH v5 00/18] dyndbg: cleanups, refactors in prep for API fix Jim Cromie
2026-07-02 16:40 ` [PATCH v5 01/18] dyndbg: factor ddebug_match_desc out from ddebug_change Jim Cromie
2026-07-02 16:40 ` [PATCH v5 02/18] dyndbg: add stub macro for DECLARE_DYNDBG_CLASSMAP Jim Cromie
2026-07-02 16:40 ` [PATCH v5 03/18] dyndbg: reword "class unknown," to "class:_UNKNOWN_" Jim Cromie
2026-07-02 16:40 ` [PATCH v5 04/18] dyndbg-API: remove DD_CLASS_TYPE_(DISJOINT|LEVEL)_NAMES and code Jim Cromie
2026-07-02 16:40 ` [PATCH v5 05/18] dyndbg: drop NUM_TYPE_ARGS Jim Cromie
2026-07-02 16:40 ` [PATCH v5 06/18] dyndbg: bump num-tokens in a query-cmd from 9 to 15 Jim Cromie
2026-07-02 16:40 ` [PATCH v5 07/18] dyndbg: reduce verbose/debug clutter Jim Cromie
2026-07-02 16:41 ` [PATCH v5 08/18] lib/parser: add match_wildcard_hyphen() for agnostic matching Jim Cromie
2026-07-02 16:41 ` [PATCH v5 09/18] dyndbg: use KBUILD_MODFILE for unique builtin module names Jim Cromie
2026-07-02 16:41 ` [PATCH v5 10/18] dyndbg: refactor param_set_dyndbg_classes and below Jim Cromie
2026-07-02 16:41 ` [PATCH v5 11/18] dyndbg: tighten fn-sig of ddebug_apply_class_bitmap Jim Cromie
2026-07-02 16:41 ` [PATCH v5 12/18] dyndbg: replace classmap list with an array-slice Jim Cromie
2026-07-02 16:41 ` [PATCH v5 13/18] dyndbg: macrofy a 2-index for-loop pattern Jim Cromie
2026-07-02 16:41 ` [PATCH v5 14/18] dyndbg: pin class param storage to u32 Jim Cromie
2026-07-02 16:41 ` [PATCH v5 15/18] dyndbg,module: make proper substructs in _ddebug_info Jim Cromie
2026-07-02 16:41 ` [PATCH v5 16/18] dyndbg: move mod_name down from struct ddebug_table to _ddebug_info Jim Cromie
2026-07-02 16:41 ` [PATCH v5 17/18] dyndbg: hoist classmap-filter-by-modname up to ddebug_add_module Jim Cromie
2026-07-02 16:41 ` [PATCH v5 18/18] dyndbg: change __dynamic_func_call_cls* macros into expressions Jim Cromie

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox