public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/6][perf/core] perf tools: Fixes
@ 2016-03-24 12:52 Jiri Olsa
  2016-03-24 12:52 ` [PATCH 1/6] perf mem: Add --ldlat option Jiri Olsa
                   ` (6 more replies)
  0 siblings, 7 replies; 16+ messages in thread
From: Jiri Olsa @ 2016-03-24 12:52 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: lkml, David Ahern, Ingo Molnar, Namhyung Kim, Peter Zijlstra,
	Stephane Eranian, Andi Kleen

hi,
sending assorted fixes and leftover from previous mem patchset.

Also available in here:
  git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
  perf/fixes

thanks,
jirka
---
Jiri Olsa (6):
      perf mem: Add --ldlat option
      perf mem: Add -U/-K (--all-user/--all-kernel) options
      perf tools: Make hists__collapse_insert_entry static
      perf tools: Introduce trim function
      perf tools: Unify -f/--force option documentation
      perf tests: Add test to check for event times

 tools/perf/Documentation/perf-annotate.txt |   2 +-
 tools/perf/Documentation/perf-diff.txt     |   2 +-
 tools/perf/Documentation/perf-mem.txt      |  11 +++++
 tools/perf/Documentation/perf-report.txt   |   2 +-
 tools/perf/Documentation/perf-script.txt   |   4 ++
 tools/perf/builtin-mem.c                   |  12 ++++-
 tools/perf/tests/Build                     |   1 +
 tools/perf/tests/builtin-test.c            |   4 ++
 tools/perf/tests/event-times.c             | 236 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 tools/perf/tests/tests.h                   |   1 +
 tools/perf/ui/browsers/hists.c             |   3 +-
 tools/perf/ui/stdio/hist.c                 |   3 +-
 tools/perf/util/hist.c                     |   5 +-
 tools/perf/util/hist.h                     |   2 -
 tools/perf/util/mem-events.c               |  17 ++++++-
 tools/perf/util/mem-events.h               |   1 +
 tools/perf/util/util.h                     |   5 ++
 17 files changed, 298 insertions(+), 13 deletions(-)
 create mode 100644 tools/perf/tests/event-times.c

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH 1/6] perf mem: Add --ldlat option
  2016-03-24 12:52 [PATCH 0/6][perf/core] perf tools: Fixes Jiri Olsa
@ 2016-03-24 12:52 ` Jiri Olsa
  2016-03-24 15:57   ` Arnaldo Carvalho de Melo
  2016-03-24 12:52 ` [PATCH 2/6] perf mem: Add -U/-K (--all-user/--all-kernel) options Jiri Olsa
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 16+ messages in thread
From: Jiri Olsa @ 2016-03-24 12:52 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: lkml, David Ahern, Ingo Molnar, Namhyung Kim, Peter Zijlstra,
	Stephane Eranian, Andi Kleen

Adding --ldlat option to specify desired latency
for loads event.

Specify 50 as loads event latency:

  $ perf mem record -e ldlat-loads -v --ldlat 50 true
  calling: record -W -d -e cpu/mem-loads,ldlat=50/P true

Link: http://lkml.kernel.org/n/tip-ec2m0cvivkfs8uhtiv411hfc@git.kernel.org
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
 tools/perf/Documentation/perf-mem.txt |  3 +++
 tools/perf/builtin-mem.c              |  1 +
 tools/perf/util/mem-events.c          | 17 ++++++++++++++++-
 tools/perf/util/mem-events.h          |  1 +
 4 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/tools/perf/Documentation/perf-mem.txt b/tools/perf/Documentation/perf-mem.txt
index 43310d8661fe..6676d2784733 100644
--- a/tools/perf/Documentation/perf-mem.txt
+++ b/tools/perf/Documentation/perf-mem.txt
@@ -48,6 +48,9 @@ OPTIONS
 	option can be passed in record mode. It will be interpreted the same way as perf
 	record.
 
+--ldload::
+	Specify desired latency for loads event.
+
 SEE ALSO
 --------
 linkperf:perf-record[1], linkperf:perf-report[1]
diff --git a/tools/perf/builtin-mem.c b/tools/perf/builtin-mem.c
index 914f6fe192e3..bf0bfca5be20 100644
--- a/tools/perf/builtin-mem.c
+++ b/tools/perf/builtin-mem.c
@@ -66,6 +66,7 @@ static int __cmd_record(int argc, const char **argv, struct perf_mem *mem)
 	OPT_CALLBACK('e', "event", &mem, "event",
 		     "event selector. use 'perf mem record -e list' to list available events",
 		     parse_record_events),
+	OPT_UINTEGER(0, "ldlat", &perf_mem_events__loads_ldlat, "mem-loads latency"),
 	OPT_INCR('v', "verbose", &verbose,
 		 "be more verbose (show counter open errors, etc)"),
 	OPT_END()
diff --git a/tools/perf/util/mem-events.c b/tools/perf/util/mem-events.c
index e6b01e6f70a0..3ff60f08a778 100644
--- a/tools/perf/util/mem-events.c
+++ b/tools/perf/util/mem-events.c
@@ -10,10 +10,12 @@
 #include "debug.h"
 #include "symbol.h"
 
+unsigned int perf_mem_events__loads_ldlat = 30;
+
 #define E(t, n, s) { .tag = t, .name = n, .sysfs_name = s }
 
 struct perf_mem_event perf_mem_events[PERF_MEM_EVENTS__MAX] = {
-	E("ldlat-loads",	"cpu/mem-loads,ldlat=30/P",	"mem-loads"),
+	E("ldlat-loads",	"cpu/mem-loads,ldlat=%u/P",	"mem-loads"),
 	E("ldlat-stores",	"cpu/mem-stores/P",		"mem-stores"),
 	E("stlb-miss-loads",	"cpu/mem-stlb-miss-loads/P",	"mem-stlb-miss-loads"),
 	E("stlb-miss-stores",	"cpu/mem-stlb-miss-stores/P",	"mem-stlb-miss-stores"),
@@ -39,8 +41,21 @@ struct perf_mem_event perf_mem_events[PERF_MEM_EVENTS__MAX] = {
 
 #undef E
 
+static char mem_loads_name[100];
+static bool mem_loads_name__init;
+
 char *perf_mem_events__name(int i)
 {
+	if (i == PERF_MEM_EVENTS__LOAD) {
+		if (!mem_loads_name__init) {
+			mem_loads_name__init = true;
+			scnprintf(mem_loads_name, sizeof(mem_loads_name),
+				  perf_mem_events[i].name,
+				  perf_mem_events__loads_ldlat);
+		}
+		return mem_loads_name;
+	}
+
 	return (char *)perf_mem_events[i].name;
 }
 
diff --git a/tools/perf/util/mem-events.h b/tools/perf/util/mem-events.h
index de88f4267cd1..939786ffab2a 100644
--- a/tools/perf/util/mem-events.h
+++ b/tools/perf/util/mem-events.h
@@ -37,6 +37,7 @@ enum {
 };
 
 extern struct perf_mem_event perf_mem_events[PERF_MEM_EVENTS__MAX];
+extern unsigned int perf_mem_events__loads_ldlat;
 
 int perf_mem_events__parse(const char *str);
 int perf_mem_events__init(void);
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 2/6] perf mem: Add -U/-K (--all-user/--all-kernel) options
  2016-03-24 12:52 [PATCH 0/6][perf/core] perf tools: Fixes Jiri Olsa
  2016-03-24 12:52 ` [PATCH 1/6] perf mem: Add --ldlat option Jiri Olsa
