From: Jim Cromie <jim.cromie@gmail.com>
To: jbaron@akamai.com, gregkh@linuxfoundation.org,
linux@rasmusvillemoes.dk, rostedt@goodmis.org,
mathieu.desnoyers@efficios.com, daniel.vetter@ffwll.ch,
seanpaul@chromium.org, robdclark@gmail.com,
dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org,
intel-gvt-dev@lists.freedesktop.org,
intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org
Cc: quic_saipraka@quicinc.com, arnd@arndb.de, jim.cromie@gmail.com,
catalin.marinas@arm.com, linux-arm-msm@vger.kernel.org,
mingo@redhat.com, quic_psodagud@quicinc.com, maz@kernel.org,
will@kernel.org, linux-arm-kernel@lists.infradead.org
Subject: [Intel-gfx] [PATCH v11 00/19] dyndbg & drm.debug to tracefs
Date: Thu, 6 Jan 2022 22:29:23 -0700 [thread overview]
Message-ID: <20220107052942.1349447-1-jim.cromie@gmail.com> (raw)
hi Jason, Steve, Greg, DRM-folks,
This patchset plumbs debug streams, from dynamic-debug, and from
drm.debug, into tracefs. Enabling traffic is done on both source &
destination:
# enable at source
echo module usbcore +T > /proc/dynamic_debug/control
# enable events into tracefs
echo 1 > /sys/kernel/tracing/events/dyndbg/enable
# enable at source
echo 0x03 > /sys/module/drm/parameters/debug
# enable events into tracefs
echo 1 > /sys/kernel/tracing/events/drm/enable
This allows selectivity at the sources, and in principle, filtering at
tracefs (which is unaddressed, except for arg-passthru).
Here is v11, it differs subsantially from v10:
A: All tracefs action is via 4 new trace-events:
from dyndbg:
pr_debug() sends trace_prdbg()
dev_dbg() sends trace_devdbg()
both preserve args unchanged
similarly from drm:
drm_dev_dbg() -> trace_drm_devdbg()
drm_dbg() -> trace_drm_dbg()
again, args are captured unchanged.
for some reason 3 other drm_vblank* events showed up, I dont know why.
These 4 events (not counting vblank) all capture the args unchanged;
ISTM full exposure of available info is best for filtering/triggering
purposes.
B: dynamic-debug gets proper .class_id, and query support (dyndbg:)
so that this is legal input:
echo module drm class 3 +T > /proc/dynamic_debug/control
v10 used "format drm:core:", which worked, but required addition of
category string prefixes, and possible user-facing-changes issues.
New field is uint:4, big enough to fit DRMs enum drm_debug_category
(once it has been condensed). The name is .class_id, distinct from but
related to DRMs "category".
This also includes _CLS name & arg extensions of the Factory macros
that implement dyndbgs jump-label/NOOP optimizations.
C: integration of dyndbg into drm.debug (drm_print:)
The purpose here (and originally) is to avoid drm_debug_enabled()
runtime costs, and to put a more flexible substrate underneath the
sysfs bitmap api. Ive made it CONFIG dependent, since each _ddebug is
56 bytes, and i915 & amdgpu have ~1700 & ~3800 callsites respectively,
of which 127 & ~2k are plain pr_debugs.
1. We shrink enum drm_debug_category to fit in 4 bits, at nominal
cost of BIT(category) at runtime, which dyndbg will avoid anyway.
2. Add the trace_drm_*dbg() events
3. insert macro indirection, and use it to wrap drm_*dbg()s in
dyndbg's _no_desc_ Factory macro.
4. add __drm_debug_enabled (optimized to true) to use behind jumplabel.
5. use _CLS extension of _no_desc_ Factory macro
this makes cls available to initialize _ddebug.class_id
6. alter drm_*dbg, replacing category with struct _ddebug *desc.
desc.class_id is category
desc.flags allows selection of PRINTK or TRACE or both
7. propagate struct _ddebug *desc thru trace_drm_*dbg()
make all of _ddebug available for filtering
8. add sysfs bitmap to dyndbg, use it to implement drm.debug
D: The "flight-recorder" special instance was unneeded, and is gone:
this handles it generically:
mkdir instances/flightrec
echo 1 > instances/flightrec/events/drm/enable
echo module autopilot +T >/proc/dynamic_debug/control
v10 is here:
https://lore.kernel.org/lkml/20211105192637.2370737-1-jim.cromie@gmail.com/
patches 1-3 are from:
https://lore.kernel.org/lkml/20200721141105.16034-1-vincent.whitchurch@axis.com/
this patchset addresses goals of:
https://patchwork.freedesktop.org/series/78133/
https://lore.kernel.org/lkml/3706af20bc64a320ff8f3ff8950738b988f4bdf5.1636452784.git.quic_saipraka@quicinc.com/
Jim Cromie (19):
1st 3 are basically direct from <vincent.whitchurch@axis.com>
execpt I dropped his printk:dyndbg event:
dyndbg: add _DPRINTK_FLAGS_ENABLED
dyndbg: add _DPRINTK_FLAGS_TRACE
dyndbg: add write-to-tracefs code
add 2 events, and record args (could be squashed)
dyndbg: add trace-events for pr_debug, dev_dbg
dyndbg: add desc, dev fields to event record
add field, selection mechanisms, and CLS extensions to Factory macros
dyndbg: add class_id to callsites
make category fit in .class_id:
drm_print: condense enum drm_debug_category
repeat trace event addition:
drm_print: add trace_drm_dbg, trace_drm_devdbg events
kconfig+Make-flag:
drm_print: add CONFIG_DRM_USE_DYNDBG
macro indirection:
drm_print: interpose drm_dev_dbg, __drm_dbg with forwarding macros
add >control entries for ~4660 drm.debug callsites:
drm_print: wrap drm_dev_dbg in _dynamic_func_call_no_desc
drm_print: wrap drm_dbg in _dynamic_func_call_no_desc
prep:
drm_print: refine drm_debug_enabled for dyndbg+jump-label
drive-by:
drm_print: prefer bare printk KERN_DEBUG on generic fn
get .class_id initialized at compile.
drm_print: use _dynamic_func_call_no_desc_cls
need this to selectively trace/print:
drm_print: add struct _ddebug desc to drm_dbg, drm_dev_dbg
propagate arg upgrade of HEAD~1 into trace-events:
drm_print: add struct _ddebug *desc to trace-drm-*() params
add and use sysfs bitmap support:
dyndbg: add DEFINE_DYNAMIC_DEBUG_CLASSBITS macro and callbacks
drm_print: use DEFINE_DYNAMIC_DEBUG_CLASSBITS for drm.debug
.../admin-guide/dynamic-debug-howto.rst | 12 +
drivers/gpu/drm/Kconfig | 12 +
drivers/gpu/drm/drm_print.c | 66 +++--
include/drm/drm_print.h | 80 +++--
include/linux/dynamic_debug.h | 101 ++++++-
include/trace/events/drm.h | 68 +++++
include/trace/events/dyndbg.h | 74 +++++
lib/dynamic_debug.c | 273 +++++++++++++++---
8 files changed, 601 insertions(+), 85 deletions(-)
create mode 100644 include/trace/events/drm.h
create mode 100644 include/trace/events/dyndbg.h
--
2.33.1
next reply other threads:[~2022-01-07 5:29 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-07 5:29 Jim Cromie [this message]
2022-01-07 5:29 ` [Intel-gfx] [PATCH v11 01/19] dyndbg: add _DPRINTK_FLAGS_ENABLED Jim Cromie
2022-01-14 11:57 ` Vincent Whitchurch
2022-01-17 22:33 ` jim.cromie
2022-01-07 5:29 ` [Intel-gfx] [PATCH v11 02/19] dyndbg: add _DPRINTK_FLAGS_TRACE Jim Cromie
2022-01-07 5:29 ` [Intel-gfx] [PATCH v11 03/19] dyndbg: add write-to-tracefs code Jim Cromie
2022-01-14 11:46 ` Vincent Whitchurch
2022-01-18 19:18 ` jim.cromie
2022-01-07 5:29 ` [Intel-gfx] [PATCH v11 04/19] dyndbg: add trace-events for pr_debug, dev_dbg Jim Cromie
2022-01-07 5:29 ` [Intel-gfx] [PATCH v11 05/19] dyndbg: add desc, dev fields to event record Jim Cromie
2022-01-07 5:29 ` [Intel-gfx] [PATCH v11 06/19] dyndbg: add class_id to callsites Jim Cromie
2022-01-07 5:29 ` [Intel-gfx] [PATCH v11 07/19] drm_print: condense enum drm_debug_category Jim Cromie
2022-01-07 5:29 ` [Intel-gfx] [PATCH v11 08/19] drm_print: add trace_drm_dbg, trace_drm_devdbg events Jim Cromie
2022-01-07 5:29 ` [Intel-gfx] [PATCH v11 09/19] drm_print: add CONFIG_DRM_USE_DYNAMIC_DEBUG Jim Cromie
2022-01-07 5:29 ` [Intel-gfx] [PATCH v11 10/19] drm_print: interpose drm_dev_dbg, __drm_dbg with forwarding macros Jim Cromie
2022-01-07 5:29 ` [Intel-gfx] [PATCH v11 11/19] drm_print: wrap drm_dev_dbg in _dynamic_func_call_no_desc Jim Cromie
2022-01-07 5:29 ` [Intel-gfx] [PATCH v11 12/19] drm_print: wrap drm_dbg " Jim Cromie
2022-01-07 5:29 ` [Intel-gfx] [PATCH v11 13/19] drm_print: refine drm_debug_enabled for dyndbg+jump-label Jim Cromie
2022-01-07 5:29 ` [Intel-gfx] [PATCH v11 14/19] drm_print: prefer bare printk KERN_DEBUG on generic fn Jim Cromie
2022-01-07 5:29 ` [Intel-gfx] [PATCH v11 15/19] drm_print: use _dynamic_func_call_no_desc_cls Jim Cromie
2022-01-07 5:29 ` [Intel-gfx] [PATCH v11 16/19] drm_print: add struct _ddebug desc to drm_*dbg Jim Cromie
2022-01-07 5:29 ` [Intel-gfx] [PATCH v11 17/19] drm_print: add struct _ddebug *desc to trace-drm-*() params Jim Cromie
2022-01-07 5:29 ` [Intel-gfx] [PATCH v11 18/19] dyndbg: add DEFINE_DYNAMIC_DEBUG_CLASSBITS macro and callbacks Jim Cromie
2022-01-07 5:29 ` [Intel-gfx] [PATCH v11 19/19] drm_print: use DEFINE_DYNAMIC_DEBUG_CLASSBITS for drm.debug Jim Cromie
2022-01-07 6:20 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for dyndbg & drm.debug to tracefs Patchwork
2022-01-07 6:23 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2022-01-07 6:50 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
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=20220107052942.1349447-1-jim.cromie@gmail.com \
--to=jim.cromie@gmail.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=arnd@arndb.de \
--cc=catalin.marinas@arm.com \
--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=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@rasmusvillemoes.dk \
--cc=mathieu.desnoyers@efficios.com \
--cc=maz@kernel.org \
--cc=mingo@redhat.com \
--cc=quic_psodagud@quicinc.com \
--cc=quic_saipraka@quicinc.com \
--cc=robdclark@gmail.com \
--cc=rostedt@goodmis.org \
--cc=seanpaul@chromium.org \
--cc=will@kernel.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).