[PATCH v8 00/16] use DYNAMIC_DEBUG to implement DRM.debug
Jim Cromie
jim.cromie at gmail.com
Wed Sep 15 16:39:41 UTC 2021
Hi Jason, Greg, Daniel, DRM folks,
In DRM-debug currently, drm_debug_enabled() is called a lot to decide
whether or not to write debug messages. Each test is cheap, but costs
continue with uptime. DYNAMIC_DEBUG "dyndbg", when built with
JUMP_LABEL, replaces each of those tests with a patchable NOOP, for
"zero cost when off" debugs.
Broadly, this patchset does 3 things, in 2 trees:
Adds DEFINE_DYNAMIC_DEBUG_CATEGORIES, which defines a mapping from
bits to "categorized" pr_debugs, a sysfs interface, and callbacks to
implement the bits as dynamic_debug >controls. This is modelled after
DRM's debug interface.
Uses the new macro in amdgpu & i915 to control existing pr_debugs
according to their ad-hoc categorizations.
Adapts the drm-debug API (~20 macros) to configurably "replace"
drm_dbg & drm_dev_dbg with pr_debug & dev_dbg, which avoids
drm_debug_enabled() overheads. CONFIG_DRM_USE_DYNAMIC_DEBUG controls
this; the memory costs are substantial (many new/converted drm
callsites, 56 bytes/pr_debug), so the choice should be made by the
user.
#prdbgs KiB #with DRM_USE_DYNAMIC_DEBUG=y
kernel 3079 166k
drm 1 .06k 376 21k
drm_kms_helper 207 12k
i915 167 9.3k 1811 101k
amdgpu 2339 130k 3917 220k
nouveau 3 .17k 105 ~60k
DEFINE_DYNAMIC_DEBUG_CATEGORIES is used to create the controlling
bitmap, which is wired to __drm_debug var so remaining
drm_debug_enabled() users stay in sync.
this is v8:
- 7 small tweaks to dyndbg pr-infos etc, no functional changes
- drop help field from dyndbg_bitdesc
- simplify declarative interface
- move ^ anchor, trailing space to macro helper
this makes callback slightly more generic
- i915/gvt move code, Makefile bits per Tvrtko
- mem cost numbers
- more CI fixes
I think the dyndbg patches qualify to get in this cycle; all but the
last are no-functional-changes, the last is a new feature (which uses
existing mechanics without any adjustments), and has no users yet, so
it can't cause regressions.
Obviously, DRM is the anticipated user. I've fixed the patchwork CI
problems I have seen on v6, v7, and lkp-robot reports since. Since
CONFIG_DRM_USE_DYNAMIC_DEBUG=y by default, it should have seen "on"
testing, not just "off" testing.
Jim Cromie (16):
Dyndbg no-functional-changes chunk:
dyndbg: add module to a vpr-info in dd-exec-queries
dyndbg: pr-info in boot-param should say so
dyndbg: rationalize verbosity
dyndbg: use alt-quotes in vpr-infos, not those user might use
dyndbg: vpr-info on remove-module complete, not starting
dyndbg: no vpr-info on empty queries
dyndbg-doc: fix bootparam usage example (possible conflict
New Feature, using unchanged mechanisms:
dyndbg: add DEFINE_DYNAMIC_DEBUG_CATEGORIES bitmap and callbacks
DRM 1st user(s):
drm: fix doc grammar error
i915/gvt: remove spaces in pr_debug "gvt: core:" etc prefixes
i915/gvt: use DEFINE_DYNAMIC_DEBUG_CATEGORIES for existing prdbgs
amdgpu: use DEFINE_DYNAMIC_DEBUG_CATEGORIES on existing prdbgs
drm_print: add choice to use dynamic debug in drm-debug
drm_print: instrument drm_debug_enabled
amdgpu_ucode: reduce number of pr_debug calls
nouveau: fold multiple DRM_DEBUG_DRIVERs together
.../admin-guide/dynamic-debug-howto.rst | 8 +-
drivers/gpu/drm/Kconfig | 26 ++
drivers/gpu/drm/Makefile | 3 +
drivers/gpu/drm/amd/amdgpu/Makefile | 2 +
drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c | 293 ++++++++++--------
.../gpu/drm/amd/display/dc/core/dc_debug.c | 43 ++-
drivers/gpu/drm/drm_print.c | 53 +++-
drivers/gpu/drm/i915/Makefile | 2 +
drivers/gpu/drm/i915/gvt/debug.h | 18 +-
drivers/gpu/drm/i915/intel_gvt.c | 34 ++
drivers/gpu/drm/nouveau/nouveau_drm.c | 36 ++-
include/drm/drm_drv.h | 2 +-
include/drm/drm_print.h | 184 ++++++++---
include/linux/dynamic_debug.h | 62 ++++
lib/dynamic_debug.c | 121 ++++++--
15 files changed, 650 insertions(+), 237 deletions(-)
--
2.31.1
More information about the amd-gfx
mailing list