@ 2016-03-24 12:52 ` Jiri Olsa
  2016-03-24 15:58   ` Arnaldo Carvalho de Melo
  2016-03-31  6:51   ` [tip:perf/core] " tip-bot for Jiri Olsa
  2016-03-24 12:52 ` [PATCH 3/6] perf tools: Make hists__collapse_insert_entry static Jiri Olsa
                   ` (4 subsequent siblings)
  6 siblings, 2 replies; 16+ messages in thread
From: Jiri Olsa @ 2016-03-24 12:52 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: lkml, David Ahern, Ingo Molnar, Namhyung Kim, Peter Zijlstra,
	Stephane Eranian, Andi Kleen

Add -U/-K (--all-user/--all-kernel) options to use
the perf record --all-user/--all-kernel options.

Link: http://lkml.kernel.org/n/tip-adxn5c48oe0gmjrjmq6we27q@git.kernel.org
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
 tools/perf/Documentation/perf-mem.txt |  8 ++++++++
 tools/perf/builtin-mem.c              | 11 ++++++++++-
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/tools/perf/Documentation/perf-mem.txt b/tools/perf/Documentation/perf-mem.txt
index 6676d2784733..f8e23f50ce59 100644
--- a/tools/perf/Documentation/perf-mem.txt
+++ b/tools/perf/Documentation/perf-mem.txt
@@ -51,6 +51,14 @@ OPTIONS
 --ldload::
 	Specify desired latency for loads event.
 
+-K::
+--all-kernel::
+	Configure all used events to run in kernel space.
+
+-U::
+--all-user::
+	Configure all used events to run in user space.
+
 SEE ALSO
 --------
 linkperf:perf-record[1], linkperf:perf-report[1]
diff --git a/tools/perf/builtin-mem.c b/tools/perf/builtin-mem.c
index bf0bfca5be20..5dad76e1c8df 100644
--- a/tools/perf/builtin-mem.c
+++ b/tools/perf/builtin-mem.c
@@ -62,6 +62,7 @@ static int __cmd_record(int argc, const char **argv, struct perf_mem *mem)
 	int rec_argc, i = 0, j;
 	const char **rec_argv;
 	int ret;
+	bool all_user = false, all_kernel = false;
 	struct option options[] = {
 	OPT_CALLBACK('e', "event", &mem, "event",
 		     "event selector. use 'perf mem record -e list' to list available events",
@@ -69,13 +70,15 @@ static int __cmd_record(int argc, const char **argv, struct perf_mem *mem)
 	OPT_UINTEGER(0, "ldlat", &perf_mem_events__loads_ldlat, "mem-loads latency"),
 	OPT_INCR('v', "verbose", &verbose,
 		 "be more verbose (show counter open errors, etc)"),
+	OPT_BOOLEAN('U', "--all-user", &all_user, "collect only user level data"),
+	OPT_BOOLEAN('K', "--all-kernel", &all_kernel, "collect only kernel level data"),
 	OPT_END()
 	};
 
 	argc = parse_options(argc, argv, options, record_mem_usage,
 			     PARSE_OPT_STOP_AT_NON_OPTION);
 
-	rec_argc = argc + 7; /* max number of arguments */
+	rec_argc = argc + 9; /* max number of arguments */
 	rec_argv = calloc(rec_argc + 1, sizeof(char *));
 	if (!rec_argv)
 		return -1;
@@ -104,6 +107,12 @@ static int __cmd_record(int argc, const char **argv, struct perf_mem *mem)
 		rec_argv[i++] = perf_mem_events__name(j);
 	};
 
+	if (all_user)
+		rec_argv[i++] = "--all-user";
+
+	if (all_kernel)
+		rec_argv[i++] = "--all-kernel";
+
 	for (j = 0; j < argc; j++, i++)
 		rec_argv[i] = argv[j];
 
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 3/6] perf tools: Make hists__collapse_insert_entry static
  2016-03-24 12:52 [PATCH 0/6][perf/core] perf tools: Fixes Jiri Olsa
  2016-03-24 12:52 ` [PATCH 1/6] perf mem: Add --ldlat option Jiri Olsa
  2016-03-24 12:52 ` [PATCH 2/6] perf mem: Add -U/-K (--all-user/--all-kernel) options Jiri Olsa
@ 2016-03-24 12:52 ` Jiri Olsa
  2016-03-31  6:52   ` [tip:perf/core] " tip-bot for Jiri Olsa
  2016-03-24 12:52 ` [PATCH 4/6] perf tools: Introduce trim function Jiri Olsa
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 16+ messages in thread
From: Jiri Olsa @ 2016-03-24 12:52 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: lkml, David Ahern, Ingo Molnar, Namhyung Kim, Peter Zijlstra,
	Stephane Eranian, Andi Kleen

No need to export hists__collapse_insert_entry function.

Link: http://lkml.kernel.org/n/tip-7fuk01zwjefo0aoqo42co0vy@git.kernel.org
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
 tools/perf/util/hist.c | 5 +++--
 tools/perf/util/hist.h | 2 --
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
index 31c4641fe5ff..3d34c57dfbe2 100644
--- a/tools/perf/util/hist.c
+++ b/tools/perf/util/hist.c
@@ -1295,8 +1295,9 @@ static int hists__hierarchy_insert_entry(struct hists *hists,
 	return ret;
 }
 
-int hists__collapse_insert_entry(struct hists *hists, struct rb_root *root,
-				 struct hist_entry *he)
+static int hists__collapse_insert_entry(struct hists *hists,
+					struct rb_root *root,
+					struct hist_entry *he)
 {
 	struct rb_node **p = &root->rb_node;
 	struct rb_node *parent = NULL;
diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h
index bec0cd660fbd..588596561cb3 100644
--- a/tools/perf/util/hist.h
+++ b/tools/perf/util/hist.h
@@ -199,8 +199,6 @@ int hists__init(void);
 int __hists__init(struct hists *hists, struct perf_hpp_list *hpp_list);
 
 struct rb_root *hists__get_rotate_entries_in(struct hists *hists);
-int hists__collapse_insert_entry(struct hists *hists,
-				  struct rb_root *root, struct hist_entry *he);
 
 struct perf_hpp {
 	char *buf;
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 4/6] perf tools: Introduce trim function
  2016-03-24 12:52 [PATCH 0/6][perf/core] perf tools: Fixes Jiri Olsa
                   ` (2 preceding siblings ...)
  2016-03-24 12:52 ` [PATCH 3/6] perf tools: Make hists__collapse_insert_entry static Jiri Olsa
@ 2016-03-24 12:52 ` Jiri Olsa
  2016-03-24 12:52 ` [PATCH 5/6] perf tools: Unify -f/--force option documentation Jiri Olsa
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 16+ messages in thread
From: Jiri Olsa @ 2016-03-24 12:52 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: lkml, David Ahern, Ingo Molnar, Namhyung Kim, Peter Zijlstra,
	Stephane Eranian, Andi Kleen

To be used in cases for both sides trim.

Link: http://lkml.kernel.org/n/tip-7fuk01zwjefo0aoqo42co0vy@git.kernel.org
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
 tools/perf/ui/browsers/hists.c | 3 +--
 tools/perf/ui/stdio/hist.c     | 3 +--
 tools/perf/util/util.h         | 5 +++++
 3 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c
index 4b9816555946..ba10c86cb56c 100644
--- a/tools/perf/ui/browsers/hists.c
+++ b/tools/perf/ui/browsers/hists.c
@@ -1607,9 +1607,8 @@ static int hists_browser__scnprintf_hierarchy_headers(struct hist_browser *brows
 
 			ret = fmt->header(fmt, &dummy_hpp, hists_to_evsel(hists));
 			dummy_hpp.buf[ret] = '\0';
-			rtrim(dummy_hpp.buf);
 
-			start = ltrim(dummy_hpp.buf);
+			start = trim(dummy_hpp.buf);
 			ret = strlen(start);
 
 			if (start != dummy_hpp.buf)
diff --git a/tools/perf/ui/stdio/hist.c b/tools/perf/ui/stdio/hist.c
index 7aff5acf3265..560eb47d56f9 100644
--- a/tools/perf/ui/stdio/hist.c
+++ b/tools/perf/ui/stdio/hist.c
@@ -569,9 +569,8 @@ static int print_hierarchy_header(struct hists *hists, struct perf_hpp *hpp,
 			first_col = false;
 
 			fmt->header(fmt, hpp, hists_to_evsel(hists));
-			rtrim(hpp->buf);
 
-			header_width += fprintf(fp, "%s", ltrim(hpp->buf));
+			header_width += fprintf(fp, "%s", trim(hpp->buf));
 		}
 	}
 
diff --git a/tools/perf/util/util.h b/tools/perf/util/util.h
index 8298d607c738..3bf3de86d429 100644
--- a/tools/perf/util/util.h
+++ b/tools/perf/util/util.h
@@ -254,6 +254,11 @@ int hex2u64(const char *ptr, u64 *val);
 char *ltrim(char *s);
 char *rtrim(char *s);
 
+static inline char *trim(char *s)
+{
+	return ltrim(rtrim(s));
+}
+
 void dump_stack(void);
 void sighandler_dump_stack(int sig);
 
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 5/6] perf tools: Unify -f/--force option documentation
  2016-03-24 12:52 [PATCH 0/6][perf/core] perf tools: Fixes Jiri Olsa
                   ` (3 preceding siblings ...)
  2016-03-24 12:52 ` [PATCH 4/6] perf tools: Introduce trim function Jiri Olsa
@ 2016-03-24 12:52 ` Jiri Olsa
  2016-03-31  6:52   ` [tip:perf/core] perf tools: Make -f/--force option documentation consistent across tools tip-bot for Jiri Olsa
  2016-03-24 12:52 ` [PATCH 6/6] perf tests: Add test to check for event times Jiri Olsa
  2016-03-24 16:06 ` [PATCH 0/6][perf/core] perf tools: Fixes Arnaldo Carvalho de Melo
  6 siblings, 1 reply; 16+ messages in thread
