[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20200613155738.2249399-1-jim.cromie@gmail.com>
Date: Sat, 13 Jun 2020 09:57:14 -0600
From: Jim Cromie <jim.cromie@...il.com>
To: jbaron@...mai.com, linux-kernel@...r.kernel.org,
akpm@...uxfoundation.org, gregkh@...uxfoundation.org
Cc: linux@...musvillemoes.dk, Jim Cromie <jim.cromie@...il.com>,
stanimir.varbanov@...aro.org
Subject: [PATCH v2 00/24] dynamic_debug cleanups, query features, WIP print-classes
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@...aro.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
Powered by blists - more mailing lists