All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v11 00/19] dyndbg & drm.debug to tracefs
@ 2022-01-07  5:29 ` Jim Cromie
  0 siblings, 0 replies; 103+ messages in thread
From: Jim Cromie @ 2022-01-07  5:29 UTC (permalink / raw)
  To: jbaron, gregkh, linux, rostedt, mathieu.desnoyers, daniel.vetter,
	seanpaul, robdclark, dri-devel, amd-gfx, intel-gvt-dev,
	intel-gfx, linux-kernel
  Cc: quic_saipraka, will, catalin.marinas, quic_psodagud, maz, arnd,
	linux-arm-kernel, linux-arm-msm, mingo, jim.cromie

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


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

end of thread, other threads:[~2022-01-18 19:20 UTC | newest]

Thread overview: 103+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-07  5:29 [PATCH v11 00/19] dyndbg & drm.debug to tracefs Jim Cromie
2022-01-07  5:29 ` Jim Cromie
2022-01-07  5:29 ` [Intel-gfx] " Jim Cromie
2022-01-07  5:29 ` Jim Cromie
2022-01-07  5:29 ` [PATCH v11 01/19] dyndbg: add _DPRINTK_FLAGS_ENABLED Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29   ` [Intel-gfx] " Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-14 11:57   ` Vincent Whitchurch
2022-01-14 11:57     ` Vincent Whitchurch
2022-01-14 11:57     ` [Intel-gfx] " Vincent Whitchurch
2022-01-14 11:57     ` Vincent Whitchurch
2022-01-14 11:57     ` Vincent Whitchurch
2022-01-17 22:33     ` jim.cromie
2022-01-17 22:33       ` jim.cromie
2022-01-17 22:33       ` jim.cromie
2022-01-17 22:33       ` [Intel-gfx] " jim.cromie
2022-01-17 22:33       ` jim.cromie
2022-01-07  5:29 ` [PATCH v11 02/19] dyndbg: add _DPRINTK_FLAGS_TRACE Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29   ` [Intel-gfx] " Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29 ` [PATCH v11 03/19] dyndbg: add write-to-tracefs code Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29   ` [Intel-gfx] " Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-14 11:46   ` Vincent Whitchurch
2022-01-14 11:46     ` Vincent Whitchurch
2022-01-14 11:46     ` [Intel-gfx] " Vincent Whitchurch
2022-01-14 11:46     ` Vincent Whitchurch
2022-01-14 11:46     ` Vincent Whitchurch
2022-01-18 19:18     ` jim.cromie
2022-01-18 19:18       ` jim.cromie
2022-01-18 19:18       ` jim.cromie
2022-01-18 19:18       ` [Intel-gfx] " jim.cromie
2022-01-18 19:18       ` jim.cromie
2022-01-07  5:29 ` [PATCH v11 04/19] dyndbg: add trace-events for pr_debug, dev_dbg Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29   ` [Intel-gfx] " Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29 ` [PATCH v11 05/19] dyndbg: add desc, dev fields to event record Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29   ` [Intel-gfx] " Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29 ` [PATCH v11 06/19] dyndbg: add class_id to callsites Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29   ` [Intel-gfx] " Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29 ` [PATCH v11 07/19] drm_print: condense enum drm_debug_category Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29   ` [Intel-gfx] " Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29 ` [PATCH v11 08/19] drm_print: add trace_drm_dbg, trace_drm_devdbg events Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29   ` [Intel-gfx] " Jim Cromie
2022-01-07  5:29 ` [PATCH v11 09/19] drm_print: add CONFIG_DRM_USE_DYNAMIC_DEBUG Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29   ` [Intel-gfx] " Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29 ` [PATCH v11 10/19] drm_print: interpose drm_dev_dbg, __drm_dbg with forwarding macros Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29   ` [Intel-gfx] " Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29 ` [PATCH v11 11/19] drm_print: wrap drm_dev_dbg in _dynamic_func_call_no_desc Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29   ` [Intel-gfx] " Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29 ` [PATCH v11 12/19] drm_print: wrap drm_dbg " Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29   ` [Intel-gfx] " Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29 ` [PATCH v11 13/19] drm_print: refine drm_debug_enabled for dyndbg+jump-label Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29   ` [Intel-gfx] " Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29 ` [PATCH v11 14/19] drm_print: prefer bare printk KERN_DEBUG on generic fn Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29   ` [Intel-gfx] " Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29 ` [PATCH v11 15/19] drm_print: use _dynamic_func_call_no_desc_cls Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29   ` [Intel-gfx] " Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29 ` [PATCH v11 16/19] drm_print: add struct _ddebug desc to drm_*dbg Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29   ` [Intel-gfx] " Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29 ` [PATCH v11 17/19] drm_print: add struct _ddebug *desc to trace-drm-*() params Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29   ` [Intel-gfx] " Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29 ` [PATCH v11 18/19] dyndbg: add DEFINE_DYNAMIC_DEBUG_CLASSBITS macro and callbacks Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29   ` [Intel-gfx] " Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29 ` [PATCH v11 19/19] drm_print: use DEFINE_DYNAMIC_DEBUG_CLASSBITS for drm.debug Jim Cromie
2022-01-07  5:29   ` Jim Cromie
2022-01-07  5:29   ` [Intel-gfx] " Jim Cromie
2022-01-07  5:29   ` 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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.