linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/24] dynamic_debug cleanups, query features, WIP print-classes
@ 2020-06-13 15:57 Jim Cromie
  2020-06-13 15:57 ` [PATCH v2 01/24] dyndbg-docs: eschew file /full/path query in docs Jim Cromie
                   ` (23 more replies)
  0 siblings, 24 replies; 62+ messages in thread
From: Jim Cromie @ 2020-06-13 15:57 UTC (permalink / raw)
  To: jbaron, linux-kernel, akpm, gregkh; +Cc: linux, Jim Cromie, stanimir.varbanov

Patchset starts with 9 "cleanups";
 - change section name from vague "__verbose" to "__dyndbg"
 - cleaner docs, drop obsolete comment & useless debug prints,
   refine verbosity, fix a BUG_ON, ram reporting miscounts.

It adds a few query parsing conveniences;
accept combined file:line & file:func forms

  file inode.c:100-200		# file & line-range
  file inode.c:start_*		# file & function

Then it expands flags:

Adds 'u' user flag, allowing user to compose an arbitrary set of
callsites by marking them with 'u', without altering current
print-modifying flags.

Adds 'PFMLTU' flags, which negate their lower-case counterparts.

Adds filter-flags, which select callsites for modification based upon
their current flags.  This lets user activate the set of callsites
marked with 'u' in a batch.

  echo 'u+p' > control

By using negating-flags in your filter, you can match on an exact
flagstate; not just required flags, but prohibited ones.

So if youre using dyndbg to track 2 separate problems, you can use
different patterns of [fmltu] flags to keep the 2 sets of pr-debug
activations separate.

By also using negating-flags in your modflags (after the [+-=] op) you
can fully control the new flagstate, or modify any part of it (unlike
if =p is used).

Also, a late addition:
parse args like: file=afile:afunc module:kvm*
I tried to drag this up to cleanups, but has a conflict so I punted.


WIP print-classes (new from previous)

cc: <stanimir.varbanov@linaro.org>

A patchset from Stanimir tried to create mutually exclusive HI, MID,
LO print-classes for his module, which drove some discussion. These
patches implement a working scheme:

The whole macro stack in dynamic_debug.h is adapted to *_cl()
versions, and old names are redefined to use the new *_cl names, with
a default print-class=0.

pr_debug_n(pr_class>0) provides a way to "create" HI MID LO classes,
by just claiming an N>0. print-classes are meant to be module-scoped;
so manual allocation of them in module #defines is practical.

"mflags <print-classes>" the query term is implemented,
crudely but functional.

To partly enforce print-class locality to a module, "module foo" is
required if "mflags flags" is used; but this can be defeated by
"module *".  Its easy to error out if '*' is used in query, but maybe
"module kvm*" should work, as kvm* developers could probably reach
agreement on print-class constants

Use of above is demonstrated in a patch to samples/kobject/kset-example

I hope this WIP doesnt distract from the non-WIP stuff.


Previous submission (in this release cycle)
  https://lkml.org/lkml/2020/6/5/766
changes since:
  WIP print-classes
  rebase over a recent conflict in master
  2 more "cleanups": Docs ~= s/arch_init/early_init/, maybe macro
  else coding style fix. thx JB
  commit message corrections, improvements based on comments

Jim Cromie (24):

cleanups:
  dyndbg-docs: eschew file /full/path query in docs
  dyndbg-docs: initialization is done early, not arch
  dyndbg: drop obsolete comment on ddebug_proc_open
  dyndbg: refine debug verbosity; 1 is basic, 2 more chatty
  dyndbg: rename __verbose section to __dyndbg
  dyndbg: fix overcounting of ram used by dyndbg
  dyndbg: fix a BUG_ON in ddebug_describe_flags
  dyndbg: make ddebug_tables list LIFO for add/remove_module
  dyndbg: add maybe(str,"") macro to reduce code

file:(func|lines)
  dyndbg: refactor parse_linerange out of ddebug_parse_query
  dyndbg: accept 'file foo.c:func1' and 'file foo.c:10-100'

internal rework
  dyndbg: refactor ddebug_read_flags out of ddebug_parse_flags
  dyndbg: combine flags & mask into a struct, use that
  dyndbg: add filter parameter to ddebug_parse_flags
  dyndbg: extend ddebug_parse_flags to accept optional filter-flags
  dyndbg: prefer declarative init in caller, to memset in callee

expose features
  dyndbg: add user-flag, negating-flags, and filtering on flags
  dyndbg: allow negating flag-chars in modflags

recent, not trivially backport
  dyndbg: accept query terms like module:foo and file=bar

WIP
  dyndbg: WIP towards debug-print-class based callsite controls
  dyndbg: adapt header macros to pass print-class
  dyndbg: add print-class as trailing number to control output
  kset-example: add pr_debug()s for easy visibility of its operation
  kset-example: use pr_debug_n to create example print-classes

 .../admin-guide/dynamic-debug-howto.rst       |  79 ++--
 include/asm-generic/vmlinux.lds.h             |   6 +-
 include/linux/dynamic_debug.h                 |  75 ++--
 include/linux/printk.h                        |   5 +-
 kernel/module.c                               |   2 +-
 lib/dynamic_debug.c                           | 369 +++++++++++-------
 samples/kobject/kset-example.c                |  32 ++
 7 files changed, 374 insertions(+), 194 deletions(-)

-- 
2.26.2


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

end of thread, other threads:[~2020-06-18 12:20 UTC | newest]