From: Jiri Olsa @ 2016-03-24 12:52 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: lkml, David Ahern, Ingo Molnar, Namhyung Kim, Peter Zijlstra,
	Stephane Eranian, Andi Kleen

Link: http://lkml.kernel.org/n/tip-cximteb8r1a6750wz8sgeajh@git.kernel.org
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
 tools/perf/Documentation/perf-annotate.txt | 2 +-
 tools/perf/Documentation/perf-diff.txt     | 2 +-
 tools/perf/Documentation/perf-report.txt   | 2 +-
 tools/perf/Documentation/perf-script.txt   | 4 ++++
 4 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/tools/perf/Documentation/perf-annotate.txt b/tools/perf/Documentation/perf-annotate.txt
index e9cd39a92dc2..778f54d4d0bd 100644
--- a/tools/perf/Documentation/perf-annotate.txt
+++ b/tools/perf/Documentation/perf-annotate.txt
@@ -33,7 +33,7 @@ OPTIONS
 
 -f::
 --force::
-        Don't complain, do it.
+        Don't do ownership validation.
 
 -v::
 --verbose::
diff --git a/tools/perf/Documentation/perf-diff.txt b/tools/perf/Documentation/perf-diff.txt
index d1deb573877f..3e9490b9c533 100644
--- a/tools/perf/Documentation/perf-diff.txt
+++ b/tools/perf/Documentation/perf-diff.txt
@@ -75,7 +75,7 @@ OPTIONS
 
 -f::
 --force::
-       Don't complain, do it.
+        Don't do ownership validation.
 
 --symfs=<directory>::
         Look for files with symbols relative to this directory.
diff --git a/tools/perf/Documentation/perf-report.txt b/tools/perf/Documentation/perf-report.txt
index 12113992ac9d..496d42cdf02b 100644
--- a/tools/perf/Documentation/perf-report.txt
+++ b/tools/perf/Documentation/perf-report.txt
@@ -285,7 +285,7 @@ OPTIONS
 
 -f::
 --force::
-        Don't complain, do it.
+        Don't do ownership validation.
 
 --symfs=<directory>::
         Look for files with symbols relative to this directory.
diff --git a/tools/perf/Documentation/perf-script.txt b/tools/perf/Documentation/perf-script.txt
index 382ddfb45d1d..22ef3933342a 100644
--- a/tools/perf/Documentation/perf-script.txt
+++ b/tools/perf/Documentation/perf-script.txt
@@ -262,6 +262,10 @@ include::itrace.txt[]
 --ns::
 	Use 9 decimal places when displaying time (i.e. show the nanoseconds)
 
+-f::
+--force::
+	Don't do ownership validation.
+
 SEE ALSO
 --------
 linkperf:perf-record[1], linkperf:perf-script-perl[1],
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 6/6] perf tests: Add test to check for event times
  2016-03-24 12:52 [PATCH 0/6][perf/core] perf tools: Fixes Jiri Olsa
                   ` (4 preceding siblings ...)
  2016-03-24 12:52 ` [PATCH 5/6] perf tools: Unify -f/--force option documentation Jiri Olsa
@ 2016-03-24 12:52 ` Jiri Olsa
  2016-03-31  6:52   ` [tip:perf/core] " tip-bot for Jiri Olsa
  2016-03-24 16:06 ` [PATCH 0/6][perf/core] perf tools: Fixes Arnaldo Carvalho de Melo
  6 siblings, 1 reply; 16+ messages in thread
From: Jiri Olsa @ 2016-03-24 12:52 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: lkml, David Ahern, Ingo Molnar, Namhyung Kim, Peter Zijlstra,
	Stephane Eranian, Andi Kleen

This test creates software event 'cpu-clock'
attaches it in several ways and checks that
enabled and running times match.

Link: http://lkml.kernel.org/n/tip-y1g9g3qru2m03s8hzc2kuaor@git.kernel.org
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
 tools/perf/tests/Build          |   1 +
 tools/perf/tests/builtin-test.c |   4 +
 tools/perf/tests/event-times.c  | 236 ++++++++++++++++++++++++++++++++++++++++
 tools/perf/tests/tests.h        |   1 +
 4 files changed, 242 insertions(+)
 create mode 100644 tools/perf/tests/event-times.c

diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build
index 1ba628ed049a..449fe97a555f 100644
--- a/tools/perf/tests/Build
+++ b/tools/perf/tests/Build
@@ -37,6 +37,7 @@ perf-y += topology.o
 perf-y += cpumap.o
 perf-y += stat.o
 perf-y += event_update.o
+perf-y += event-times.o
 
 $(OUTPUT)tests/llvm-src-base.c: tests/bpf-script-example.c tests/Build
 	$(call rule_mkdir)
diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c
index f2b1dcac45d3..93c467015e71 100644
--- a/tools/perf/tests/builtin-test.c
+++ b/tools/perf/tests/builtin-test.c
@@ -204,6 +204,10 @@ static struct test generic_tests[] = {
 		.func = test__event_update,
 	},
 	{
+		.desc = "Test events times",
+		.func = test__event_times,
+	},
+	{
 		.func = NULL,
 	},
 };
diff --git a/tools/perf/tests/event-times.c b/tools/perf/tests/event-times.c
new file mode 100644
index 000000000000..95fb744f6628
--- /dev/null
+++ b/tools/perf/tests/event-times.c
@@ -0,0 +1,236 @@
+#include <linux/compiler.h>
+#include <string.h>
+#include "tests.h"
+#include "evlist.h"
+#include "evsel.h"
+#include "util.h"
+#include "debug.h"
+#include "thread_map.h"
+#include "target.h"
+
+static int attach__enable_on_exec(struct perf_evlist *evlist)
+{
+	struct perf_evsel *evsel = perf_evlist__last(evlist);
+	struct target target = {
+		.uid = UINT_MAX,
+	};
+	const char *argv[] = { "true", NULL, };
+	char sbuf[STRERR_BUFSIZE];
+	int err;
+
+	pr_debug("attaching to spawned child, enable on exec\n");
+
+	err = perf_evlist__create_maps(evlist, &target);
+	if (err < 0) {
+		pr_debug("Not enough memory to create thread/cpu maps\n");
+		return err;
+	}
+
+	err = perf_evlist__prepare_workload(evlist, &target, argv, false, NULL);
+	if (err < 0) {
+		pr_debug("Couldn't run the workload!\n");
+		return err;
+	}
+
+	evsel->attr.enable_on_exec = 1;
+
+	err = perf_evlist__open(evlist);
+	if (err < 0) {
+		pr_debug("perf_evlist__open: %s\n",
+			 strerror_r(errno, sbuf, sizeof(sbuf)));
+		return err;
+	}
+
+	return perf_evlist__start_workload(evlist) == 1 ? TEST_OK : TEST_FAIL;
+}
+
+static int detach__enable_on_exec(struct perf_evlist *evlist)
+{
+	waitpid(evlist->workload.pid, NULL, 0);
+	return 0;
+}
+
+static int attach__current_disabled(struct perf_evlist *evlist)
+{
+	struct perf_evsel *evsel = perf_evlist__last(evlist);
+	struct thread_map *threads;
+	int err;
+
+	pr_debug("attaching to current thread as disabled\n");
+
+	threads = thread_map__new(-1, getpid(), UINT_MAX);
+	if (threads == NULL) {
+		pr_debug("thread_map__new\n");
+		return -1;
+	}
+
+	evsel->attr.disabled = 1;
+
+	err = perf_evsel__open_per_thread(evsel, threads);
+	if (err) {
+		pr_debug("Failed to open event cpu-clock:u\n");
+		return err;
+	}
+
+	thread_map__put(threads);
+	return perf_evsel__enable(evsel) == 0 ? TEST_OK : TEST_FAIL;
+}
+
+static int attach__current_enabled(struct perf_evlist *evlist)
+{
+	struct perf_evsel *evsel = perf_evlist__last(evlist);
+	struct thread_map *threads;
+	int err;
+
+	pr_debug("attaching to current thread as enabled\n");
+
+	threads = thread_map__new(-1, getpid(), UINT_MAX);
+	if (threads == NULL) {
+		pr_debug("failed to call thread_map__new\n");
+		return -1;
+	}
+
+	err = perf_evsel__open_per_thread(evsel, threads);
+
+	thread_map__put(threads);
+	return err == 0 ? TEST_OK : TEST_FAIL;
+}
+
+static int detach__disable(struct perf_evlist *evlist)
+{
+	struct perf_evsel *evsel = perf_evlist__last(evlist);
+
+	return perf_evsel__enable(evsel);
+}
+
+static int attach__cpu_disabled(struct perf_evlist *evlist)
+{
+	struct perf_evsel *evsel = perf_evlist__last(evlist);
+	struct cpu_map *cpus;
+	int err;
+
+	pr_debug("attaching to CPU 0 as enabled\n");
+
+	cpus = cpu_map__new("0");
+	if (cpus == NULL) {
+		pr_debug("failed to call cpu_map__new\n");
+		return -1;
+	}
+
+	evsel->attr.disabled = 1;
+
+	err = perf_evsel__open_per_cpu(evsel, cpus);
+	if (err) {
+		if (err == -EACCES)
+			return TEST_SKIP;
+
+		pr_debug("Failed to open event cpu-clock:u\n");
+		return err;
+	}
+
+	cpu_map__put(cpus);
+	return perf_evsel__enable(evsel);
+}
+
+static int attach__cpu_enabled(struct perf_evlist *evlist)
+{
+	struct perf_evsel *evsel = perf_evlist__last(evlist);
+	struct cpu_map *cpus;
+	int err;
+
+	pr_debug("attaching to CPU 0 as enabled\n");
+
+	cpus = cpu_map__new("0");
+	if (cpus == NULL) {
+		pr_debug("failed to call cpu_map__new\n");
+		return -1;
+	}
+
+	err = perf_evsel__open_per_cpu(evsel, cpus);
+	if (err == -EACCES)
+		return TEST_SKIP;
+
+	cpu_map__put(cpus);
+	return err ? TEST_FAIL : TEST_OK;
+}
+
+static int test_times(int (attach)(struct perf_evlist *),
+		      int (detach)(struct perf_evlist *))
+{
+	struct perf_counts_values count;
+	struct perf_evlist *evlist = NULL;
+	struct perf_evsel *evsel;
+	int err = -1, i;
+
+	evlist = perf_evlist__new();
+	if (!evlist) {
+		pr_debug("failed to create event list\n");
+		goto out_err;
+	}
+
+	err = parse_events(evlist, "cpu-clock:u", NULL);
+	if (err) {
+		pr_debug("failed to parse event cpu-clock:u\n");
+		goto out_err;
+	}
+
+	evsel = perf_evlist__last(evlist);
+	evsel->attr.read_format |=
+		PERF_FORMAT_TOTAL_TIME_ENABLED |
+		PERF_FORMAT_TOTAL_TIME_RUNNING;
+
+	err = attach(evlist);
+	if (err == TEST_SKIP) {
+		pr_debug("  SKIP  : not enough rights\n");
+		return err;
+	}
+
+	TEST_ASSERT_VAL("failed to attach", !err);
+
+	for (i = 0; i < 100000000; i++) { }
+
+	TEST_ASSERT_VAL("failed to detach", !detach(evlist));
+
+	perf_evsel__read(evsel, 0, 0, &count);
+
+	err = !(count.ena == count.run);
+
+	pr_debug("  %s: ena %" PRIu64", run %" PRIu64"\n",
+		 !err ? "OK    " : "FAILED",
+		 count.ena, count.run);
+
+out_err:
+	if (evlist)
+		perf_evlist__delete(evlist);
+	return !err ? TEST_OK : TEST_FAIL;
+}
+
+/*
+ * This test creates software event 'cpu-clock'
+ * attaches it in several ways (explained below)
+ * and checks that enabled and running times
+ * match.
+ */
+int test__event_times(int subtest __maybe_unused)
+{
+	int err, ret = 0;
+
+#define _T(attach, detach)			\
+	err = test_times(attach, detach);	\
+	if (err && (ret == TEST_OK || ret == TEST_SKIP))	\
+		ret = err;
+
+	/* attach on newly spawned process after exec */
+	_T(attach__enable_on_exec,   detach__enable_on_exec)
+	/* attach on current process as enabled */
+	_T(attach__current_enabled,  detach__disable)
+	/* attach on current process as disabled */
+	_T(attach__current_disabled, detach__disable)
+	/* attach on cpu as disabled */
+	_T(attach__cpu_disabled,     detach__disable)
+	/* attach on cpu as enabled */
+	_T(attach__cpu_enabled,      detach__disable)
+
+#undef _T
+	return ret;
+}
diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h
index 82b2b5e6ba7c..0fc946989cf0 100644
--- a/tools/perf/tests/tests.h
+++ b/tools/perf/tests/tests.h
@@ -85,6 +85,7 @@ int test__synthesize_stat_config(int subtest);
 int test__synthesize_stat(int subtest);
 int test__synthesize_stat_round(int subtest);
 int test__event_update(int subtest);
+int test__event_times(int subtest);
 
 #if defined(__arm__) || defined(__aarch64__)
 #ifdef HAVE_DWARF_UNWIND_SUPPORT
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH 1/6] perf mem: Add --ldlat option
  2016-03-24 12:52 ` [PATCH 1/6] perf mem: Add --ldlat option Jiri Olsa
