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@xxxxxxxxx> --- 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