dri-devel.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v6 00/57] DYNDBG: opt-in class'd debug for modules, use in drm.
@ 2022-09-04 21:40 Jim Cromie
  2022-09-04 21:40 ` [PATCH v6 01/57] dyndbg: fix static_branch manipulation Jim Cromie
                   ` (57 more replies)
  0 siblings, 58 replies; 74+ messages in thread
From: Jim Cromie @ 2022-09-04 21:40 UTC (permalink / raw)
  To: jbaron, gregkh, dri-devel, amd-gfx, intel-gvt-dev, intel-gfx,
	linux-kernel
  Cc: daniel.vetter, linux, seanpaul, joe

hi Greg, Jason, DRM-folk, Steven,

If Im not too late for linux-next in this cycle, heres V6.  Diffs are minor:

 - rebased onto e47eb90a0a9a (tag: next-20220901, linux-next/master)
   gets past Kconfig conflict, same for drm-tip.
 - uint debug_level, not ulong.  to fit nouveau.
 - -1 on param-read-back, to match prev write val.
 - added back tracefs parts, missing from -V5
   updated for tracing/events: Add __vstring() and __assign_vstr() helper macros
   no decorations-lite in TP_printk, do it right later.
 - commit-msg tweaks

Theres also new RFC stuff with the potential to reduce the size of the
__dyndbgs section by 20%.  Not ready for prime time, or linux-next,
but I hope compelling.

FEATURE DESCRIPTION

dyndbg provides DECLARE_DYNAMIC_DEBUG_CLASSMAP() which allows module
authors to declare "good" class-names, of 4 types.

  DYNAMIC_DEBUG_CLASSMAP(drm_debug_classes,
  			DD_CLASS_TYPE_DISJOINT_BITS, offset,
                        "DRM_UT_CORE",
                        "DRM_UT_DRIVER",
                        "DRM_UT_KMS",
                        "DRM_UT_PRIME",
                        "DRM_UT_ATOMIC",
                        "DRM_UT_VBL",
                        "DRM_UT_STATE",
                        "DRM_UT_LEASE",
                        "DRM_UT_DP",
                        "DRM_UT_DRMRES");

That usage authorizes dyndbg to set class'd pr_debugs accordingly:

  echo class DRM_UT_CORE +p > /proc/dynamic_debug/control
  echo class DRM_UT_KMS  +p > /proc/dynamic_debug/control

Because the DRM modules declare the same classes, they each authorize
dyndbg with the same classnames, which allows dyndbg to effect changes
to its selected class'd prdbgs.

Opting in by using the macro effectively privatizes the limited
63-classes available per module; only modules which share classnames
must coordinate their use of the common range, and they can
independently use the remaining id-space.

Other dyndbg filtering pertains too, so single sites can be selected.


4 DD_CLASS_TYPE_*_*s determine 2 behaviors:

  DISJOINT	bits are independent, like drm.debug categories
  LEVELs	3>2, turns on level-2, like nouveau debug-levels
  NUM/BITS	numeric input, bitmap if disjoint, else 0-32.
  NAMES		accept proper names, like DRM_UT_CORE

Dyndbg provides param-callbacks which enforce those behaviors:

  # DISJOINT_BITS
  echo 0x03 > /sys/module/drm/parameters/debug

  # LEVEL_NUM
  echo 3 > /sys/module/drm/nouveau/debug-mumble*

  # DISJOINT_NAMES
  echo +DRM_UT_CORE,+DRM_UT_KMS,-DRM_UT_DRIVER > /sys/module/drm/parameters/debug_categories

  # LEVEL_NAMES
  echo NV_TRACE > /sys/module/nouveau/parameters/debug-mumble*

That design choice is allowed cuz verbosity is always attached to a
(user visible) interface, and theres no reason not to put the
implementation there (in the callback).  It also considerably
simplifies things; ddebug_change can treat class_id's as disjoint,
period.


Jim Cromie (57):
prep:
  dyndbg: fix static_branch manipulation
  dyndbg: fix module.dyndbg handling
  dyndbg: show both old and new in change-info
  dyndbg: reverse module walk in cat control
  dyndbg: reverse module.callsite walk in cat control
  dyndbg: use ESCAPE_SPACE for cat control
  dyndbg: let query-modname override actual module name
  dyndbg: add test_dynamic_debug module
  dyndbg: drop EXPORTed dynamic_debug_exec_queries
  dyndbg: cleanup auto vars in dynamic_debug_init
  dyndbg: gather __dyndbg[] state into struct _ddebug_info

