All of lore.kernel.org
 help / color / mirror / Atom feed
* [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

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.