From: Jim Cromie <jim.cromie@gmail.com>
To: jbaron@akamai.com, gregkh@linuxfoundation.org,
linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
amd-gfx@lists.freedesktop.org,
intel-gvt-dev@lists.freedesktop.org,
intel-gfx@lists.freedesktop.org
Cc: daniel.vetter@ffwll.ch, seanpaul@chromium.org,
robdclark@gmail.com, linux@rasmusvillemoes.dk, joe@perches.com,
Jim Cromie <jim.cromie@gmail.com>
Subject: [PATCH 00/12] use dynamic-debug under drm.debug api
Date: Wed, 16 Feb 2022 20:48:16 -0700 [thread overview]
Message-ID: <20220217034829.64395-1-jim.cromie@gmail.com> (raw)
drm.debug api provides ~23 macros to issue 10 categories of debug
messages, each enabled by a bit in /sys/module/drm/parameters/debug.
drm_debug_enabled(category) tests these bits at runtime; while cheap
individually, the costs accumulate.
For CONFIG_DRM_USE_DYNAMIC_DEBUG=y, this patchset obsoletes those
runtime tests (inside drm_*dbg) by wrapping the 2 fns in one of the
dynamic_func_call* Factory macros. The config dependence is due to
the .data footprint cost of the tables; AMDGPU has ~4k callsites, at
56 bytes each.
This creates entries in /proc/dynamic_debug/control for each callsite,
and each has .class_id = macros'-category. This, and a new query
keyword, allow (1st):
# 1=DRM_UT_KMS (iirc)
#> echo "module drm class 1 +p > /proc/dynamic_debug/control
Then equivalently:
# except it also clears other flags
#> echo 0x01 > /sys/module/drm/parameters/debug
dyndbg:
- fixes a bug in dyndbg static_key toggling, @stable cc'd
- adds support for distinct classes to dyndbg (new,unused feature)
- add DECLARE_DYNAMIC_DEBUG_CLASSBITS macro and callbacks
to implement bitmap -> classid sysfs knob
dyndbg:
- drops exported fn: dynamic_debug_exec_queries()
any potential users would just use macro, or a tweak on it.
- improve info-msg to print both "old -> new" flags
drm:
- adapts drm to use that support (link category to class_id)
- wraps drm_*dbg() in a dyndbg Factory macro to get NOOP optimized debugs
this disconnects drm.debug sysfs knob
- uses DECLARE_DYNAMIC_DEBUG_CLASSBITS macro
this reconnects sysfs knob
This could be -v12, but the focus and subject has wandered a bit, and
patchwork CI had multiple different notions of the version.
Noteworthy changes:
- no tracefs stuff here, refocus
split out already, needs maturation, more attention.
its competing with a diet plan, to reduce 56 bytes/callsite. RFC.
Previous drm.debug approach:
- avoided drm_dbg & drm_devdbg by splicing in pr_debug & dev_dbg
this preserved the optional decorations: module:function:line:
- used DRM_UT_CORE => "drm:core:" prefix-string, cpp cat'd to formats
this made sites selectable by matching to that format prefix
This version:
- .class_id is easier to explain, and no config/format-string diffs
- wraps drm_dbg & drm_devdbg callsites for jumplabel enablement
efficiency was original goal.
- loses the optional decorations.
drm has its own logmsg standards, doesnt need decorations slapped on
later: could recast flags for drm specific decorations
This is based on 5.17-rc4
Its also here: in (dd-drm branch)
ghlinux-ro https://github.com/jimc/linux.git (fetch)
I'll push further fixes there as they come.
Jim Cromie (13):
dyndbg: fix static_branch manipulation @stable
dyndbg: add class_id field and query support
dyndbg: add DEFINE_DYNAMIC_DEBUG_CLASSBITS macro and callbacks
dyndbg: drop EXPORTed dynamic_debug_exec_queries
dyndbg: improve change-info to have old and new
dyndbg: abstract dyndbg_site_is_printing
drm_print: condense enum drm_debug_category
drm_print: interpose drm_*dbg with forwarding macros
drm_print: wrap drm_*_dbg in dyndbg jumplabel
drm_print: refine drm_debug_enabled for dyndbg+jump-label
drm_print: prefer bare printk KERN_DEBUG on generic fn
drm_print: add _ddebug desc to drm_*dbg prototypes
drm_print: use DEFINE_DYNAMIC_DEBUG_CLASSBITS for drm.debug
.../admin-guide/dynamic-debug-howto.rst | 7 +
drivers/gpu/drm/Kconfig | 12 ++
drivers/gpu/drm/Makefile | 2 +
drivers/gpu/drm/drm_print.c | 56 ++++---
include/drm/drm_print.h | 80 +++++++---
include/linux/dynamic_debug.h | 113 +++++++++++---
lib/dynamic_debug.c | 140 ++++++++++++++----
7 files changed, 323 insertions(+), 87 deletions(-)
--
2.35.1
next reply other threads:[~2022-02-17 3:48 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-17 3:48 Jim Cromie [this message]
2022-02-17 3:48 ` [PATCH 01/13] dyndbg: fix static_branch manipulation Jim Cromie
2022-02-17 3:48 ` [PATCH 02/13] dyndbg: add class_id field and query support Jim Cromie
2022-02-17 3:48 ` [PATCH 03/13] dyndbg: add DEFINE_DYNAMIC_DEBUG_CLASSBITS macro and callbacks Jim Cromie
2022-02-17 3:48 ` [PATCH 04/13] dyndbg: drop EXPORTed dynamic_debug_exec_queries Jim Cromie
2022-02-17 3:48 ` [PATCH 05/13] dyndbg: improve change-info to have old and new Jim Cromie
2022-02-17 3:48 ` [PATCH 06/13] dyndbg: abstract dyndbg_site_is_printing Jim Cromie
2022-02-17 3:48 ` [PATCH 07/13] drm_print: condense enum drm_debug_category Jim Cromie
2022-02-17 3:48 ` [PATCH 08/13] drm_print: interpose drm_*dbg with forwarding macros Jim Cromie
2022-02-17 3:48 ` [PATCH 09/13] drm_print: wrap drm_*_dbg in dyndbg jumplabel Jim Cromie
2022-02-17 3:48 ` [PATCH 10/13] drm_print: refine drm_debug_enabled for dyndbg+jump-label Jim Cromie
2022-02-17 3:48 ` [PATCH 11/13] drm_print: prefer bare printk KERN_DEBUG on generic fn Jim Cromie
2022-02-17 3:48 ` [PATCH 12/13] drm_print: add _ddebug desc to drm_*dbg prototypes Jim Cromie
2022-02-17 3:48 ` [PATCH 13/13] drm_print: use DEFINE_DYNAMIC_DEBUG_CLASSBITS for drm.debug Jim Cromie
2022-03-01 16:46 [PATCH 00/12] use dynamic-debug under drm.debug api Jim Cromie
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220217034829.64395-1-jim.cromie@gmail.com \
--to=jim.cromie@gmail.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=daniel.vetter@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=gregkh@linuxfoundation.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-gvt-dev@lists.freedesktop.org \
--cc=jbaron@akamai.com \
--cc=joe@perches.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@rasmusvillemoes.dk \
--cc=robdclark@gmail.com \
--cc=seanpaul@chromium.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).