linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jim Cromie <jim.cromie@gmail.com>
To: jbaron@akamai.com, linux-kernel@vger.kernel.org,
	akpm@linuxfoundation.org, gregkh@linuxfoundation.org
Cc: linux@rasmusvillemoes.dk, Jim Cromie <jim.cromie@gmail.com>
Subject: [PATCH v4 16/17] dyndbg: allow anchored match on format query term
Date: Sat, 20 Jun 2020 12:06:42 -0600	[thread overview]
Message-ID: <20200620180643.887546-17-jim.cromie@gmail.com> (raw)
In-Reply-To: <20200620180643.887546-1-jim.cromie@gmail.com>

This should work:

  echo module=amd* format=^[IF_TRACE]: +p  >/proc/dynamic_debug/control

consider drivers/gpu/drm/amd/display/include/logger_types.h:
It has 11 defines like:

  #define DC_LOG_IF_TRACE(...) pr_debug("[IF_TRACE]:"__VA_ARGS__)

These defines are used 804 times at recent count; they are a perfect
test case to leverage existing format-message based classifications of
*pr_debug*.

Those macros prefix the supplied message with a fixed string, Id
expect nearly all existing classification schemes to do so.  Hence we
want to be able to anchor our match to the beginning of the format
string, so ddebug_exec_queries() can be more exact.  This gives easier
contruction of reliable queries to enable/disable those callsites.

This makes no attempt at wider regex features, just the one we need.

Since this is a corner-case of sorts, lets examine one more, hidden in
the example above; note the "module=amd*" query term.

  // normal usage
  ddebug_exec_queries("format=^[IF_TRACE]: +p", MODULE)
  // wildcard 1
  ddebug_exec_queries("module=amd* format=^[IF_TRACE]: +p", NULL)
  // wildcard 2
  ddebug_exec_queries("format=^[IF_TRACE]: +p", "amd*")

Now, I doubt that "amd*" is useful here, but I dont see a reason
to preclude it; multiple modules with coordinated classifcation
schemes is reasonable.  That said, a single call can have multiple
queries, each with an exact module name.

I also see little reason to prefer either of forms 1 or 2.  Its
case-by-case, judging brevity, clarity, and query specificity and
robustness.

Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
 lib/dynamic_debug.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index b00f536d6d12..d737c733967a 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -176,9 +176,15 @@ static int ddebug_change(const struct ddebug_query *query,
 				continue;
 
 			/* match against the format */
-			if (query->format &&
-			    !strstr(dp->format, query->format))
-				continue;
+			if (query->format) {
+				if (*query->format == '^') {
+					/* anchored search. match must be at beginning */
+					char *p = strstr(dp->format, query->format+1);
+					if (p != dp->format)
+						continue;
+				} else if (!strstr(dp->format, query->format))
+					continue;
+			}
 
 			/* match against the line number range */
 			if (query->first_lineno &&
-- 
2.26.2


  parent reply	other threads:[~2020-06-20 18:08 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-20 18:06 [PATCH v4 00/17] dynamic_debug cleanups, query features, export Jim Cromie
2020-06-20 18:06 ` [PATCH v4 01/17] dyndbg-docs: eschew file /full/path query in docs Jim Cromie
2020-06-20 18:06 ` [PATCH v4 02/17] dyndbg-docs: initialization is done early, not arch Jim Cromie
2020-06-20 18:06 ` [PATCH v4 03/17] dyndbg: drop obsolete comment on ddebug_proc_open Jim Cromie
2020-06-20 18:06 ` [PATCH v4 04/17] dyndbg: refine debug verbosity; 1 is basic, 2 more chatty Jim Cromie
2020-06-20 18:06 ` [PATCH v4 05/17] dyndbg: rename __verbose section to __dyndbg Jim Cromie
2020-06-20 18:06 ` [PATCH v4 06/17] dyndbg: fix overcounting of ram used by dyndbg Jim Cromie
2020-06-20 18:06 ` [PATCH v4 07/17] dyndbg: fix a BUG_ON in ddebug_describe_flags Jim Cromie
2020-06-20 18:06 ` [PATCH v4 08/17] dyndbg: fix pr_err with empty string Jim Cromie
2020-06-20 18:06 ` [PATCH v4 09/17] dyndbg: prefer declarative init in caller, to memset in callee Jim Cromie
2020-06-20 18:06 ` [PATCH v4 10/17] dyndbg: make ddebug_tables list LIFO for add/remove_module Jim Cromie
2020-06-20 18:06 ` [PATCH v4 11/17] dyndbg: use gcc ?: to reduce word count Jim Cromie
2020-06-20 18:06 ` [PATCH v4 12/17] dyndbg: refactor parse_linerange out of ddebug_parse_query Jim Cromie
2020-06-20 18:06 ` [PATCH v4 13/17] dyndbg: accept 'file foo.c:func1' and 'file foo.c:10-100' Jim Cromie
2020-07-14  2:26   ` Jason Baron
2020-07-16 16:49     ` jim.cromie
2020-07-16 20:30       ` Jason Baron
2020-06-20 18:06 ` [PATCH v4 14/17] dyndbg: accept query terms like file=bar and module=foo Jim Cromie
2020-06-20 18:06 ` [PATCH v4 15/17] dyndbg: export ddebug_exec_queries Jim Cromie
2020-06-20 18:06 ` Jim Cromie [this message]
2020-06-20 18:06 ` [PATCH v4 17/17] dyndbg: combine flags & mask into a struct, simplify with it Jim Cromie

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200620180643.887546-17-jim.cromie@gmail.com \
    --to=jim.cromie@gmail.com \
    --cc=akpm@linuxfoundation.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jbaron@akamai.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@rasmusvillemoes.dk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).