class feature:
  dyndbg: add class_id to pr_debug callsites
  dyndbg: add __pr_debug_cls for testing
  dyndbg: add DECLARE_DYNDBG_CLASSMAP macro
  kernel/module: add __dyndbg_classes section
  dyndbg: add ddebug_attach_module_classes
  dyndbg: validate class FOO by checking with module
  doc-dyndbg: describe "class CLASS_NAME" query support
  doc-dyndbg: edit dynamic-debug-howto for brevity, audience
  dyndbg: add drm.debug style (drm/parameters/debug) bitmap support
  dyndbg: test DECLARE_DYNDBG_CLASSMAP, sysfs nodes

drm-use-case:
  drm_print: condense enum drm_debug_category
  drm: POC drm on dyndbg - use in core, 2 helpers, 3 drivers.
  drm_print: interpose drm_*dbg with forwarding macros
  drm_print: wrap drm_*_dbg in dyndbg descriptor factory macro
  drm-print.h: include dyndbg header
  drm-print: add drm_dbg_driver to improve namespace symmetry
  drm_print: refine drm_debug_enabled for jump-label
  drm_print: prefer bare printk KERN_DEBUG on generic fn
  drm_print: add _ddebug descriptor to drm_*dbg prototypes
  nouveau: change nvkm_debug/trace to use dev_dbg POC
  nouveau: adapt NV_DEBUG, NV_ATOMIC to use DRM.debug
  nouveau: WIP add 2 LEVEL_NUM classmaps for CLI, SUBDEV

dyndbg-tracefs:
  dyndbg: add _DPRINTK_FLAGS_ENABLED
  dyndbg: add _DPRINTK_FLAGS_TRACE
  dyndbg: add write-events-to-tracefs code
  dyndbg: add 2 trace-events: drm_debug, drm_devdbg
  dyndbg: add 2 more trace-events: pr_debug, dev_dbg
  dyndbg/drm: POC add tracebits sysfs-knob

RFC-20%-data-reclaim:
  dyndbg: abstraction macros for modname,function,filename fields
  dyndbg: split repeating columns to new struct _ddebug_site
  dyndbg: shrink lineno field by 2 bits
  dyndbg: add _index,_map to struct _ddebug
  dyndbg: extend __ddebug_add_module proto to allow packing sites
  dyndbg: de-duplicate sites
  dyndbg: drop site-> in add-module, more needed
  dyndbg: demote iter->site in _init
  dyndbg: add .gnu.linkonce slot in vmlinux.lds.h KEEPs
  dyndbg: add structs _ddebug_hdr, _ddebug_site_hdr
  dyndbg: count unique callsites
  dyndbg: prevent build bugs via -DNO_DYNAMIC_DEBUG_TABLE
  dyndbg: add DEFINE_DYNAMIC_DEBUG_TABLE, use it tacitly RFC
  dyndbg: add/use is_dyndbg_header then set _uplink
  dyndbg: add .gnu.linkonce. & __dyndbg* sections in module.lds.h
  dyndbg: dynamic_debug_sites_reclaim() using free_reserved_page() WAG
  dyndbg: work ddebug_map_site
  dyndbg: fiddle with readback value on LEVEL_NAMES types

 .../admin-guide/dynamic-debug-howto.rst       | 249 +++---
 MAINTAINERS                                   |   2 +
 arch/arm/boot/compressed/Makefile             |   2 +
 arch/sparc/vdso/Makefile                      |   2 +
 arch/x86/boot/compressed/Makefile             |   1 +
 arch/x86/entry/vdso/Makefile                  |   3 +
 arch/x86/purgatory/Makefile                   |   1 +
 drivers/firmware/efi/libstub/Makefile         |   3 +-
 drivers/gpu/drm/Kconfig                       |  12 +
 drivers/gpu/drm/Makefile                      |   2 +
 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c       |  14 +
 drivers/gpu/drm/display/drm_dp_helper.c       |  13 +
 drivers/gpu/drm/drm_crtc_helper.c             |  13 +
 drivers/gpu/drm/drm_print.c                   |  83 +-
 drivers/gpu/drm/i915/i915_params.c            |  12 +
 .../gpu/drm/nouveau/include/nvkm/core/debug.h |  16 +
 .../drm/nouveau/include/nvkm/core/subdev.h    |  17 +-
 drivers/gpu/drm/nouveau/nouveau_drm.c         |  20 +
 drivers/gpu/drm/nouveau/nouveau_drv.h         |  16 +-
 drivers/gpu/drm/nouveau/nvkm/core/subdev.c    |  23 +
 include/asm-generic/module.lds.h              |  12 +-
 include/asm-generic/vmlinux.lds.h             |  10 +
 include/drm/drm_print.h                       |  85 +-
 include/linux/dynamic_debug.h                 | 286 ++++++-
 include/trace/events/drm.h                    |  54 ++
 include/trace/events/dyndbg.h                 |  73 ++
 kernel/module/internal.h                      |   4 +-
 kernel/module/main.c                          |  22 +-
 lib/Kconfig.debug                             |  10 +
 lib/Makefile                                  |   1 +
 lib/dynamic_debug.c                           | 792 +++++++++++++++---
 lib/test_dynamic_debug.c                      | 165 ++++
 32 files changed, 1680 insertions(+), 338 deletions(-)
 create mode 100644 include/trace/events/drm.h
 create mode 100644 include/trace/events/dyndbg.h
 create mode 100644 lib/test_dynamic_debug.c