@ 2016-03-24 15:57   ` Arnaldo Carvalho de Melo
  2016-03-26 16:06     ` Jiri Olsa
  0 siblings, 1 reply; 16+ messages in thread
From: Arnaldo Carvalho de Melo @ 2016-03-24 15:57 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: lkml, David Ahern, Ingo Molnar, Namhyung Kim, Peter Zijlstra,
	Stephane Eranian, Andi Kleen

Em Thu, Mar 24, 2016 at 01:52:15PM +0100, Jiri Olsa escreveu:
> Adding --ldlat option to specify desired latency
> for loads event.
> 
> Specify 50 as loads event latency:
> 
>   $ perf mem record -e ldlat-loads -v --ldlat 50 true
>   calling: record -W -d -e cpu/mem-loads,ldlat=50/P true

We have all this infrastructure to set per-event settings, on the
command line, and here we end up adding a separate command line option
to do that? Why not something like:

	perf mem record -e ldlat-loads/lat=50/ true

?

- Arnaldo
 
> Link: http://lkml.kernel.org/n/tip-ec2m0cvivkfs8uhtiv411hfc@git.kernel.org
> Signed-off-by: Jiri Olsa <jolsa@kernel.org>
> ---
>  tools/perf/Documentation/perf-mem.txt |  3 +++
>  tools/perf/builtin-mem.c              |  1 +
>  tools/perf/util/mem-events.c          | 17 ++++++++++++++++-
>  tools/perf/util/mem-events.h          |  1 +
>  4 files changed, 21 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/perf/Documentation/perf-mem.txt b/tools/perf/Documentation/perf-mem.txt
> index 43310d8661fe..6676d2784733 100644
> --- a/tools/perf/Documentation/perf-mem.txt
> +++ b/tools/perf/Documentation/perf-mem.txt
> @@ -48,6 +48,9 @@ OPTIONS
>  	option can be passed in record mode. It will be interpreted the same way as perf
>  	record.
>  
> +--ldload::
> +	Specify desired latency for loads event.
> +
>  SEE ALSO
>  --------
>  linkperf:perf-record[1], linkperf:perf-report[1]
> diff --git a/tools/perf/builtin-mem.c b/tools/perf/builtin-mem.c
> index 914f6fe192e3..bf0bfca5be20 100644
> --- a/tools/perf/builtin-mem.c
> +++ b/tools/perf/builtin-mem.c
> @@ -66,6 +66,7 @@ static int __cmd_record(int argc, const char **argv, struct perf_mem *mem)
>  	OPT_CALLBACK('e', "event", &mem, "event",
>  		     "event selector. use 'perf mem record -e list' to list available events",
>  		     parse_record_events),
> +	OPT_UINTEGER(0, "ldlat", &perf_mem_events__loads_ldlat, "mem-loads latency"),
>  	OPT_INCR('v', "verbose", &verbose,
>  		 "be more verbose (show counter open errors, etc)"),
>  	OPT_END()
> diff --git a/tools/perf/util/mem-events.c b/tools/perf/util/mem-events.c
> index e6b01e6f70a0..3ff60f08a778 100644
> --- a/tools/perf/util/mem-events.c
> +++ b/tools/perf/util/mem-events.c
> @@ -10,10 +10,12 @@
>  #include "debug.h"
>  #include "symbol.h"
>  
> +unsigned int perf_mem_events__loads_ldlat = 30;
> +
>  #define E(t, n, s) { .tag = t, .name = n, .sysfs_name = s }
>  
>  struct perf_mem_event perf_mem_events[PERF_MEM_EVENTS__MAX] = {
> -	E("ldlat-loads",	"cpu/mem-loads,ldlat=30/P",	"mem-loads"),
> +	E("ldlat-loads",	"cpu/mem-loads,ldlat=%u/P",	"mem-loads"),
>  	E("ldlat-stores",	"cpu/mem-stores/P",		"mem-stores"),
>  	E("stlb-miss-loads",	"cpu/mem-stlb-miss-loads/P",	"mem-stlb-miss-loads"),
>  	E("stlb-miss-stores",	"cpu/mem-stlb-miss-stores/P",	"mem-stlb-miss-stores"),
> @@ -39,8 +41,21 @@ struct perf_mem_event perf_mem_events[PERF_MEM_EVENTS__MAX] = {
>  
>  #undef E
>  
> +static char mem_loads_name[100];
> +static bool mem_loads_name__init;
> +
>  char *perf_mem_events__name(int i)
>  {
> +	if (i == PERF_MEM_EVENTS__LOAD) {
> +		if (!mem_loads_name__init) {
> +			mem_loads_name__init = true;
> +			scnprintf(mem_loads_name, sizeof(mem_loads_name),
> +				  perf_mem_events[i].name,
> +				  perf_mem_events__loads_ldlat);
> +		}
> +		return mem_loads_name;
> +	}
> +
>  	return (char *)perf_mem_events[i].name;
>  }
>  
> diff --git a/tools/perf/util/mem-events.h b/tools/perf/util/mem-events.h
> index de88f4267cd1..939786ffab2a 100644
> --- a/tools/perf/util/mem-events.h
> +++ b/tools/perf/util/mem-events.h
> @@ -37,6 +37,7 @@ enum {
>  };
>  
>  extern struct perf_mem_event perf_mem_events[PERF_MEM_EVENTS__MAX];
> +extern unsigned int perf_mem_events__loads_ldlat;
>  
>  int perf_mem_events__parse(const char *str);
>  int perf_mem_events__init(void);
> -- 
> 2.4.3

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 2/6] perf mem: Add -U/-K (--all-user/--all-kernel) options
  2016-03-24 12:52 ` [PATCH 2/6] perf mem: Add -U/-K (--all-user/--all-kernel) options Jiri Olsa
@ 2016-03-24 15:58   ` Arnaldo Carvalho de Melo
  2016-03-31  6:51   ` [tip:perf/core] " tip-bot for Jiri Olsa
  1 sibling, 0 replies; 16+ messages in thread
From: Arnaldo Carvalho de Melo @ 2016-03-24 15:58 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: lkml, David Ahern, Ingo Molnar, Namhyung Kim, Peter Zijlstra,
	Stephane Eranian, Andi Kleen

Em Thu, Mar 24, 2016 at 01:52:16PM +0100, Jiri Olsa escreveu:
> Add -U/-K (--all-user/--all-kernel) options to use
> the perf record --all-user/--all-kernel options.

Applying this after fixing up the clash due to the first patch not being
merged so far.
 
> Link: http://lkml.kernel.org/n/tip-adxn5c48oe0gmjrjmq6we27q@git.kernel.org
> Signed-off-by: Jiri Olsa <jolsa@kernel.org>
> ---
>  tools/perf/Documentation/perf-mem.txt |  8 ++++++++
>  tools/perf/builtin-mem.c              | 11 ++++++++++-
>  2 files changed, 18 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/perf/Documentation/perf-mem.txt b/tools/perf/Documentation/perf-mem.txt
> index 6676d2784733..f8e23f50ce59 100644
> --- a/tools/perf/Documentation/perf-mem.txt
> +++ b/tools/perf/Documentation/perf-mem.txt
> @@ -51,6 +51,14 @@ OPTIONS
>  --ldload::
>  	Specify desired latency for loads event.
>  
> +-K::
> +--all-kernel::
> +	Configure all used events to run in kernel space.
> +
> +-U::
> +--all-user::
> +	Configure all used events to run in user space.
> +
>  SEE ALSO
>  --------
>  linkperf:perf-record[1], linkperf:perf-report[1]
> diff --git a/tools/perf/builtin-mem.c b/tools/perf/builtin-mem.c
> index bf0bfca5be20..5dad76e1c8df 100644
> --- a/tools/perf/builtin-mem.c
> +++ b/tools/perf/builtin-mem.c
> @@ -62,6 +62,7 @@ static int __cmd_record(int argc, const char **argv, struct perf_mem *mem)
>  	int rec_argc, i = 0, j;
>  	const char **rec_argv;
>  	int ret;
> +	bool all_user = false, all_kernel = false;
>  	struct option options[] = {
>  	OPT_CALLBACK('e', "event", &mem, "event",
>  		     "event selector. use 'perf mem record -e list' to list available events",
> @@ -69,13 +70,15 @@ static int __cmd_record(int argc, const char **argv, struct perf_mem *mem)
>  	OPT_UINTEGER(0, "ldlat", &perf_mem_events__loads_ldlat, "mem-loads latency"),
>  	OPT_INCR('v', "verbose", &verbose,
>  		 "be more verbose (show counter open errors, etc)"),
> +	OPT_BOOLEAN('U', "--all-user", &all_user, "collect only user level data"),
> +	OPT_BOOLEAN('K', "--all-kernel", &all_kernel, "collect only kernel level data"),
>  	OPT_END()
>  	};
>  
>  	argc = parse_options(argc, argv, options, record_mem_usage,
>  			     PARSE_OPT_STOP_AT_NON_OPTION);
>  
> -	rec_argc = argc + 7; /* max number of arguments */
> +	rec_argc = argc + 9; /* max number of arguments */
>  	rec_argv = calloc(rec_argc + 1, sizeof(char *));
>  	if (!rec_argv)
>  		return -1;
> @@ -104,6 +107,12 @@ static int __cmd_record(int argc, const char **argv, struct perf_mem *mem)
>  		rec_argv[i++] = perf_mem_events__name(j);
>  	};
>  
> +	if (all_user)
> +		rec_argv[i++] = "--all-user";
> +
> +	if (all_kernel)
> +		rec_argv[i++] = "--all-kernel";
> +
>  	for (j = 0; j < argc; j++, i++)
>  		rec_argv[i] = argv[j];
>  
> -- 
> 2.4.3

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 0/6][perf/core] perf tools: Fixes
  2016-03-24 12:52 [PATCH 0/6][perf/core] perf tools: Fixes Jiri Olsa
                   ` (5 preceding siblings ...)
  2016-03-24 12:52 ` [PATCH 6/6] perf tests: Add test to check for event times Jiri Olsa
@ 2016-03-24 16:06 ` Arnaldo Carvalho de Melo
  6 siblings, 0 replies; 16+ messages in thread
From: Arnaldo Carvalho de Melo @ 2016-03-24 16:06 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: lkml, David Ahern, Ingo Molnar, Namhyung Kim, Peter Zijlstra,
	Stephane Eranian, Andi Kleen

Em Thu, Mar 24, 2016 at 01:52:14PM +0100, Jiri Olsa escreveu:
> hi,
> sending assorted fixes and leftover from previous mem patchset.
> 
> Also available in here:
>   git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
>   perf/fixes

Applied all, after adjustments, except for patch 1.

- Arnaldo
 
> thanks,
> jirka
> ---
> Jiri Olsa (6):
>       perf mem: Add --ldlat option
>       perf mem: Add -U/-K (--all-user/--all-kernel) options
>       perf tools: Make hists__collapse_insert_entry static
>       perf tools: Introduce trim function
>       perf tools: Unify -f/--force option documentation
>       perf tests: Add test to check for event times
> 
>  tools/perf/Documentation/perf-annotate.txt |   2 +-
>  tools/perf/Documentation/perf-diff.txt     |   2 +-
>  tools/perf/Documentation/perf-mem.txt      |  11 +++++
>  tools/perf/Documentation/perf-report.txt   |   2 +-
>  tools/perf/Documentation/perf-script.txt   |   4 ++
>  tools/perf/builtin-mem.c                   |  12 ++++-
>  tools/perf/tests/Build                     |   1 +
>  tools/perf/tests/builtin-test.c            |   4 ++
>  tools/perf/tests/event-times.c             | 236 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  tools/perf/tests/tests.h                   |   1 +
>  tools/perf/ui/browsers/hists.c             |   3 +-
>  tools/perf/ui/stdio/hist.c                 |   3 +-
>  tools/perf/util/hist.c                     |   5 +-
>  tools/perf/util/hist.h                     |   2 -
>  tools/perf/util/mem-events.c               |  17 ++++++-
>  tools/perf/util/mem-events.h               |   1 +
>  tools/perf/util/util.h                     |   5 ++
>  17 files changed, 298 insertions(+), 13 deletions(-)
>  create mode 100644 tools/perf/tests/event-times.c

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 1/6] perf mem: Add --ldlat option
  2016-03-24 15:57   ` Arnaldo Carvalho de Melo
@ 2016-03-26 16:06     ` Jiri Olsa
  2016-04-07 13:58       ` Jiri Olsa
  0 siblings, 1 reply; 16+ messages in thread
From: Jiri Olsa @ 2016-03-26 16:06 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Jiri Olsa, lkml, David Ahern, Ingo Molnar, Namhyung Kim,
	Peter Zijlstra, Stephane Eranian, Andi Kleen

On Thu, Mar 24, 2016 at 12:57:58PM -0300, Arnaldo Carvalho de Melo wrote:
> Em Thu, Mar 24, 2016 at 01:52:15PM +0100, Jiri Olsa escreveu:
> > Adding --ldlat option to specify desired latency
> > for loads event.
> > 
> > Specify 50 as loads event latency:
> > 
> >   $ perf mem record -e ldlat-loads -v --ldlat 50 true
> >   calling: record -W -d -e cpu/mem-loads,ldlat=50/P true
> 
> We have all this infrastructure to set per-event settings, on the
> command line, and here we end up adding a separate command line option
> to do that? Why not something like:
> 
> 	perf mem record -e ldlat-loads/lat=50/ true

will check ;-)

thanks,
jirka

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [tip:perf/core] perf mem: Add -U/-K (--all-user/--all-kernel) options
  2016-03-24 12:52 ` [PATCH 2/6] perf mem: Add -U/-K (--all-user/--all-kernel) options Jiri Olsa
  2016-03-24 15:58   ` Arnaldo Carvalho de Melo
@ 2016-03-31  6:51   ` tip-bot for Jiri Olsa
  1 sibling, 0 replies; 16+ messages in thread
