* [PATCH 15/16] dyndbg: allow inverted-flag-chars in modflags
@ 2019-11-27 17:51 Jim Cromie
0 siblings, 0 replies; 2+ messages in thread
From: Jim Cromie @ 2019-11-27 17:51 UTC (permalink / raw)
To: jbaron, linux-kernel; +Cc: linux, greg, Jim Cromie, Jonathan Corbet, linux-doc
Extend flags modifications to allow [PFMLT_XYZ] inverted flags.
This allows control-queries like:
#> Q () { echo file inode.c $* > control } # to type less
#> Q -P # same as +p
#> Q +X # same as -x
#> Q xyz-P # same as xyz+p
This allows flags in a callsite to be simultaneously set and cleared,
while still starting with the current flagstate (with +- ops).
Generally, you chose -p or +p 1st, then set or clear flags
accordingly.
# enable print on callsites with 'xy'; and re-mark with just 'z'
#> Q xy+pXYz
Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
Documentation/admin-guide/dynamic-debug-howto.rst | 8 +++++---
lib/dynamic_debug.c | 6 ++++--
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/Documentation/admin-guide/dynamic-debug-howto.rst b/Documentation/admin-guide/dynamic-debug-howto.rst
index 5404e23eeac8..493e74a14bdd 100644
--- a/Documentation/admin-guide/dynamic-debug-howto.rst
+++ b/Documentation/admin-guide/dynamic-debug-howto.rst
@@ -250,9 +250,11 @@ only callsites with x&y cleared.
Flagsets cannot contain ``xX`` etc, a flag cannot be true and false.
-modflags containing upper-case flags is reserved/undefined for now.
-inverted-flags are currently ignored, usage gets trickier if given
-``-pXy``, it should leave x set.
+modflags may contain upper-case flags also, using these lets you
+invert the flag setting implied by the OP; '-pX' means disable
+printing, and mark that callsite with usr-x flag to create a group,
+for optional further manipulation. Generally, '+p' and '-p' is your
+main choice, and use of inverted flags in modflags is rare.
Notes::
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index b2630df0c3a5..82daf95b8f64 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -488,15 +488,17 @@ static int ddebug_parse_flags(const char *str,
/* calculate final mods: flags, mask based upon op */
switch (op) {
+ unsigned int tmp;
case '=':
mods->mask = 0;
break;
case '+':
- mods->mask = ~0U;
+ mods->mask = ~mods->mask;
break;
case '-':
+ tmp = mods->mask;
mods->mask = ~mods->flags;
- mods->flags = 0;
+ mods->flags = tmp;
break;
}
--
2.23.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [PATCH v3 00/18] dynamic-debug cleanups, 2 new features
@ 2019-12-05 21:51 Jim Cromie
2019-12-05 21:51 ` [PATCH 15/16] dyndbg: allow inverted-flag-chars in modflags Jim Cromie
0 siblings, 1 reply; 2+ messages in thread
From: Jim Cromie @ 2019-12-05 21:51 UTC (permalink / raw)
To: jbaron, gregkh, linux-kernel; +Cc: linux, Jim Cromie
changes from v2:
only claim one user flag, dont really need more
fix patchset grooming err Reported-by: kbuild test robot <lkp@intel.com>
quoting tweaks in Docs (unvalidated as better, but likely)
rename to lib/dyndbg.c, update docs accordingly
changes from v1:
dont drop trim_prefix yet, its harmless, and better supports old compilers.
dont move externs to header, despite checkpatch
v1: https://lkml.org/lkml/2019/10/29/989
v2: https://lkml.org/lkml/2019/11/27/547
New Features (review):
accept new query input:
file inode.c:100-200 # & line-range
file inode.c:start_* # & function
add 'u' user flag, allowing user to compose an arbitrary set of
callsites by marking them with 'u', without altering current
print-modifying flags.
extend flags-spec to allow filter-flags, which select callsites for
modification based upon their current flags. This lets user activate
the set of callsites composed previously (u+p).
add negating flags to filter on absence of flags, or to negate a modification.
Jim Cromie (17):
dyndbg-docs: eschew file /full/path query in docs
dyndbg: drop obsolete comment on ddebug_proc_open
dyndbg: raise verbosity needed to enable ddebug_proc_* logging
dyndbg: rename __verbose section to __dyndbg
dyndbg: fix overcounting of ram used by dyndbg
dyndbg: fix a BUG_ON in ddebug_describe_flags
dyndbg: refactor parse_linerange out of ddebug_parse_query
dyndbg: accept 'file foo.c:func1' and 'file foo.c:10-100'
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
dyndbg: add user-flag, negating-flags, and filtering on flags
dyndbg: allow negating flag-chars in modflags
dyndbg: make ddebug_tables list LIFO for add/remove_module
dyndbg: rename lib/dynamic_debug.c to lib/dyndbg.c
dyndbg-docs: normalize comments in examples
Documentation/admin-guide/dynamic-debug-howto.rst | 176 ++++++++++++++++-----------
include/asm-generic/vmlinux.lds.h | 6 +-
include/linux/dynamic_debug.h | 5 +-
kernel/module.c | 2 +-
lib/Makefile | 4 +-
lib/{dynamic_debug.c => dyndbg.c} | 285 ++++++++++++++++++++++++++------------------
6 files changed, 285 insertions(+), 193 deletions(-)
--
2.23.0
^ permalink raw reply [flat|nested] 2+ messages in thread
* [PATCH 15/16] dyndbg: allow inverted-flag-chars in modflags
2019-12-05 21:51 [PATCH v3 00/18] dynamic-debug cleanups, 2 new features Jim Cromie
@ 2019-12-05 21:51 ` Jim Cromie
0 siblings, 0 replies; 2+ messages in thread
From: Jim Cromie @ 2019-12-05 21:51 UTC (permalink / raw)
To: jbaron, gregkh, linux-kernel
Cc: linux, Jim Cromie, Jonathan Corbet, linux-doc
Extend flags modifications to allow [PFMLT_XYZ] inverted flags.
This allows control-queries like:
#> Q () { echo file inode.c $* > control } # to type less
#> Q -P # same as +p
#> Q +X # same as -x
#> Q xyz-P # same as xyz+p
This allows flags in a callsite to be simultaneously set and cleared,
while still starting with the current flagstate (with +- ops).
Generally, you chose -p or +p 1st, then set or clear flags
accordingly.
# enable print on callsites with 'xy'; and re-mark with just 'z'
#> Q xy+pXYz
Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
Documentation/admin-guide/dynamic-debug-howto.rst | 8 +++++---
lib/dynamic_debug.c | 6 ++++--
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/Documentation/admin-guide/dynamic-debug-howto.rst b/Documentation/admin-guide/dynamic-debug-howto.rst
index 5404e23eeac8..493e74a14bdd 100644
--- a/Documentation/admin-guide/dynamic-debug-howto.rst
+++ b/Documentation/admin-guide/dynamic-debug-howto.rst
@@ -250,9 +250,11 @@ only callsites with x&y cleared.
Flagsets cannot contain ``xX`` etc, a flag cannot be true and false.
-modflags containing upper-case flags is reserved/undefined for now.
-inverted-flags are currently ignored, usage gets trickier if given
-``-pXy``, it should leave x set.
+modflags may contain upper-case flags also, using these lets you
+invert the flag setting implied by the OP; '-pX' means disable
+printing, and mark that callsite with usr-x flag to create a group,
+for optional further manipulation. Generally, '+p' and '-p' is your
+main choice, and use of inverted flags in modflags is rare.
Notes::
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index b2630df0c3a5..82daf95b8f64 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -488,15 +488,17 @@ static int ddebug_parse_flags(const char *str,
/* calculate final mods: flags, mask based upon op */
switch (op) {
+ unsigned int tmp;
case '=':
mods->mask = 0;
break;
case '+':
- mods->mask = ~0U;
+ mods->mask = ~mods->mask;
break;
case '-':
+ tmp = mods->mask;
mods->mask = ~mods->flags;
- mods->flags = 0;
+ mods->flags = tmp;
break;
}
--
2.23.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-12-05 21:53 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-27 17:51 [PATCH 15/16] dyndbg: allow inverted-flag-chars in modflags Jim Cromie
2019-12-05 21:51 [PATCH v3 00/18] dynamic-debug cleanups, 2 new features Jim Cromie
2019-12-05 21:51 ` [PATCH 15/16] dyndbg: allow inverted-flag-chars in modflags Jim Cromie
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.