Thread overview: 62+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-13 15:57 [PATCH v2 00/24] dynamic_debug cleanups, query features, WIP print-classes Jim Cromie
2020-06-13 15:57 ` [PATCH v2 01/24] dyndbg-docs: eschew file /full/path query in docs Jim Cromie
2020-06-14  6:04   ` Greg KH
2020-06-14 14:24     ` jim.cromie
2020-06-13 15:57 ` [PATCH v2 02/24] dyndbg-docs: initialization is done early, not arch Jim Cromie
2020-06-13 15:57 ` [PATCH v2 03/24] dyndbg: drop obsolete comment on ddebug_proc_open Jim Cromie
2020-06-13 15:57 ` [PATCH v2 04/24] dyndbg: refine debug verbosity; 1 is basic, 2 more chatty Jim Cromie
2020-06-13 15:57 ` [PATCH v2 05/24] dyndbg: rename __verbose section to __dyndbg Jim Cromie
2020-06-13 15:57 ` [PATCH v2 06/24] dyndbg: fix overcounting of ram used by dyndbg Jim Cromie
2020-06-13 15:57 ` [PATCH v2 07/24] dyndbg: fix a BUG_ON in ddebug_describe_flags Jim Cromie
2020-06-15 13:20   ` Petr Mladek
2020-06-15 21:53     ` jim.cromie
2020-06-13 15:57 ` [PATCH v2 08/24] dyndbg: make ddebug_tables list LIFO for add/remove_module Jim Cromie
2020-06-13 15:57 ` [PATCH v2 09/24] dyndbg: add maybe(str,"") macro to reduce code Jim Cromie
2020-06-13 16:14   ` Joe Perches
2020-06-15 20:50     ` jim.cromie
2020-06-15 13:28   ` Petr Mladek
2020-06-15 20:52     ` jim.cromie
2020-06-13 15:57 ` [PATCH v2 10/24] dyndbg: refactor parse_linerange out of ddebug_parse_query Jim Cromie
2020-06-15 13:37   ` Petr Mladek
2020-06-15 22:37     ` jim.cromie
2020-06-13 15:57 ` [PATCH v2 11/24] dyndbg: accept 'file foo.c:func1' and 'file foo.c:10-100' Jim Cromie
2020-06-15 14:46   ` Petr Mladek
2020-06-13 15:57 ` [PATCH v2 12/24] dyndbg: refactor ddebug_read_flags out of ddebug_parse_flags Jim Cromie
2020-06-13 15:57 ` [PATCH v2 13/24] dyndbg: combine flags & mask into a struct, use that Jim Cromie
2020-06-15 15:14   ` Petr Mladek
2020-06-16  5:47     ` jim.cromie
2020-06-16 11:34       ` Petr Mladek
2020-06-13 15:57 ` [PATCH v2 14/24] dyndbg: add filter parameter to ddebug_parse_flags Jim Cromie
2020-06-15 15:17   ` Petr Mladek
2020-06-13 15:57 ` [PATCH v2 15/24] dyndbg: extend ddebug_parse_flags to accept optional leading filter-flags Jim Cromie
2020-06-15 15:37   ` Petr Mladek
2020-06-13 15:57 ` [PATCH v2 16/24] dyndbg: prefer declarative init in caller, to memset in callee Jim Cromie
2020-06-13 15:57 ` [PATCH v2 17/24] dyndbg: add user-flag, negating-flags, and filtering on flags Jim Cromie
2020-06-16 11:41   ` Petr Mladek
2020-06-13 15:57 ` [PATCH v2 18/24] dyndbg: allow negating flag-chars in modflags Jim Cromie
2020-06-16 11:47   ` Petr Mladek
2020-06-13 15:57 ` [PATCH v2 19/24] dyndbg: accept query terms like module:foo and file=bar Jim Cromie
2020-06-16 11:57   ` Petr Mladek
2020-06-16 20:08     ` jim.cromie
2020-06-17 12:11       ` Petr Mladek
2020-06-17 13:32         ` jim.cromie
2020-06-17 14:01           ` Greg KH
2020-06-13 15:57 ` [PATCH v2 20/24] dyndbg: WIP towards debug-print-class based callsite controls Jim Cromie
2020-06-13 19:22   ` Joe Perches
2020-06-16 13:45   ` Petr Mladek
2020-06-16 21:05     ` Joe Perches
2020-06-17  9:31       ` Daniel Thompson
2020-06-17  9:52         ` Petr Mladek
2020-06-17 13:23           ` jim.cromie
2020-06-18 12:20             ` Petr Mladek
2020-06-16 21:13     ` jim.cromie
2020-06-16 21:25       ` jim.cromie
2020-06-13 15:57 ` [PATCH v2 21/24] dyndbg: adapt header macros to pass print-class Jim Cromie
2020-06-13 17:11   ` kernel test robot
2020-06-13 20:25   ` kernel test robot
2020-06-13 15:57 ` [PATCH v2 22/24] dyndbg: add print-class as trailing number to control output Jim Cromie
2020-06-13 15:57 ` [PATCH v2 23/24] kset-example: add pr_debug()s for easy visibility of its operation Jim Cromie
2020-06-14  6:05   ` Greg KH
2020-06-15 22:18     ` jim.cromie
2020-06-16  6:37       ` Greg KH
2020-06-13 15:57 ` [PATCH v2 24/24] kset-example: use pr_debug_n to create example print-classes Jim Cromie

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