From: tip-bot for Jiri Olsa @ 2016-03-31  6:51 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: mingo, ak, jolsa, a.p.zijlstra, linux-kernel, dsahern, namhyung,
	hpa, eranian, tglx, acme

Commit-ID:  ad16511b0e404652331a5350c522d0824f8209de
Gitweb:     http://git.kernel.org/tip/ad16511b0e404652331a5350c522d0824f8209de
Author:     Jiri Olsa <jolsa@kernel.org>
AuthorDate: Thu, 24 Mar 2016 13:52:16 +0100
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Wed, 30 Mar 2016 11:14:07 -0300

perf mem: Add -U/-K (--all-user/--all-kernel) options

Add -U/-K (--all-user/--all-kernel) options to use the perf record
--all-user/--all-kernel options.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1458823940-24583-3-git-send-email-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/Documentation/perf-mem.txt |  8 ++++++++
 tools/perf/builtin-mem.c              | 11 ++++++++++-
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/tools/perf/Documentation/perf-mem.txt b/tools/perf/Documentation/perf-mem.txt
index 43310d8..1d6092c 100644
--- a/tools/perf/Documentation/perf-mem.txt
+++ b/tools/perf/Documentation/perf-mem.txt
@@ -48,6 +48,14 @@ OPTIONS
 	option can be passed in record mode. It will be interpreted the same way as perf
 	record.
 
