lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Mon, 7 Sep 2015 01:12:46 +0000
From:	平松雅巳 / HIRAMATU,MASAMI 
	<masami.hiramatsu.pt@...achi.com>
To:	"'Namhyung Kim'" <namhyung@...nel.org>,
	Arnaldo Carvalho de Melo <acme@...nel.org>
CC:	Ingo Molnar <mingo@...nel.org>,
	Peter Zijlstra <a.p.zijlstra@...llo.nl>,
	Jiri Olsa <jolsa@...hat.com>,
	LKML <linux-kernel@...r.kernel.org>,
	Wang Nan <wangnan0@...wei.com>,
	"pi3orama@....com" <pi3orama@....com>
Subject: RE: [PATCH v2 5/5] perf probe: Print deleted events in cmd_probe()

>From: Namhyung Kim [mailto:namhyung@...il.com] On Behalf Of Namhyung Kim
>
>Showing actual trace event when deleteing perf events is only needed in
>perf probe command.  But the add functionality itself can be used by
>other places.  So move the printing code into the cmd_probe().
>
>The output is not changed.
>

Looks good to me :)

Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@...achi.com>

Thanks!

>Cc: Masami Hiramatsu <masami.hiramatsu.pt@...achi.com>
>Signed-off-by: Namhyung Kim <namhyung@...nel.org>
>---
> tools/perf/builtin-probe.c    | 62 ++++++++++++++++++++++++++++++++++++++++++-
> tools/perf/util/probe-event.c |  5 ----
> tools/perf/util/probe-event.h |  1 +
> tools/perf/util/probe-file.c  |  7 +++--
> tools/perf/util/probe-file.h  |  4 +++
> 5 files changed, 69 insertions(+), 10 deletions(-)
>
>diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c
>index b8cf6cb7e1bf..ee2c46d8353e 100644
>--- a/tools/perf/builtin-probe.c
>+++ b/tools/perf/builtin-probe.c
>@@ -41,6 +41,7 @@
> #include "util/parse-options.h"
> #include "util/probe-finder.h"
> #include "util/probe-event.h"
>+#include "util/probe-file.h"
>
> #define DEFAULT_VAR_FILTER "!__k???tab_* & !__crc_*"
> #define DEFAULT_FUNC_FILTER "!_*"
>@@ -357,6 +358,65 @@ out_cleanup:
> 	return ret;
> }
>
>+static int perf_del_probe_events(struct strfilter *filter)
>+{
>+	int ret, ret2, ufd = -1, kfd = -1;
>+	char *str = strfilter__string(filter);
>+	struct strlist *klist = NULL, *ulist = NULL;
>+	struct str_node *ent;
>+
>+	if (!str)
>+		return -EINVAL;
>+
>+	pr_debug("Delete filter: \'%s\'\n", str);
>+
>+	/* Get current event names */
>+	ret = probe_file__open_both(&kfd, &ufd, PF_FL_RW);
>+	if (ret < 0)
>+		goto out;
>+
>+	klist = strlist__new(NULL, NULL);
>+	if (!klist)
>+		return -ENOMEM;
>+
>+	ret = probe_file__get_events(kfd, filter, klist);
>+	if (ret == 0) {
>+		strlist__for_each(ent, klist)
>+			pr_info("Removed event: %s\n", ent->s);
>+
>+		ret = probe_file__del_strlist(kfd, klist);
>+		if (ret < 0)
>+			goto error;
>+	}
>+
>+	ret2 = probe_file__get_events(ufd, filter, ulist);
>+	if (ret2 == 0) {
>+		strlist__for_each(ent, ulist)
>+			pr_info("Removed event: %s\n", ent->s);
>+
>+		ret2 = probe_file__del_strlist(ufd, ulist);
>+		if (ret2 < 0)
>+			goto error;
>+	}
>+
>+	if (ret == -ENOENT && ret2 == -ENOENT)
>+		pr_debug("\"%s\" does not hit any event.\n", str);
>+		/* Note that this is silently ignored */
>+	ret = 0;
>+
>+error:
>+	if (kfd >= 0)
>+		close(kfd);
>+	if (ufd >= 0)
>+		close(ufd);
>+out:
>+	strlist__delete(klist);
>+	strlist__delete(ulist);
>+	free(str);
>+
>+	return ret;
>+}
>+
> static int
> __cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused)
> {
>@@ -529,7 +589,7 @@ __cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused)
> 		return ret;
> #endif
> 	case 'd':
>-		ret = del_perf_probe_events(params.filter);
>+		ret = perf_del_probe_events(params.filter);
> 		if (ret < 0) {
> 			pr_err_with_code("  Error: Failed to delete events.", ret);
> 			return ret;
>diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
>index 01b9a5bd9449..3da9e1c792fa 100644
>--- a/tools/perf/util/probe-event.c
>+++ b/tools/perf/util/probe-event.c
>@@ -2819,8 +2819,6 @@ int del_perf_probe_events(struct strfilter *filter)
> 	if (!str)
> 		return -EINVAL;
>
>-	pr_debug("Delete filter: \'%s\'\n", str);
>-
> 	/* Get current event names */
> 	ret = probe_file__open_both(&kfd, &ufd, PF_FL_RW);
> 	if (ret < 0)
>@@ -2835,9 +2833,6 @@ int del_perf_probe_events(struct strfilter *filter)
> 		ret = ret2;
> 		goto error;
> 	}
>-	if (ret == -ENOENT && ret2 == -ENOENT)
>-		pr_debug("\"%s\" does not hit any event.\n", str);
>-		/* Note that this is silently ignored */
> 	ret = 0;
>
> error:
>diff --git a/tools/perf/util/probe-event.h b/tools/perf/util/probe-event.h
>index 610f743671e1..9bcea36359f2 100644
>--- a/tools/perf/util/probe-event.h
>+++ b/tools/perf/util/probe-event.h
>@@ -144,6 +144,7 @@ extern int convert_perf_probe_events(struct perf_probe_event *pevs, int npevs);
> extern int apply_perf_probe_events(struct perf_probe_event *pevs, int npevs);
> extern void cleanup_perf_probe_events(struct perf_probe_event *pevs, int npevs);
> extern int del_perf_probe_events(struct strfilter *filter);
>+
> extern int show_perf_probe_event(const char *group, const char *event,
> 				 struct perf_probe_event *pev,
> 				 const char *module, bool use_stdout);
>diff --git a/tools/perf/util/probe-file.c b/tools/perf/util/probe-file.c
>index f00b0df56dfe..38c0a62039cc 100644
>--- a/tools/perf/util/probe-file.c
>+++ b/tools/perf/util/probe-file.c
>@@ -267,7 +267,6 @@ static int __del_trace_probe_event(int fd, struct str_node *ent)
> 		goto error;
> 	}
>
>-	pr_info("Removed event: %s\n", ent->s);
> 	return 0;
> error:
> 	pr_warning("Failed to delete event: %s\n",
>@@ -275,8 +274,8 @@ error:
> 	return ret;
> }
>
>-static int probe_file__get_events(int fd, struct strfilter *filter,
>-				  struct strlist *plist)
>+int probe_file__get_events(int fd, struct strfilter *filter,
>+			   struct strlist *plist)
> {
> 	struct strlist *namelist;
> 	struct str_node *ent;
>@@ -300,7 +299,7 @@ static int probe_file__get_events(int fd, struct strfilter *filter,
> 	return ret;
> }
>
>-static int probe_file__del_strlist(int fd, struct strlist *namelist)
>+int probe_file__del_strlist(int fd, struct strlist *namelist)
> {
> 	int ret = 0;
> 	struct str_node *ent;
>diff --git a/tools/perf/util/probe-file.h b/tools/perf/util/probe-file.h
>index ada94a242a17..18ac9cf51c34 100644
>--- a/tools/perf/util/probe-file.h
>+++ b/tools/perf/util/probe-file.h
>@@ -14,5 +14,9 @@ struct strlist *probe_file__get_namelist(int fd);
> struct strlist *probe_file__get_rawlist(int fd);
> int probe_file__add_event(int fd, struct probe_trace_event *tev);
> int probe_file__del_events(int fd, struct strfilter *filter);
>+int probe_file__get_events(int fd, struct strfilter *filter,
>+				  struct strlist *plist);
>+int probe_file__del_strlist(int fd, struct strlist *namelist);
>+
>
> #endif
>--
>2.5.0

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