-- 
2.37.2


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

end of thread, other threads:[~2023-03-07  5:11 UTC | newest]

Thread overview: 74+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-04 21:40 [PATCH v6 00/57] DYNDBG: opt-in class'd debug for modules, use in drm Jim Cromie
2022-09-04 21:40 ` [PATCH v6 01/57] dyndbg: fix static_branch manipulation Jim Cromie
2022-09-04 21:40 ` [PATCH v6 02/57] dyndbg: fix module.dyndbg handling Jim Cromie
2022-09-04 21:40 ` [PATCH v6 03/57] dyndbg: show both old and new in change-info Jim Cromie
2022-09-04 21:40 ` [PATCH v6 04/57] dyndbg: reverse module walk in cat control Jim Cromie
2022-09-04 21:40 ` [PATCH v6 05/57] dyndbg: reverse module.callsite " Jim Cromie
2022-09-04 21:40 ` [PATCH v6 06/57] dyndbg: use ESCAPE_SPACE for " Jim Cromie
2022-09-04 21:40 ` [PATCH v6 07/57] dyndbg: let query-modname override actual module name Jim Cromie
2022-09-04 21:40 ` [PATCH v6 08/57] dyndbg: add test_dynamic_debug module Jim Cromie
2022-09-04 21:40 ` [PATCH v6 09/57] dyndbg: drop EXPORTed dynamic_debug_exec_queries Jim Cromie
2022-09-04 21:40 ` [PATCH v6 10/57] dyndbg: cleanup auto vars in dynamic_debug_init Jim Cromie
2022-09-07 14:10   ` Jason Baron
2022-09-04 21:40 ` [PATCH v6 11/57] dyndbg: gather __dyndbg[] state into struct _ddebug_info Jim Cromie
2022-09-04 21:40 ` [PATCH v6 12/57] dyndbg: add class_id to pr_debug callsites Jim Cromie
2022-09-04 21:40 ` [PATCH v6 13/57] dyndbg: add __pr_debug_cls for testing Jim Cromie
2022-09-04 21:40 ` [PATCH v6 14/57] dyndbg: add DECLARE_DYNDBG_CLASSMAP macro Jim Cromie
2022-09-04 21:40 ` [PATCH v6 15/57] kernel/module: add __dyndbg_classes section Jim Cromie
2022-09-04 21:40 ` [PATCH v6 16/57] dyndbg: add ddebug_attach_module_classes Jim Cromie
2022-09-04 21:40 ` [PATCH v6 17/57] dyndbg: validate class FOO by checking with module Jim Cromie
2022-09-07 18:19   ` Jason Baron
2022-09-09 20:44     ` jim.cromie
2022-09-12 20:17       ` Jason Baron
2022-09-12 22:08         ` jim.cromie
2022-09-04 21:40 ` [PATCH v6 18/57] doc-dyndbg: describe "class CLASS_NAME" query support Jim Cromie
2022-09-04 21:40 ` [PATCH v6 19/57] doc-dyndbg: edit dynamic-debug-howto for brevity, audience Jim Cromie
2022-09-04 21:40 ` [PATCH v6 20/57] dyndbg: add drm.debug style (drm/parameters/debug) bitmap support Jim Cromie
2022-09-04 21:40 ` [PATCH v6 21/57] dyndbg: test DECLARE_DYNDBG_CLASSMAP, sysfs nodes Jim Cromie
2022-09-07 14:54   ` Greg KH
2022-09-07 14:57     ` Greg KH
2022-09-04 21:40 ` [PATCH v6 22/57] drm_print: condense enum drm_debug_category Jim Cromie
2022-09-07  6:09   ` Daniel Vetter
2022-09-04 21:41 ` [PATCH v6 23/57] drm: POC drm on dyndbg - use in core, 2 helpers, 3 drivers Jim Cromie
2022-09-07  6:13   ` Daniel Vetter
2022-09-09 19:06     ` jim.cromie
2022-09-04 21:41 ` [PATCH v6 24/57] drm_print: interpose drm_*dbg with forwarding macros Jim Cromie
2022-09-04 21:41 ` [PATCH v6 25/57] drm_print: wrap drm_*_dbg in dyndbg descriptor factory macro Jim Cromie
2022-09-04 21:41 ` [PATCH v6 26/57] drm-print.h: include dyndbg header Jim Cromie
2022-09-04 21:41 ` [PATCH v6 27/57] drm-print: add drm_dbg_driver to improve namespace symmetry Jim Cromie
2022-09-04 21:41 ` [PATCH v6 28/57] drm_print: refine drm_debug_enabled for jump-label Jim Cromie
2022-09-07  6:40   ` Daniel Vetter
2022-09-09 23:42     ` jim.cromie
2022-09-04 21:41 ` [PATCH v6 29/57] drm_print: prefer bare printk KERN_DEBUG on generic fn Jim Cromie
2022-09-04 21:41 ` [PATCH v6 30/57] drm_print: add _ddebug descriptor to drm_*dbg prototypes Jim Cromie
2022-09-04 21:41 ` [PATCH v6 31/57] nouveau: change nvkm_debug/trace to use dev_dbg POC Jim Cromie
2022-09-04 21:41 ` [PATCH v6 32/57] nouveau: adapt NV_DEBUG, NV_ATOMIC to use DRM.debug Jim Cromie
2023-03-06 18:49   ` Timur Tabi
2023-03-07  5:10     ` jim.cromie
2022-09-04 21:41 ` [PATCH v6 33/57] nouveau: WIP add 2 LEVEL_NUM classmaps for CLI, SUBDEV Jim Cromie
2022-09-04 21:41 ` [PATCH v6 34/57] dyndbg: add _DPRINTK_FLAGS_ENABLED Jim Cromie
2022-09-04 21:41 ` [PATCH v6 35/57] dyndbg: add _DPRINTK_FLAGS_TRACE Jim Cromie
2022-09-04 21:41 ` [PATCH v6 36/57] dyndbg: add write-events-to-tracefs code Jim Cromie
2022-09-04 21:41 ` [PATCH v6 37/57] dyndbg: add 2 trace-events: drm_debug, drm_devdbg Jim Cromie
2022-09-04 21:41 ` [PATCH v6 38/57] dyndbg: add 2 more trace-events: pr_debug, dev_dbg Jim Cromie
2022-09-04 21:41 ` [PATCH v6 39/57] dyndbg/drm: POC add tracebits sysfs-knob Jim Cromie
2022-09-07  6:59   ` Daniel Vetter
2022-09-04 21:41 ` [PATCH v6 40/57] dyndbg: abstraction macros for modname, function, filename fields Jim Cromie
2022-09-04 21:41 ` [PATCH v6 41/57] dyndbg: split repeating columns to new struct _ddebug_site Jim Cromie
2022-09-04 21:41 ` [PATCH v6 42/57] dyndbg: shrink lineno field by 2 bits Jim Cromie
2022-09-04 21:41 ` [PATCH v6 43/57] dyndbg: add _index,_map to struct _ddebug Jim Cromie
2022-09-04 21:41 ` [PATCH v6 44/57] dyndbg: extend __ddebug_add_module proto to allow packing sites Jim Cromie
2022-09-04 21:41 ` [PATCH v6 45/57] dyndbg: de-duplicate sites Jim Cromie
2022-09-04 21:41 ` [PATCH v6 46/57] dyndbg: drop site-> in add-module, more needed Jim Cromie
2022-09-04 21:41 ` [PATCH v6 47/57] dyndbg: demote iter->site in _init Jim Cromie
2022-09-04 21:41 ` [PATCH v6 48/57] dyndbg: add .gnu.linkonce slot in vmlinux.lds.h KEEPs Jim Cromie
2022-09-04 21:41 ` [PATCH v6 49/57] dyndbg: add structs _ddebug_hdr, _ddebug_site_hdr Jim Cromie
2022-09-04 21:41 ` [PATCH v6 50/57] dyndbg: count unique callsites Jim Cromie
2022-09-04 21:41 ` [PATCH v6 51/57] dyndbg: prevent build bugs via -DNO_DYNAMIC_DEBUG_TABLE Jim Cromie
2022-09-04 21:41 ` [PATCH v6 52/57] dyndbg: add DEFINE_DYNAMIC_DEBUG_TABLE, use it tacitly RFC Jim Cromie
2022-09-04 21:41 ` [PATCH v6 53/57] dyndbg: add/use is_dyndbg_header then set _uplink Jim Cromie
2022-09-04 21:41 ` [PATCH v6 54/57] dyndbg: add .gnu.linkonce. & __dyndbg* sections in module.lds.h Jim Cromie
2022-09-04 21:41 ` [PATCH v6 55/57] dyndbg: dynamic_debug_sites_reclaim() using free_reserved_page() WAG Jim Cromie
2022-09-04 21:41 ` [PATCH v6 56/57] dyndbg: work ddebug_map_site Jim Cromie
2022-09-04 21:41 ` [PATCH v6 57/57] dyndbg: fiddle with readback value on LEVEL_NAMES types Jim Cromie
2022-09-07 15:08 ` [PATCH v6 00/57] DYNDBG: opt-in class'd debug for modules, use in drm Greg KH

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).