+-K::
+--all-kernel::
+	Configure all used events to run in kernel space.
+
+-U::
+--all-user::
+	Configure all used events to run in user space.
+
 SEE ALSO
 --------
 linkperf:perf-record[1], linkperf:perf-report[1]
diff --git a/tools/perf/builtin-mem.c b/tools/perf/builtin-mem.c
index 85db3be..1dc140c 100644
--- a/tools/perf/builtin-mem.c
+++ b/tools/perf/builtin-mem.c
@@ -62,19 +62,22 @@ static int __cmd_record(int argc, const char **argv, struct perf_mem *mem)
 	int rec_argc, i = 0, j;
 	const char **rec_argv;
 	int ret;
+	bool all_user = false, all_kernel = false;
 	struct option options[] = {
 	OPT_CALLBACK('e', "event", &mem, "event",
 		     "event selector. use 'perf mem record -e list' to list available events",
 		     parse_record_events),
 	OPT_INCR('v', "verbose", &verbose,
 		 "be more verbose (show counter open errors, etc)"),
+	OPT_BOOLEAN('U', "--all-user", &all_user, "collect only user level data"),
+	OPT_BOOLEAN('K', "--all-kernel", &all_kernel, "collect only kernel level data"),
 	OPT_END()
 	};
 
 	argc = parse_options(argc, argv, options, record_mem_usage,
 			     PARSE_OPT_STOP_AT_NON_OPTION);
 
-	rec_argc = argc + 7; /* max number of arguments */
+	rec_argc = argc + 9; /* max number of arguments */
 	rec_argv = calloc(rec_argc + 1, sizeof(char *));
 	if (!rec_argv)
 		return -1;
@@ -103,6 +106,12 @@ static int __cmd_record(int argc, const char **argv, struct perf_mem *mem)
 		rec_argv[i++] = perf_mem_events__name(j);
 	};
 
+	if (all_user)
+		rec_argv[i++] = "--all-user";
+
+	if (all_kernel)
+		rec_argv[i++] = "--all-kernel";
+
 	for (j = 0; j < argc; j++, i++)
 		rec_argv[i] = argv[j];
 

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [tip:perf/core] perf tools: Make hists__collapse_insert_entry static
  2016-03-24 12:52 ` [PATCH 3/6] perf tools: Make hists__collapse_insert_entry static Jiri Olsa
@ 2016-03-31  6:52   ` tip-bot for Jiri Olsa
  0 siblings, 0 replies; 16+ messages in thread
From: tip-bot for Jiri Olsa @ 2016-03-31  6:52 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: namhyung, eranian, hpa, mingo, tglx, dsahern, acme, jolsa, ak,
	linux-kernel, a.p.zijlstra

Commit-ID:  592dac6f35cf222a7687d4ff1ea7df0e6ef722e0
Gitweb:     http://git.kernel.org/tip/592dac6f35cf222a7687d4ff1ea7df0e6ef722e0
Author:     Jiri Olsa <jolsa@kernel.org>
AuthorDate: Thu, 24 Mar 2016 13:52:17 +0100
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Wed, 30 Mar 2016 11:14:07 -0300

perf tools: Make hists__collapse_insert_entry static

No need to export hists__collapse_insert_entry function.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1458823940-24583-4-git-send-email-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/hist.c | 5 +++--
 tools/perf/util/hist.h | 2 --
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
index 31c4641..3d34c57 100644
--- a/tools/perf/util/hist.c
+++ b/tools/perf/util/hist.c
@@ -1295,8 +1295,9 @@ static int hists__hierarchy_insert_entry(struct hists *hists,
 	return ret;
 }
 
