[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1310370416-6322-22-git-send-email-jim.cromie@gmail.com>
Date: Mon, 11 Jul 2011 01:46:56 -0600
From: Jim Cromie <jim.cromie@...il.com>
To: jbaron@...hat.com
Cc: linux-kernel@...r.kernel.org, bvanassche@....org, joe@...ches.com,
gregkh@...e.de, gnb@...h.org, Jim Cromie <jim.cromie@...il.com>
Subject: [PATCH 21/21] dynamic_debug: delete pending queries
delete pending queries by re-issuing it with disabled flags
with:
$> echo "module foo +ap" > <debugfs>/dynamic_debug/control
$> echo "module foo +apt" > <debugfs>/dynamic_debug/control
$> echo "module foo ap=" > <debugfs>/dynamic_debug/control
1st command adds a pending query on foo
2nd command modifies it by adding a TID flag
3rd command deletes it by setting flags to 0
Note that the pending query matches 'ap' as required by the flags-filter,
but additionally has 't'. An exact match on the query-spec is required,
"module foo line 10-20" would not match, and wouldnt be removed.
Signed-off-by: Jim Cromie <jim.cromie@...il.com>
---
lib/dynamic_debug.c | 17 ++++++++++++++---
1 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index f0c2b39..2fd207d 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -447,7 +447,7 @@ static int ddebug_parse_flags(const char *str, unsigned int *flagsp,
*filterp = filter;
flags = ddebug_parse_flag_settings(s);
- if (flags <= 0) {
+ if (flags < 0) {
pr_err("flags=0x%x\n", flags);
return -EINVAL;
}
@@ -505,7 +505,17 @@ static int ddebug_save_pending(struct ddebug_query *query,
list_for_each_entry_safe(pq, pqnext, &pending_queries, link) {
if (queries_match(query, &pq->query)) {
- /* query already in list, update flags */
+ /* query already in list */
+ if (!flags) {
+ /* zeroed flags, remove query */
+ if (verbose)
+ pr_info("delete pending: %s\n",
+ show_pending_query(pq));
+ list_del_init(&pq->link);
+ kfree(pq);
+ pending_ct--;
+ return 0;
+ }
if (pq->flags != flags)
pq->flags = flags;
if (pq->mask != mask)
@@ -565,7 +575,8 @@ static int ddebug_exec_query(char *query_string)
mutex_lock(&ddebug_lock);
nfound = ddebug_change(&query, flags, mask, filter);
if (!nfound) {
- if (flags & _DPRINTK_FLAGS_APPEND)
+ if (flags & _DPRINTK_FLAGS_APPEND ||
+ filter & _DPRINTK_FLAGS_APPEND)
rc = ddebug_save_pending(&query, flags, mask);
else
pr_warn("no match on: %s\n",
--
1.7.4.1
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists