From: tip-bot for Masami Hiramatsu <mhiramat@redhat.com>
To: linux-tip-commits@vger.kernel.org
Cc: acme@redhat.com, mingo@redhat.com, peterz@infradead.org,
fweisbec@gmail.com, dle-develop@lists.sourceforge.net,
rostedt@goodmis.org, jbaron@redhat.com, tglx@linutronix.de,
mhiramat@redhat.com, systemtap@sources.redhat.com,
linux-kernel@vger.kernel.org, hpa@zytor.com, paulus@samba.org,
fche@redhat.com, jkenisto@us.ibm.com, hch@infradead.org,
ananth@in.ibm.com, srikar@linux.vnet.ibm.com, mingo@elte.hu,
prasad@linux.vnet.ibm.com
Subject: [tip:perf/urgent] perf probe: Add glob matching support on --del
Date: Tue, 15 Dec 2009 19:26:40 GMT [thread overview]
Message-ID: <tip-bbbb521bc61008b280c72ad6e29a8a7558d3acfa@git.kernel.org> (raw)
In-Reply-To: <20091215153210.17436.12327.stgit@dhcp-100-2-132.bos.redhat.com>
Commit-ID: bbbb521bc61008b280c72ad6e29a8a7558d3acfa
Gitweb: http://git.kernel.org/tip/bbbb521bc61008b280c72ad6e29a8a7558d3acfa
Author: Masami Hiramatsu <mhiramat@redhat.com>
AuthorDate: Tue, 15 Dec 2009 10:32:10 -0500
Committer: Ingo Molnar <mingo@elte.hu>
CommitDate: Tue, 15 Dec 2009 20:22:03 +0100
perf probe: Add glob matching support on --del
Add glob-expression matching support on --del option.
You can use wildcards for specifying deleting events.
e.g.
Clear all probe events:
# perf probe --del '*'
Clear probes on schedule():
# perf probe --del 'schedule*'
Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Jim Keniston <jkenisto@us.ibm.com>
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Frank Ch. Eigler <fche@redhat.com>
Cc: Jason Baron <jbaron@redhat.com>
Cc: K.Prasad <prasad@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: systemtap <systemtap@sources.redhat.com>
Cc: DLE <dle-develop@lists.sourceforge.net>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
LKML-Reference: <20091215153210.17436.12327.stgit@dhcp-100-2-132.bos.redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
tools/perf/util/probe-event.c | 52 ++++++++++++++++++++++++++++++----------
tools/perf/util/string.c | 25 +++++++++++++++++++
tools/perf/util/string.h | 2 +
3 files changed, 66 insertions(+), 13 deletions(-)
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index 3e30be9..5e99e52 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -532,26 +532,50 @@ void add_trace_kprobe_events(struct probe_point *probes, int nr_probes)
close(fd);
}
+static void __del_trace_kprobe_event(int fd, struct str_node *ent)
+{
+ char *p;
+ char buf[128];
+
+ /* Convert from perf-probe event to trace-kprobe event */
+ if (e_snprintf(buf, 128, "-:%s", ent->s) < 0)
+ die("Failed to copy event.");
+ p = strchr(buf + 2, ':');
+ if (!p)
+ die("Internal error: %s should have ':' but not.", ent->s);
+ *p = '/';
+
+ write_trace_kprobe_event(fd, buf);
+ printf("Remove event: %s\n", ent->s);
+}
+
static void del_trace_kprobe_event(int fd, const char *group,
const char *event, struct strlist *namelist)
{
char buf[128];
- struct str_node *ent;
+ struct str_node *ent, *n;
+ int found = 0;
if (e_snprintf(buf, 128, "%s:%s", group, event) < 0)
die("Failed to copy event.");
- ent = strlist__find(namelist, buf);
- if (!ent) {
- pr_info("Info: event \"%s\" does not exist, could not remove it.\n", buf);
- return;
- }
- /* Convert from perf-probe event to trace-kprobe event */
- if (e_snprintf(buf, 128, "-:%s/%s", group, event) < 0)
- die("Failed to copy event.");
- write_trace_kprobe_event(fd, buf);
- printf("Remove event: %s:%s\n", group, event);
- strlist__remove(namelist, ent);
+ if (strpbrk(buf, "*?")) { /* Glob-exp */
+ strlist__for_each_safe(ent, n, namelist)
+ if (strglobmatch(ent->s, buf)) {
+ found++;
+ __del_trace_kprobe_event(fd, ent);
+ strlist__remove(namelist, ent);
+ }
+ } else {
+ ent = strlist__find(namelist, buf);
+ if (ent) {
+ found++;
+ __del_trace_kprobe_event(fd, ent);
+ strlist__remove(namelist, ent);
+ }
+ }
+ if (found == 0)
+ pr_info("Info: event \"%s\" does not exist, could not remove it.\n", buf);
}
void del_trace_kprobe_events(struct strlist *dellist)
@@ -570,15 +594,17 @@ void del_trace_kprobe_events(struct strlist *dellist)
str = strdup(ent->s);
if (!str)
die("Failed to copy event.");
+ pr_debug("Parsing: %s\n", str);
p = strchr(str, ':');
if (p) {
group = str;
*p = '\0';
event = p + 1;
} else {
- group = PERFPROBE_GROUP;
+ group = "*";
event = str;
}
+ pr_debug("Group: %s, Event: %s\n", group, event);
del_trace_kprobe_event(fd, group, event, namelist);
free(str);
}
diff --git a/tools/perf/util/string.c b/tools/perf/util/string.c
index f24a8cc..5352d7d 100644
--- a/tools/perf/util/string.c
+++ b/tools/perf/util/string.c
@@ -226,3 +226,28 @@ fail:
argv_free(argv);
return NULL;
}
+
+/* Glob expression pattern matching */
+bool strglobmatch(const char *str, const char *pat)
+{
+ while (*str && *pat && *pat != '*') {
+ if (*pat == '?') {
+ str++;
+ pat++;
+ } else
+ if (*str++ != *pat++)
+ return false;
+ }
+ /* Check wild card */
+ if (*pat == '*') {
+ while (*pat == '*')
+ pat++;
+ if (!*pat) /* Tail wild card matches all */
+ return true;
+ while (*str)
+ if (strglobmatch(str++, pat))
+ return true;
+ }
+ return !*str && !*pat;
+}
+
diff --git a/tools/perf/util/string.h b/tools/perf/util/string.h
index bfecec2..02ede58 100644
--- a/tools/perf/util/string.h
+++ b/tools/perf/util/string.h
@@ -1,6 +1,7 @@
#ifndef __PERF_STRING_H_
#define __PERF_STRING_H_
+#include <stdbool.h>
#include "types.h"
int hex2u64(const char *ptr, u64 *val);
@@ -8,6 +9,7 @@ char *strxfrchar(char *s, char from, char to);
s64 perf_atoll(const char *str);
char **argv_split(const char *str, int *argcp);
void argv_free(char **argv);
+bool strglobmatch(const char *str, const char *pat);
#define _STR(x) #x
#define STR(x) _STR(x)
next prev parent reply other threads:[~2009-12-15 19:28 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-15 15:31 [PATCH -tip 00/14] perf-probe updates Masami Hiramatsu
2009-12-15 15:31 ` [PATCH -tip 01/14] perf probe: Cleanup struct session in builtin-probe.c Masami Hiramatsu
2009-12-15 19:24 ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:31 ` [PATCH -tip 02/14] perf probe: Check the result of e_snprintf() Masami Hiramatsu
2009-12-15 19:25 ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:31 ` [PATCH -tip 03/14] perf probe: Check hyphen only argument Masami Hiramatsu
2009-12-15 19:25 ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:31 ` [PATCH -tip 04/14] perf probe: Show need-dwarf message only if it is really needed Masami Hiramatsu
2009-12-15 19:25 ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:31 ` [PATCH -tip 05/14] perf probe: Fix --del to show info instead of warning Masami Hiramatsu
2009-12-15 19:25 ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:31 ` [PATCH -tip 06/14] perf probe: Fix --del to update current event list Masami Hiramatsu
2009-12-15 19:25 ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:31 ` [PATCH -tip 07/14] perf tools: Add for_each macros for strlist Masami Hiramatsu
2009-12-15 19:26 ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:32 ` [PATCH -tip 08/14] perf probe: Use strlist__for_each macros in probe-event.c Masami Hiramatsu
2009-12-15 19:26 ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:32 ` [PATCH -tip 09/14] perf probe: Add glob matching support on --del Masami Hiramatsu
2009-12-15 19:26 ` tip-bot for Masami Hiramatsu [this message]
2009-12-15 15:32 ` [PATCH -tip 10/14] perf probe: Support event name for --add option Masami Hiramatsu
2009-12-15 19:26 ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:32 ` [PATCH -tip 11/14] perf probe: Reject second attempt of adding same-name event Masami Hiramatsu
2009-12-15 19:27 ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:32 ` [PATCH -tip 12/14] perf probe: Check build-id of vmlinux Masami Hiramatsu
2009-12-15 19:27 ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:32 ` [PATCH -tip 13/14] perf probe: Check symbols in symtab/kallsyms Masami Hiramatsu
2009-12-15 19:27 ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:32 ` [PATCH -tip 14/14] perf probe: Fix to show which probe point is not found Masami Hiramatsu
2009-12-15 19:27 ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 19:22 ` [PATCH -tip 00/14] perf-probe updates Ingo Molnar
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=tip-bbbb521bc61008b280c72ad6e29a8a7558d3acfa@git.kernel.org \
--to=mhiramat@redhat.com \
--cc=acme@redhat.com \
--cc=ananth@in.ibm.com \
--cc=dle-develop@lists.sourceforge.net \
--cc=fche@redhat.com \
--cc=fweisbec@gmail.com \
--cc=hch@infradead.org \
--cc=hpa@zytor.com \
--cc=jbaron@redhat.com \
--cc=jkenisto@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=mingo@redhat.com \
--cc=paulus@samba.org \
--cc=peterz@infradead.org \
--cc=prasad@linux.vnet.ibm.com \
--cc=rostedt@goodmis.org \
--cc=srikar@linux.vnet.ibm.com \
--cc=systemtap@sources.redhat.com \
--cc=tglx@linutronix.de \
/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 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.