-int hists__collapse_insert_entry(struct hists *hists, struct rb_root *root,
-				 struct hist_entry *he)
+static int hists__collapse_insert_entry(struct hists *hists,
+					struct rb_root *root,
+					struct hist_entry *he)
 {
 	struct rb_node **p = &root->rb_node;
 	struct rb_node *parent = NULL;
diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h
index bec0cd6..5885965 100644
--- a/tools/perf/util/hist.h
+++ b/tools/perf/util/hist.h
@@ -199,8 +199,6 @@ int hists__init(void);
 int __hists__init(struct hists *hists, struct perf_hpp_list *hpp_list);
 
 struct rb_root *hists__get_rotate_entries_in(struct hists *hists);
-int hists__collapse_insert_entry(struct hists *hists,
-				  struct rb_root *root, struct hist_entry *he);
 
 struct perf_hpp {
 	char *buf;

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [tip:perf/core] perf tools: Make -f/--force option documentation consistent across tools
  2016-03-24 12:52 ` [PATCH 5/6] perf tools: Unify -f/--force option documentation Jiri Olsa
@ 2016-03-31  6:52   ` tip-bot for Jiri Olsa
  0 siblings, 0 replies; 16+ messages in thread
From: tip-bot for Jiri Olsa @ 2016-03-31  6:52 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: acme, namhyung, ak, mingo, tglx, dsahern, a.p.zijlstra,
	linux-kernel, jolsa, hpa, eranian

Commit-ID:  e0be62cc0325d65e1b7ae55d23e3d224638c20a6
Gitweb:     http://git.kernel.org/tip/e0be62cc0325d65e1b7ae55d23e3d224638c20a6
Author:     Jiri Olsa <jolsa@kernel.org>
AuthorDate: Thu, 24 Mar 2016 13:52:19 +0100
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Wed, 30 Mar 2016 11:14:08 -0300

perf tools: Make -f/--force option documentation consistent across tools

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1458823940-24583-6-git-send-email-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/Documentation/perf-annotate.txt | 2 +-
 tools/perf/Documentation/perf-diff.txt     | 2 +-
 tools/perf/Documentation/perf-report.txt   | 2 +-
 tools/perf/Documentation/perf-script.txt   | 4 ++++
 4 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/tools/perf/Documentation/perf-annotate.txt b/tools/perf/Documentation/perf-annotate.txt
index e9cd39a..778f54d 100644
--- a/tools/perf/Documentation/perf-annotate.txt
+++ b/tools/perf/Documentation/perf-annotate.txt
@@ -33,7 +33,7 @@ OPTIONS
 
 -f::
 --force::
-        Don't complain, do it.
+        Don't do ownership validation.
 
 -v::
 --verbose::
diff --git a/tools/perf/Documentation/perf-diff.txt b/tools/perf/Documentation/perf-diff.txt
index d1deb57..3e9490b 100644
--- a/tools/perf/Documentation/perf-diff.txt
+++ b/tools/perf/Documentation/perf-diff.txt
@@ -75,7 +75,7 @@ OPTIONS
 
 -f::
 --force::
-       Don't complain, do it.
+        Don't do ownership validation.
 
 --symfs=<directory>::
         Look for files with symbols relative to this directory.
diff --git a/tools/perf/Documentation/perf-report.txt b/tools/perf/Documentation/perf-report.txt
index 1211399..496d42c 100644
--- a/tools/perf/Documentation/perf-report.txt
+++ b/tools/perf/Documentation/perf-report.txt
@@ -285,7 +285,7 @@ OPTIONS
 
 -f::
 --force::
-        Don't complain, do it.
+        Don't do ownership validation.
 
 --symfs=<directory>::
         Look for files with symbols relative to this directory.
diff --git a/tools/perf/Documentation/perf-script.txt b/tools/perf/Documentation/perf-script.txt
index 382ddfb..22ef393 100644
--- a/tools/perf/Documentation/perf-script.txt
+++ b/tools/perf/Documentation/perf-script.txt
@@ -262,6 +262,10 @@ include::itrace.txt[]
 --ns::
 	Use 9 decimal places when displaying time (i.e. show the nanoseconds)
 
+-f::
+--force::
+	Don't do ownership validation.
+
 SEE ALSO
 --------
 linkperf:perf-record[1], linkperf:perf-script-perl[1],

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [tip:perf/core] perf tests: Add test to check for event times
  2016-03-24 12:52 ` [PATCH 6/6] perf tests: Add test to check for event times Jiri Olsa
@ 2016-03-31  6:52   ` tip-bot for Jiri Olsa
  0 siblings, 0 replies; 16+ messages in thread
From: tip-bot for Jiri Olsa @ 2016-03-31  6:52 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: ak, dsahern, mingo, a.p.zijlstra, hpa, jolsa, linux-kernel,
	namhyung, tglx, acme, eranian

Commit-ID:  b31d660df37c1701fd18d526faeb9a86f0fc7dd2
Gitweb:     http://git.kernel.org/tip/b31d660df37c1701fd18d526faeb9a86f0fc7dd2
Author:     Jiri Olsa <jolsa@kernel.org>
AuthorDate: Thu, 24 Mar 2016 13:52:20 +0100
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Wed, 30 Mar 2016 11:14:08 -0300

perf tests: Add test to check for event times

This test creates software event 'cpu-clock' attaches it in several ways
and checks that enabled and running times match.

Committer notes:

Testing it:

  [acme@jouet linux]$ perf test -v times
  44: Test events times                                        :
  --- start ---
  test child forked, pid 27170
  attaching to spawned child, enable on exec
    OK    : ena 307328, run 307328
  attaching to current thread as enabled
    OK    : ena 7826, run 7826
  attaching to current thread as disabled
    OK    : ena 738, run 738
  attaching to CPU 0 as enabled
    SKIP  : not enough rights
  attaching to CPU 0 as enabled
    SKIP  : not enough rights
  test child finished with -2
  ---- end ----
  Test events times: Skip
  [acme@jouet linux]$

  [root@jouet ~]# perf test times
  44: Test events times                                        : Ok
  [root@jouet ~]# perf test -v times
  44: Test events times                                        :
  --- start ---
  test child forked, pid 27306
  attaching to spawned child, enable on exec
    OK    : ena 479290, run 479290
  attaching to current thread as enabled
    OK    : ena 11356, run 11356
  attaching to current thread as disabled
    OK    : ena 987, run 987
  attaching to CPU 0 as enabled
    OK    : ena 3717, run 3717
  attaching to CPU 0 as enabled
    OK    : ena 2323, run 2323
  test child finished with 0
  ---- end ----
  Test events times: Ok
  [root@jouet ~]#

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1458823940-24583-7-git-send-email-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/tests/Build          |   1 +
 tools/perf/tests/builtin-test.c |   4 +
 tools/perf/tests/event-times.c  | 236 ++++++++++++++++++++++++++++++++++++++++
 tools/perf/tests/tests.h        |   1 +
 4 files changed, 242 insertions(+)

diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build
index 1ba628e..449fe97 100644
--- a/tools/perf/tests/Build
+++ b/tools/perf/tests/Build
@@ -37,6 +37,7 @@ perf-y += topology.o
 perf-y += cpumap.o
 perf-y += stat.o
 perf-y += event_update.o
+perf-y += event-times.o
 
 $(OUTPUT)tests/llvm-src-base.c: tests/bpf-script-example.c tests/Build
 	$(call rule_mkdir)
diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c
index f2b1dca..93c4670 100644
--- a/tools/perf/tests/builtin-test.c
+++ b/tools/perf/tests/builtin-test.c
@@ -204,6 +204,10 @@ static struct test generic_tests[] = {
 		.func = test__event_update,
 	},
 	{
+		.desc = "Test events times",
+		.func = test__event_times,
+	},
+	{
 		.func = NULL,
 	},
 };
diff --git a/tools/perf/tests/event-times.c b/tools/perf/tests/event-times.c
new file mode 100644
index 0000000..95fb744
--- /dev/null
+++ b/tools/perf/tests/event-times.c
@@ -0,0 +1,236 @@
+#include <linux/compiler.h>
+#include <string.h>
+#include "tests.h"
+#include "evlist.h"
+#include "evsel.h"
+#include "util.h"
+#include "debug.h"
+#include "thread_map.h"
+#include "target.h"
+
+static int attach__enable_on_exec(struct perf_evlist *evlist)
+{
+	struct perf_evsel *evsel = perf_evlist__last(evlist);
+	struct target target = {
+		.uid = UINT_MAX,
+	};
+	const char *argv[] = { "true", NULL, };
+	char sbuf[STRERR_BUFSIZE];
+	int err;
+
+	pr_debug("attaching to spawned child, enable on exec\n");
+
+	err = perf_evlist__create_maps(evlist, &target);
+	if (err < 0) {
+		pr_debug("Not enough memory to create thread/cpu maps\n");
+		return err;
+	}
+
+	err = perf_evlist__prepare_workload(evlist, &target, argv, false, NULL);
+	if (err < 0) {
+		pr_debug("Couldn't run the workload!\n");
+		return err;
+	}
+
+	evsel->attr.enable_on_exec = 1;
+
+	err = perf_evlist__open(evlist);
+	if (err < 0) {
+		pr_debug("perf_evlist__open: %s\n",
+			 strerror_r(errno, sbuf, sizeof(sbuf)));
+		return err;
+	}
+
+	return perf_evlist__start_workload(evlist) == 1 ? TEST_OK : TEST_FAIL;
+}
+
+static int detach__enable_on_exec(struct perf_evlist *evlist)
+{
+	waitpid(evlist->workload.pid, NULL, 0);
+	return 0;
+}
+
+static int attach__current_disabled(struct perf_evlist *evlist)
+{
+	struct perf_evsel *evsel = perf_evlist__last(evlist);
+	struct thread_map *threads;
+	int err;
+
+	pr_debug("attaching to current thread as disabled\n");
+
+	threads = thread_map__new(-1, getpid(), UINT_MAX);
+	if (threads == NULL) {
+		pr_debug("thread_map__new\n");
+		return -1;
+	}
+
+	evsel->attr.disabled = 1;
+
+	err = perf_evsel__open_per_thread(evsel, threads);
+	if (err) {
+		pr_debug("Failed to open event cpu-clock:u\n");
+		return err;
+	}
+
+	thread_map__put(threads);
+	return perf_evsel__enable(evsel) == 0 ? TEST_OK : TEST_FAIL;
+}
+
+static int attach__current_enabled(struct perf_evlist *evlist)
+{
+	struct perf_evsel *evsel = perf_evlist__last(evlist);
+	struct thread_map *threads;
+	int err;
+
+	pr_debug("attaching to current thread as enabled\n");
+
+	threads = thread_map__new(-1, getpid(), UINT_MAX);
+	if (threads == NULL) {
+		pr_debug("failed to call thread_map__new\n");
+		return -1;
+	}
+
+	err = perf_evsel__open_per_thread(evsel, threads);
+
+	thread_map__put(threads);
+	return err == 0 ? TEST_OK : TEST_FAIL;
+}
+
+static int detach__disable(struct perf_evlist *evlist)
+{
+	struct perf_evsel *evsel = perf_evlist__last(evlist);
+
+	return perf_evsel__enable(evsel);
+}
+
+static int attach__cpu_disabled(struct perf_evlist *evlist)
+{
+	struct perf_evsel *evsel = perf_evlist__last(evlist);
+	struct cpu_map *cpus;
+	int err;
+
+	pr_debug("attaching to CPU 0 as enabled\n");
+
+	cpus = cpu_map__new("0");
+	if (cpus == NULL) {
+		pr_debug("failed to call cpu_map__new\n");
+		return -1;
+	}
+
+	evsel->attr.disabled = 1;
+
+	err = perf_evsel__open_per_cpu(evsel, cpus);
+	if (err) {
+		if (err == -EACCES)
+			return TEST_SKIP;
+
+		pr_debug("Failed to open event cpu-clock:u\n");
+		return err;
+	}
+
+	cpu_map__put(cpus);
+	return perf_evsel__enable(evsel);
+}
+
+static int attach__cpu_enabled(struct perf_evlist *evlist)
+{
+	struct perf_evsel *evsel = perf_evlist__last(evlist);
+	struct cpu_map *cpus;
+	int err;
+
+	pr_debug("attaching to CPU 0 as enabled\n");
+
+	cpus = cpu_map__new("0");
+	if (cpus == NULL) {
+		pr_debug("failed to call cpu_map__new\n");
+		return -1;
+	}
+
+	err = perf_evsel__open_per_cpu(evsel, cpus);
+	if (err == -EACCES)
+		return TEST_SKIP;
+
+	cpu_map__put(cpus);
+	return err ? TEST_FAIL : TEST_OK;
+}
+
+static int test_times(int (attach)(struct perf_evlist *),
+		      int (detach)(struct perf_evlist *))
+{
+	struct perf_counts_values count;
+	struct perf_evlist *evlist = NULL;
+	struct perf_evsel *evsel;
+	int err = -1, i;
+
+	evlist = perf_evlist__new();
+	if (!evlist) {
+		pr_debug("failed to create event list\n");
+		goto out_err;
+	}
+
+	err = parse_events(evlist, "cpu-clock:u", NULL);
+	if (err) {
+		pr_debug("failed to parse event cpu-clock:u\n");
+		goto out_err;
+	}
+
+	evsel = perf_evlist__last(evlist);
+	evsel->attr.read_format |=
+		PERF_FORMAT_TOTAL_TIME_ENABLED |
+		PERF_FORMAT_TOTAL_TIME_RUNNING;
+
+	err = attach(evlist);
+	if (err == TEST_SKIP) {
+		pr_debug("  SKIP  : not enough rights\n");
+		return err;
+	}
+
+	TEST_ASSERT_VAL("failed to attach", !err);
+
+	for (i = 0; i < 100000000; i++) { }
+
+	TEST_ASSERT_VAL("failed to detach", !detach(evlist));
+
+	perf_evsel__read(evsel, 0, 0, &count);
+
+	err = !(count.ena == count.run);
+
+	pr_debug("  %s: ena %" PRIu64", run %" PRIu64"\n",
+		 !err ? "OK    " : "FAILED",
+		 count.ena, count.run);
+
+out_err:
+	if (evlist)
+		perf_evlist__delete(evlist);
+	return !err ? TEST_OK : TEST_FAIL;
+}
+
+/*
+ * This test creates software event 'cpu-clock'
+ * attaches it in several ways (explained below)
+ * and checks that enabled and running times
+ * match.
+ */
+int test__event_times(int subtest __maybe_unused)
+{
+	int err, ret = 0;
+
+#define _T(attach, detach)			\
+	err = test_times(attach, detach);	\
+	if (err && (ret == TEST_OK || ret == TEST_SKIP))	\
+		ret = err;
+
+	/* attach on newly spawned process after exec */
+	_T(attach__enable_on_exec,   detach__enable_on_exec)
+	/* attach on current process as enabled */
+	_T(attach__current_enabled,  detach__disable)
+	/* attach on current process as disabled */
+	_T(attach__current_disabled, detach__disable)
+	/* attach on cpu as disabled */
+	_T(attach__cpu_disabled,     detach__disable)
+	/* attach on cpu as enabled */
+	_T(attach__cpu_enabled,      detach__disable)
+
+#undef _T
+	return ret;
+}
diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h
index 82b2b5e..0fc9469 100644
--- a/tools/perf/tests/tests.h
+++ b/tools/perf/tests/tests.h
@@ -85,6 +85,7 @@ int test__synthesize_stat_config(int subtest);
 int test__synthesize_stat(int subtest);
 int test__synthesize_stat_round(int subtest);
 int test__event_update(int subtest);
+int test__event_times(int subtest);
 
 #if defined(__arm__) || defined(__aarch64__)
 #ifdef HAVE_DWARF_UNWIND_SUPPORT

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH 1/6] perf mem: Add --ldlat option
  2016-03-26 16:06     ` Jiri Olsa
@ 2016-04-07 13:58       ` Jiri Olsa
  0 siblings, 0 replies; 16+ messages in thread
From: Jiri Olsa @ 2016-04-07 13:58 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Jiri Olsa, lkml, David Ahern, Ingo Molnar, Namhyung Kim,
	Peter Zijlstra, Stephane Eranian, Andi Kleen

On Sat, Mar 26, 2016 at 05:06:38PM +0100, Jiri Olsa wrote:
> On Thu, Mar 24, 2016 at 12:57:58PM -0300, Arnaldo Carvalho de Melo wrote:
> > Em Thu, Mar 24, 2016 at 01:52:15PM +0100, Jiri Olsa escreveu:
> > > Adding --ldlat option to specify desired latency
> > > for loads event.
> > > 
> > > Specify 50 as loads event latency:
> > > 
> > >   $ perf mem record -e ldlat-loads -v --ldlat 50 true
> > >   calling: record -W -d -e cpu/mem-loads,ldlat=50/P true
> > 
> > We have all this infrastructure to set per-event settings, on the
> > command line, and here we end up adding a separate command line option
> > to do that? Why not something like:
> > 
> > 	perf mem record -e ldlat-loads/lat=50/ true
> 
> will check ;-)

sry for delay..

the thing is, that we can already do that via record command:
  perf record -e "cpu/mem-loads,ldlat=30/" ls

but this option is in perf mem command, which provides
the way to use short config:
   $ perf mem record --ldlat 50 ls

and adds also '-W -d' options for record command:

  $ ./perf mem record -v --ldlat 50 ls 
  calling: record -W -d -e cpu/mem-loads,ldlat=50/P ls 

jirka

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2016-04-07 13:58 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-24 12:52 [PATCH 0/6][perf/core] perf tools: Fixes Jiri Olsa
2016-03-24 12:52 ` [PATCH 1/6] perf mem: Add --ldlat option Jiri Olsa
2016-03-24 15:57   ` Arnaldo Carvalho de Melo
2016-03-26 16:06     ` Jiri Olsa
2016-04-07 13:58       ` Jiri Olsa
2016-03-24 12:52 ` [PATCH 2/6] perf mem: Add -U/-K (--all-user/--all-kernel) options Jiri Olsa
2016-03-24 15:58   ` Arnaldo Carvalho de Melo
2016-03-31  6:51   ` [tip:perf/core] " tip-bot for Jiri Olsa
2016-03-24 12:52 ` [PATCH 3/6] perf tools: Make hists__collapse_insert_entry static Jiri Olsa
2016-03-31  6:52   ` [tip:perf/core] " tip-bot for Jiri Olsa
2016-03-24 12:52 ` [PATCH 4/6] perf tools: Introduce trim function Jiri Olsa
2016-03-24 12:52 ` [PATCH 5/6] perf tools: Unify -f/--force option documentation Jiri Olsa
2016-03-31  6:52   ` [tip:perf/core] perf tools: Make -f/--force option documentation consistent across tools tip-bot for Jiri Olsa
2016-03-24 12:52 ` [PATCH 6/6] perf tests: Add test to check for event times Jiri Olsa
2016-03-31  6:52   ` [tip:perf/core] " tip-bot for Jiri Olsa
2016-03-24 16:06 ` [PATCH 0/6][perf/core] perf tools: Fixes Arnaldo Carvalho de Melo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox