linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [GIT PULL 00/16] perf/core improvements and fixes
@ 2015-08-25 16:14 Arnaldo Carvalho de Melo
  2015-08-25 16:14 ` [PATCH 01/16] perf tools: Fix tarball build broken by pt/bts Arnaldo Carvalho de Melo
                   ` (16 more replies)
  0 siblings, 17 replies; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-08-25 16:14 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Borislav Petkov, David Ahern, Frederic Weisbecker, Jiri Olsa,
	Masami Hiramatsu, Namhyung Kim, pi3orama, Stephane Eranian,
	Wang Nan, Arnaldo Carvalho de Melo

Hi Ingo,

	Please consider pulling, now to get back looking at eBPF :-)

- Arnaldo

The following changes since commit 0e53909a1cf0153736fb52c216558a65530d8c40:

  Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-08-22 08:45:46 +0200)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo

for you to fetch changes up to 1cbebfc7abb549ed3f4080e12c4d7b07d1f16637:

  perf probe: Support probing at absolute addresses (2015-08-25 12:36:22 -0300)

----------------------------------------------------------------
perf/core improvements and fixes:

User visible:

- Add support for using several Intel PT features (CYC, MTC packets), the
  relevant documentation was updated: tools/perf/Documentation/intel-pt.txt,
  briefly describing those packets, its purposes, how to configure them in
  the event config terms and relevant external documentation for further
  reading. (Adrian Hunter)

- Introduce support for probing at an absolut address, for user and kernel
  'perf probe's, useful when one have the symbol maps on a developer machine
  but not on an embedded system (Wang Nan)

- Clear the progress bar at the end of a ordered_events flush, fixing
  an UI artifact when, after ordering the events the screen doesn't get
  completely redraw, for instance, when an error window covers just the
  center of the screen and waits for user input. (Arnaldo Carvalho de Melo)

- Fix 'annotate' segfault by resetting the dso find_symbol cache when removing
  symbols (Arnaldo Carvalho de Melo)

Infrastructure:

- Fix Intel PT 'instructions' sample period (Adrian Hunter)

- Prevent segfault when reading probe point with absolute address (Wang Nan)

Build fixes:

- Fix tarball build broken by pt/bts (Adrian Hunter)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Adrian Hunter (11):
      perf tools: Fix tarball build broken by pt/bts
      perf tools: Fix Intel PT 'instructions' sample period
      perf tools: Add Intel PT support for PSB periods
      perf tools: Add new Intel PT packet definitions
      perf tools: Pass Intel PT information for decoding MTC and CYC
      perf tools: Add Intel PT support for decoding MTC packets
      perf tools: Add Intel PT support for using MTC packets
      perf tools: Add Intel PT support for decoding CYC packets
      perf tools: Add Intel PT support for using CYC packets
      perf tools: Add Intel PT support for decoding TRACESTOP packets
      perf tools: Update Intel PT documentation

Arnaldo Carvalho de Melo (3):
      perf annotate: Reset the dso find_symbol cache when removing symbols
      perf ui tui progress: Implement the ui_progress_ops->finish() method
      perf ordered_events: Clear the progress bar at the end of a flush

Wang Nan (2):
      perf probe: Prevent segfault when reading probe point with absolute address
      perf probe: Support probing at absolute addresses

 tools/perf/Documentation/intel-pt.txt              | 194 ++++++-
 tools/perf/arch/x86/util/intel-pt.c                | 271 +++++++++-
 tools/perf/builtin-annotate.c                      |   1 +
 tools/perf/ui/tui/progress.c                       |  19 +-
 tools/perf/util/dso.h                              |   2 +
 tools/perf/util/intel-pt-decoder/inat.c            |   2 +-
 tools/perf/util/intel-pt-decoder/inat.h            |   2 +-
 tools/perf/util/intel-pt-decoder/inat_types.h      |  29 ++
 tools/perf/util/intel-pt-decoder/insn.c            |   4 +-
 tools/perf/util/intel-pt-decoder/insn.h            |   2 +-
 .../perf/util/intel-pt-decoder/intel-pt-decoder.c  | 555 ++++++++++++++++++++-
 .../perf/util/intel-pt-decoder/intel-pt-decoder.h  |   5 +
 .../util/intel-pt-decoder/intel-pt-insn-decoder.c  |   2 +-
 .../util/intel-pt-decoder/intel-pt-pkt-decoder.c   | 142 +++++-
 .../util/intel-pt-decoder/intel-pt-pkt-decoder.h   |   6 +
 tools/perf/util/intel-pt.c                         |  67 ++-
 tools/perf/util/intel-pt.h                         |   5 +
 tools/perf/util/ordered-events.c                   |   3 +
 tools/perf/util/probe-event.c                      | 152 +++++-
 tools/perf/util/probe-event.h                      |   3 +
 tools/perf/util/probe-finder.c                     |  21 +-
 tools/perf/util/symbol.c                           |  10 +
 22 files changed, 1404 insertions(+), 93 deletions(-)
 create mode 100644 tools/perf/util/intel-pt-decoder/inat_types.h

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

* [PATCH 01/16] perf tools: Fix tarball build broken by pt/bts
  2015-08-25 16:14 [GIT PULL 00/16] perf/core improvements and fixes Arnaldo Carvalho de Melo
@ 2015-08-25 16:14 ` Arnaldo Carvalho de Melo
  2015-08-25 16:14 ` [PATCH 02/16] perf annotate: Reset the dso find_symbol cache when removing symbols Arnaldo Carvalho de Melo
                   ` (15 subsequent siblings)
  16 siblings, 0 replies; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-08-25 16:14 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Adrian Hunter, Jiri Olsa, Arnaldo Carvalho de Melo

From: Adrian Hunter <adrian.hunter@intel.com>

Fix some include paths and add missing inat_types.h.

Reported-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Link: http://lkml.kernel.org/r/55D77696.60102@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/intel-pt-decoder/inat.c            |  2 +-
 tools/perf/util/intel-pt-decoder/inat.h            |  2 +-
 tools/perf/util/intel-pt-decoder/inat_types.h      | 29 ++++++++++++++++++++++
 tools/perf/util/intel-pt-decoder/insn.c            |  4 +--
 tools/perf/util/intel-pt-decoder/insn.h            |  2 +-
 .../util/intel-pt-decoder/intel-pt-insn-decoder.c  |  2 +-
 6 files changed, 35 insertions(+), 6 deletions(-)
 create mode 100644 tools/perf/util/intel-pt-decoder/inat_types.h

diff --git a/tools/perf/util/intel-pt-decoder/inat.c b/tools/perf/util/intel-pt-decoder/inat.c
index feeaa509dfe4..906d94aa0a24 100644
--- a/tools/perf/util/intel-pt-decoder/inat.c
+++ b/tools/perf/util/intel-pt-decoder/inat.c
@@ -18,7 +18,7 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  *
  */
-#include <asm/insn.h>
+#include "insn.h"
 
 /* Attribute tables are generated from opcode map */
 #include "inat-tables.c"
diff --git a/tools/perf/util/intel-pt-decoder/inat.h b/tools/perf/util/intel-pt-decoder/inat.h
index 74a2e312e8a2..611645e903a8 100644
--- a/tools/perf/util/intel-pt-decoder/inat.h
+++ b/tools/perf/util/intel-pt-decoder/inat.h
@@ -20,7 +20,7 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  *
  */
-#include <asm/inat_types.h>
+#include "inat_types.h"
 
 /*
  * Internal bits. Don't use bitmasks directly, because these bits are
diff --git a/tools/perf/util/intel-pt-decoder/inat_types.h b/tools/perf/util/intel-pt-decoder/inat_types.h
new file mode 100644
index 000000000000..cb3c20ce39cf
--- /dev/null
+++ b/tools/perf/util/intel-pt-decoder/inat_types.h
@@ -0,0 +1,29 @@
+#ifndef _ASM_X86_INAT_TYPES_H
+#define _ASM_X86_INAT_TYPES_H
+/*
+ * x86 instruction attributes
+ *
+ * Written by Masami Hiramatsu <mhiramat@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+/* Instruction attributes */
+typedef unsigned int insn_attr_t;
+typedef unsigned char insn_byte_t;
+typedef signed int insn_value_t;
+
+#endif
diff --git a/tools/perf/util/intel-pt-decoder/insn.c b/tools/perf/util/intel-pt-decoder/insn.c
index 8f72b334aea0..47314a64399c 100644
--- a/tools/perf/util/intel-pt-decoder/insn.c
+++ b/tools/perf/util/intel-pt-decoder/insn.c
@@ -23,8 +23,8 @@
 #else
 #include <string.h>
 #endif
-#include <asm/inat.h>
-#include <asm/insn.h>
+#include "inat.h"
+#include "insn.h"
 
 /* Verify next sizeof(t) bytes can be on the same instruction */
 #define validate_next(t, insn, n)	\
diff --git a/tools/perf/util/intel-pt-decoder/insn.h b/tools/perf/util/intel-pt-decoder/insn.h
index e7814b74caf8..dd12da0f4593 100644
--- a/tools/perf/util/intel-pt-decoder/insn.h
+++ b/tools/perf/util/intel-pt-decoder/insn.h
@@ -21,7 +21,7 @@
  */
 
 /* insn_attr_t is defined in inat.h */
-#include <asm/inat.h>
+#include "inat.h"
 
 struct insn_field {
 	union {
diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-insn-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-insn-decoder.c
index 46980fc663ac..9e4eb8fcd559 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-insn-decoder.c
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-insn-decoder.c
@@ -20,7 +20,7 @@
 
 #include "event.h"
 
-#include <asm/insn.h>
+#include "insn.h"
 
 #include "inat.c"
 #include "insn.c"
-- 
2.1.0


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

* [PATCH 02/16] perf annotate: Reset the dso find_symbol cache when removing symbols
  2015-08-25 16:14 [GIT PULL 00/16] perf/core improvements and fixes Arnaldo Carvalho de Melo
  2015-08-25 16:14 ` [PATCH 01/16] perf tools: Fix tarball build broken by pt/bts Arnaldo Carvalho de Melo
@ 2015-08-25 16:14 ` Arnaldo Carvalho de Melo
  2015-08-25 16:14 ` [PATCH 03/16] perf ui tui progress: Implement the ui_progress_ops->finish() method Arnaldo Carvalho de Melo
                   ` (14 subsequent siblings)
  16 siblings, 0 replies; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-08-25 16:14 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Borislav Petkov, David Ahern, Frederic Weisbecker, Jiri Olsa,
	Namhyung Kim, Stephane Eranian

From: Arnaldo Carvalho de Melo <acme@redhat.com>

The 'annotate' tool does some filtering in the entries in a DSO but
forgot to reset the cache done in dso__find_symbol(), cauxing a SEGV:

  [root@zoo ~]# perf annotate netlink_poll
  perf: Segmentation fault
  -------- backtrace --------
  perf[0x526ceb]
  /lib64/libc.so.6(+0x34960)[0x7faedfbe0960]
  perf(rb_erase+0x223)[0x499d63]
  perf[0x4213e9]
  perf[0x4bc123]
  perf[0x4bc621]
  perf[0x4bf26b]
  perf[0x4bc855]
  perf(perf_session__process_events+0x340)[0x4bddc0]
  perf(cmd_annotate+0x6bb)[0x421b5b]
  perf[0x479063]
  perf(main+0x60a)[0x42098a]
  /lib64/libc.so.6(__libc_start_main+0xf0)[0x7faedfbcbfe0]
  perf[0x420aa9]
  [0x0]
  [root@zoo ~]#

Fix it by reseting the find cache when removing symbols.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Fixes: b685ac22b436 ("perf symbols: Add front end cache for DSO symbol lookup")
Link: http://lkml.kernel.org/n/tip-b2y9x46y0t8yem1ive41zqyp@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-annotate.c |  1 +
 tools/perf/util/dso.h         |  2 ++
 tools/perf/util/symbol.c      | 10 ++++++++++
 3 files changed, 13 insertions(+)

diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c
index a32a64ef08e2..8edc205ff9a7 100644
--- a/tools/perf/builtin-annotate.c
+++ b/tools/perf/builtin-annotate.c
@@ -67,6 +67,7 @@ static int perf_evsel__add_sample(struct perf_evsel *evsel,
 			rb_erase(&al->sym->rb_node,
 				 &al->map->dso->symbols[al->map->type]);
 			symbol__delete(al->sym);
+			dso__reset_find_symbol_cache(al->map->dso);
 		}
 		return 0;
 	}
diff --git a/tools/perf/util/dso.h b/tools/perf/util/dso.h
index c73276db6d6f..fc8db9c764ac 100644
--- a/tools/perf/util/dso.h
+++ b/tools/perf/util/dso.h
@@ -324,6 +324,8 @@ struct dso *__dsos__findnew(struct dsos *dsos, const char *name);
 struct dso *dsos__findnew(struct dsos *dsos, const char *name);
 bool __dsos__read_build_ids(struct list_head *head, bool with_hits);
 
+void dso__reset_find_symbol_cache(struct dso *dso);
+
 size_t __dsos__fprintf_buildid(struct list_head *head, FILE *fp,
 			       bool (skip)(struct dso *dso, int parm), int parm);
 size_t __dsos__fprintf(struct list_head *head, FILE *fp);
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 42e98ab5a9bb..46ae0532a8a6 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -441,6 +441,16 @@ static struct symbol *symbols__find_by_name(struct rb_root *symbols,
 	return &s->sym;
 }
 
+void dso__reset_find_symbol_cache(struct dso *dso)
+{
+	enum map_type type;
+
+	for (type = MAP__FUNCTION; type <= MAP__VARIABLE; ++type) {
+		dso->last_find_result[type].addr   = 0;
+		dso->last_find_result[type].symbol = NULL;
+	}
+}
+
 struct symbol *dso__find_symbol(struct dso *dso,
 				enum map_type type, u64 addr)
 {
-- 
2.1.0


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

* [PATCH 03/16] perf ui tui progress: Implement the ui_progress_ops->finish() method
  2015-08-25 16:14 [GIT PULL 00/16] perf/core improvements and fixes Arnaldo Carvalho de Melo
  2015-08-25 16:14 ` [PATCH 01/16] perf tools: Fix tarball build broken by pt/bts Arnaldo Carvalho de Melo
  2015-08-25 16:14 ` [PATCH 02/16] perf annotate: Reset the dso find_symbol cache when removing symbols Arnaldo Carvalho de Melo
@ 2015-08-25 16:14 ` Arnaldo Carvalho de Melo
  2015-08-25 16:14 ` [PATCH 04/16] perf ordered_events: Clear the progress bar at the end of a flush Arnaldo Carvalho de Melo
                   ` (13 subsequent siblings)
  16 siblings, 0 replies; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-08-25 16:14 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Borislav Petkov, David Ahern, Frederic Weisbecker, Jiri Olsa,
	Namhyung Kim, Stephane Eranian

From: Arnaldo Carvalho de Melo <acme@redhat.com>

So that we can erase the progress bar after we're done with it, avoiding
things like:

-------------------------------------------------------------------

          ┌─Error:──────────────────────────────────────────────────────┐
          │Can't annotate unmapped_area_topdown:                        │
          │                                                             │
          │No vmlinux file with build id a826726b5ddacfab1f0bade868f1a79│
          │was found in the path.                                       │
          │                                                             │
          │Note that annotation using /proc/kcore requires CAP_SYS_RAWIO│
┌Processin│                                                             │──┐
│         │Please use:                                                  │  │
└─────────│                                                             │──┘
          │  perf buildid-cache -vu vmlinux                             │
          │                                                             │
          │or:                                                          │
          │                                                             │
          │  --vmlinux vmlinux                                          │
          │                                                             │
          │                                                             │
          │Press any key...                                             │
          └─────────────────────────────────────────────────────────────┘

Can't annotate unmapped_area_topdown:
-------------------------------------------------------------------

I.e. that finished progress bar behind the error window. It is not a
problem when we end up redrawing the whole screen, but its ugly when
we present such error windows, provide a TUI method so that code like
the above may avoid this situation, as will be done with the annotation
code in the next cset.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-qvktnojzwwe37pweging058t@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/ui/tui/progress.c | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/tools/perf/ui/tui/progress.c b/tools/perf/ui/tui/progress.c
index c61d14b101e0..c4b99008e2c9 100644
--- a/tools/perf/ui/tui/progress.c
+++ b/tools/perf/ui/tui/progress.c
@@ -33,9 +33,26 @@ static void tui_progress__update(struct ui_progress *p)
 	pthread_mutex_unlock(&ui__lock);
 }
 
+static void tui_progress__finish(void)
+{
+	int y;
+
+	if (use_browser <= 0)
+		return;
+
+	ui__refresh_dimensions(false);
+	pthread_mutex_lock(&ui__lock);
+	y = SLtt_Screen_Rows / 2 - 2;
+	SLsmg_set_color(0);
+	SLsmg_fill_region(y, 0, 3, SLtt_Screen_Cols, ' ');
+	SLsmg_refresh();
+	pthread_mutex_unlock(&ui__lock);
+}
+
 static struct ui_progress_ops tui_progress__ops =
 {
-	.update		= tui_progress__update,
+	.update = tui_progress__update,
+	.finish = tui_progress__finish,
 };
 
 void tui_progress__init(void)
-- 
2.1.0


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

* [PATCH 04/16] perf ordered_events: Clear the progress bar at the end of a flush
  2015-08-25 16:14 [GIT PULL 00/16] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (2 preceding siblings ...)
  2015-08-25 16:14 ` [PATCH 03/16] perf ui tui progress: Implement the ui_progress_ops->finish() method Arnaldo Carvalho de Melo
@ 2015-08-25 16:14 ` Arnaldo Carvalho de Melo
  2015-08-25 16:14 ` [PATCH 05/16] perf tools: Fix Intel PT 'instructions' sample period Arnaldo Carvalho de Melo
                   ` (12 subsequent siblings)
  16 siblings, 0 replies; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-08-25 16:14 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Borislav Petkov, David Ahern, Frederic Weisbecker, Jiri Olsa,
	Namhyung Kim, Stephane Eranian

From: Arnaldo Carvalho de Melo <acme@redhat.com>

We were depending on the next screen operation after a flush() being
one that would redraw the whole screen so that the progress bar would
be overwritten, when that didn't happen a screen artifact of, say, a
error dialog window would be overlaid on top of the progress bar, fix
it by calling ui_browser__finish(), that now has a TUI implementation.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-el0fyw6duemnx62lydjzhs8c@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/ordered-events.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/tools/perf/util/ordered-events.c b/tools/perf/util/ordered-events.c
index 52be201b9b25..b1b9e2385f4b 100644
--- a/tools/perf/util/ordered-events.c
+++ b/tools/perf/util/ordered-events.c
@@ -220,6 +220,9 @@ static int __ordered_events__flush(struct ordered_events *oe)
 	else if (last_ts <= limit)
 		oe->last = list_entry(head->prev, struct ordered_event, list);
 
+	if (show_progress)
+		ui_progress__finish();
+
 	return 0;
 }
 
-- 
2.1.0


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

* [PATCH 05/16] perf tools: Fix Intel PT 'instructions' sample period
  2015-08-25 16:14 [GIT PULL 00/16] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (3 preceding siblings ...)
  2015-08-25 16:14 ` [PATCH 04/16] perf ordered_events: Clear the progress bar at the end of a flush Arnaldo Carvalho de Melo
@ 2015-08-25 16:14 ` Arnaldo Carvalho de Melo
  2015-08-25 16:14 ` [PATCH 06/16] perf tools: Add Intel PT support for PSB periods Arnaldo Carvalho de Melo
                   ` (11 subsequent siblings)
  16 siblings, 0 replies; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-08-25 16:14 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Adrian Hunter, Jiri Olsa, Arnaldo Carvalho de Melo

From: Adrian Hunter <adrian.hunter@intel.com>

The period on synthesized 'instructions' samples was being set to a
fixed value, whereas the correct value is the number of instructions
since the last sample, which is a value that the decoder can provide.
So do it that way.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1437150840-31811-14-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/intel-pt-decoder/intel-pt-decoder.c | 3 +++
 tools/perf/util/intel-pt-decoder/intel-pt-decoder.h | 1 +
 tools/perf/util/intel-pt.c                          | 5 ++++-
 3 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
index f8ac462fec1a..56790ea1e88e 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
@@ -108,6 +108,7 @@ struct intel_pt_decoder {
 	uint64_t sign_bits;
 	uint64_t period;
 	enum intel_pt_period_type period_type;
+	uint64_t tot_insn_cnt;
 	uint64_t period_insn_cnt;
 	uint64_t period_mask;
 	uint64_t period_ticks;
@@ -559,6 +560,7 @@ static int intel_pt_walk_insn(struct intel_pt_decoder *decoder,
 	err = decoder->walk_insn(intel_pt_insn, &insn_cnt, &decoder->ip, ip,
 				 max_insn_cnt, decoder->data);
 
+	decoder->tot_insn_cnt += insn_cnt;
 	decoder->timestamp_insn_cnt += insn_cnt;
 	decoder->period_insn_cnt += insn_cnt;
 
@@ -1529,6 +1531,7 @@ const struct intel_pt_state *intel_pt_decode(struct intel_pt_decoder *decoder)
 	decoder->state.timestamp = decoder->timestamp;
 	decoder->state.est_timestamp = intel_pt_est_timestamp(decoder);
 	decoder->state.cr3 = decoder->cr3;
+	decoder->state.tot_insn_cnt = decoder->tot_insn_cnt;
 
 	if (err)
 		decoder->state.from_ip = decoder->ip;
diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h
index 4c4880230cc9..cbf57044c385 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h
@@ -58,6 +58,7 @@ struct intel_pt_state {
 	uint64_t from_ip;
 	uint64_t to_ip;
 	uint64_t cr3;
+	uint64_t tot_insn_cnt;
 	uint64_t timestamp;
 	uint64_t est_timestamp;
 	uint64_t trace_nr;
diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c
index a5acd2fe2447..3b34a64195ea 100644
--- a/tools/perf/util/intel-pt.c
+++ b/tools/perf/util/intel-pt.c
@@ -126,6 +126,7 @@ struct intel_pt_queue {
 	u64 timestamp;
 	u32 flags;
 	u16 insn_len;
+	u64 last_insn_cnt;
 };
 
 static void intel_pt_dump(struct intel_pt *pt __maybe_unused,
@@ -920,11 +921,13 @@ static int intel_pt_synth_instruction_sample(struct intel_pt_queue *ptq)
 	sample.addr = ptq->state->to_ip;
 	sample.id = ptq->pt->instructions_id;
 	sample.stream_id = ptq->pt->instructions_id;
-	sample.period = ptq->pt->instructions_sample_period;
+	sample.period = ptq->state->tot_insn_cnt - ptq->last_insn_cnt;
 	sample.cpu = ptq->cpu;
 	sample.flags = ptq->flags;
 	sample.insn_len = ptq->insn_len;
 
+	ptq->last_insn_cnt = ptq->state->tot_insn_cnt;
+
 	if (pt->synth_opts.callchain) {
 		thread_stack__sample(ptq->thread, ptq->chain,
 				     pt->synth_opts.callchain_sz, sample.ip);
-- 
2.1.0


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

* [PATCH 06/16] perf tools: Add Intel PT support for PSB periods
  2015-08-25 16:14 [GIT PULL 00/16] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (4 preceding siblings ...)
  2015-08-25 16:14 ` [PATCH 05/16] perf tools: Fix Intel PT 'instructions' sample period Arnaldo Carvalho de Melo
@ 2015-08-25 16:14 ` Arnaldo Carvalho de Melo
  2015-08-25 16:14 ` [PATCH 07/16] perf tools: Add new Intel PT packet definitions Arnaldo Carvalho de Melo
                   ` (10 subsequent siblings)
  16 siblings, 0 replies; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-08-25 16:14 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Adrian Hunter, Jiri Olsa, Arnaldo Carvalho de Melo

From: Adrian Hunter <adrian.hunter@intel.com>

The PSB packet is a synchronization packet that provides a starting
point for decoding or recovery from errors.

This patch adds support for a new Intel PT feature that allows the
frequency of PSB packets to be specified.

Support for this feature is indicated by
/sys/bus/event_source/devices/intel_pt/caps/psb_cyc which contains "1"
if the feature is supported and "0" otherwise.

The PSB period can be specified as a PMU config term e.g. perf record -e
intel_pt/psb_period=2/u sleep 1

The default value is 3 or the nearest lower value that is supported.  0
is always supported.

Valid values are given by:

/sys/bus/event_source/devices/intel_pt/caps/psb_periods

which contains a hexadecimal value, the bits of which represent valid
values e.g. bit 2 set means value 2 is valid.

The value is converted to the approximate number of trace bytes between
PSB packets as:

	2 ^ (value + 11)

e.g. value 3 means 16KiB bytes between PSBs

If an invalid value is entered, the error message will give a list of
valid values e.g.

	$ perf record -e intel_pt/psb_period=15/u uname
	Invalid psb_period for intel_pt. Valid values are: 0-5

tools/perf/Documentation/intel-pt.txt is updated in a later patch as
there are a number of new features being added.

For more information about PSB periods refer to the Intel 64 and IA-32
Architectures SDM Chapter 36 Intel Processor Trace from June 2015 or
later.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1437150840-31811-18-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/arch/x86/util/intel-pt.c | 217 ++++++++++++++++++++++++++++++++++--
 1 file changed, 210 insertions(+), 7 deletions(-)

diff --git a/tools/perf/arch/x86/util/intel-pt.c b/tools/perf/arch/x86/util/intel-pt.c
index da7d2c15e611..145975b003a7 100644
--- a/tools/perf/arch/x86/util/intel-pt.c
+++ b/tools/perf/arch/x86/util/intel-pt.c
@@ -99,17 +99,121 @@ static int intel_pt_parse_terms(struct list_head *formats, const char *str,
 	return intel_pt_parse_terms_with_default(formats, str, config);
 }
 
-static size_t intel_pt_psb_period(struct perf_pmu *intel_pt_pmu __maybe_unused,
-				  struct perf_evlist *evlist __maybe_unused)
+static u64 intel_pt_masked_bits(u64 mask, u64 bits)
 {
-	return 256;
+	const u64 top_bit = 1ULL << 63;
+	u64 res = 0;
+	int i;
+
+	for (i = 0; i < 64; i++) {
+		if (mask & top_bit) {
+			res <<= 1;
+			if (bits & top_bit)
+				res |= 1;
+		}
+		mask <<= 1;
+		bits <<= 1;
+	}
+
+	return res;
+}
+
+static int intel_pt_read_config(struct perf_pmu *intel_pt_pmu, const char *str,
+				struct perf_evlist *evlist, u64 *res)
+{
+	struct perf_evsel *evsel;
+	u64 mask;
+
+	*res = 0;
+
+	mask = perf_pmu__format_bits(&intel_pt_pmu->format, str);
+	if (!mask)
+		return -EINVAL;
+
+	evlist__for_each(evlist, evsel) {
+		if (evsel->attr.type == intel_pt_pmu->type) {
+			*res = intel_pt_masked_bits(mask, evsel->attr.config);
+			return 0;
+		}
+	}
+
+	return -EINVAL;
+}
+
+static size_t intel_pt_psb_period(struct perf_pmu *intel_pt_pmu,
+				  struct perf_evlist *evlist)
+{
+	u64 val;
+	int err, topa_multiple_entries;
+	size_t psb_period;
+
+	if (perf_pmu__scan_file(intel_pt_pmu, "caps/topa_multiple_entries",
+				"%d", &topa_multiple_entries) != 1)
+		topa_multiple_entries = 0;
+
+	/*
+	 * Use caps/topa_multiple_entries to indicate early hardware that had
+	 * extra frequent PSBs.
+	 */
+	if (!topa_multiple_entries) {
+		psb_period = 256;
+		goto out;
+	}
+
+	err = intel_pt_read_config(intel_pt_pmu, "psb_period", evlist, &val);
+	if (err)
+		val = 0;
+
+	psb_period = 1 << (val + 11);
+out:
+	pr_debug2("%s psb_period %zu\n", intel_pt_pmu->name, psb_period);
+	return psb_period;
+}
+
+static int intel_pt_pick_bit(int bits, int target)
+{
+	int pos, pick = -1;
+
+	for (pos = 0; bits; bits >>= 1, pos++) {
+		if (bits & 1) {
+			if (pos <= target || pick < 0)
+				pick = pos;
+			if (pos >= target)
+				break;
+		}
+	}
+
+	return pick;
 }
 
 static u64 intel_pt_default_config(struct perf_pmu *intel_pt_pmu)
 {
+	char buf[256];
+	int psb_cyc, psb_periods, psb_period;
+	int pos = 0;
 	u64 config;
 
-	intel_pt_parse_terms(&intel_pt_pmu->format, "tsc", &config);
+	pos += scnprintf(buf + pos, sizeof(buf) - pos, "tsc");
+
+	if (perf_pmu__scan_file(intel_pt_pmu, "caps/psb_cyc", "%d",
+				&psb_cyc) != 1)
+		psb_cyc = 1;
+
+	if (psb_cyc) {
+		if (perf_pmu__scan_file(intel_pt_pmu, "caps/psb_periods", "%x",
+					&psb_periods) != 1)
+			psb_periods = 0;
+		if (psb_periods) {
+			psb_period = intel_pt_pick_bit(psb_periods, 3);
+			pos += scnprintf(buf + pos, sizeof(buf) - pos,
+					 ",psb_period=%d", psb_period);
+		}
+	}
+
+	pr_debug2("%s default config: %s\n", intel_pt_pmu->name, buf);
+
+	intel_pt_parse_terms(&intel_pt_pmu->format, buf, &config);
+
 	return config;
 }
 
@@ -239,6 +343,103 @@ static int intel_pt_track_switches(struct perf_evlist *evlist)
 	return 0;
 }
 
+static void intel_pt_valid_str(char *str, size_t len, u64 valid)
+{
+	unsigned int val, last = 0, state = 1;
+	int p = 0;
+
+	str[0] = '\0';
+
+	for (val = 0; val <= 64; val++, valid >>= 1) {
+		if (valid & 1) {
+			last = val;
+			switch (state) {
+			case 0:
+				p += scnprintf(str + p, len - p, ",");
+				/* Fall through */
+			case 1:
+				p += scnprintf(str + p, len - p, "%u", val);
+				state = 2;
+				break;
+			case 2:
+				state = 3;
+				break;
+			case 3:
+				state = 4;
+				break;
+			default:
+				break;
+			}
+		} else {
+			switch (state) {
+			case 3:
+				p += scnprintf(str + p, len - p, ",%u", last);
+				state = 0;
+				break;
+			case 4:
+				p += scnprintf(str + p, len - p, "-%u", last);
+				state = 0;
+				break;
+			default:
+				break;
+			}
+			if (state != 1)
+				state = 0;
+		}
+	}
+}
+
+static int intel_pt_val_config_term(struct perf_pmu *intel_pt_pmu,
+				    const char *caps, const char *name,
+				    const char *supported, u64 config)
+{
+	char valid_str[256];
+	unsigned int shift;
+	unsigned long long valid;
+	u64 bits;
+	int ok;
+
+	if (perf_pmu__scan_file(intel_pt_pmu, caps, "%llx", &valid) != 1)
+		valid = 0;
+
+	if (supported &&
+	    perf_pmu__scan_file(intel_pt_pmu, supported, "%d", &ok) == 1 && !ok)
+		valid = 0;
+
+	valid |= 1;
+
+	bits = perf_pmu__format_bits(&intel_pt_pmu->format, name);
+
+	config &= bits;
+
+	for (shift = 0; bits && !(bits & 1); shift++)
+		bits >>= 1;
+
+	config >>= shift;
+
+	if (config > 63)
+		goto out_err;
+
+	if (valid & (1 << config))
+		return 0;
+out_err:
+	intel_pt_valid_str(valid_str, sizeof(valid_str), valid);
+	pr_err("Invalid %s for %s. Valid values are: %s\n",
+	       name, INTEL_PT_PMU_NAME, valid_str);
+	return -EINVAL;
+}
+
+static int intel_pt_validate_config(struct perf_pmu *intel_pt_pmu,
+				    struct perf_evsel *evsel)
+{
+	if (!evsel)
+		return 0;
+
+	return intel_pt_val_config_term(intel_pt_pmu, "caps/psb_periods",
+					"psb_period", "caps/psb_cyc",
+					evsel->attr.config);
+}
+
 static int intel_pt_recording_options(struct auxtrace_record *itr,
 				      struct perf_evlist *evlist,
 				      struct record_opts *opts)
@@ -251,6 +452,7 @@ static int intel_pt_recording_options(struct auxtrace_record *itr,
 	const struct cpu_map *cpus = evlist->cpus;
 	bool privileged = geteuid() == 0 || perf_event_paranoid() < 0;
 	u64 tsc_bit;
+	int err;
 
 	ptr->evlist = evlist;
 	ptr->snapshot_mode = opts->auxtrace_snapshot_mode;
@@ -281,6 +483,10 @@ static int intel_pt_recording_options(struct auxtrace_record *itr,
 	if (!opts->full_auxtrace)
 		return 0;
 
+	err = intel_pt_validate_config(intel_pt_pmu, intel_pt_evsel);
+	if (err)
+		return err;
+
 	/* Set default sizes for snapshot mode */
 	if (opts->auxtrace_snapshot_mode) {
 		size_t psb_period = intel_pt_psb_period(intel_pt_pmu, evlist);
@@ -366,8 +572,6 @@ static int intel_pt_recording_options(struct auxtrace_record *itr,
 	 * threads.
 	 */
 	if (have_timing_info && !cpu_map__empty(cpus)) {
-		int err;
-
 		err = intel_pt_track_switches(evlist);
 		if (err == -EPERM)
 			pr_debug2("Unable to select sched:sched_switch\n");
@@ -394,7 +598,6 @@ static int intel_pt_recording_options(struct auxtrace_record *itr,
 	/* Add dummy event to keep tracking */
 	if (opts->full_auxtrace) {
 		struct perf_evsel *tracking_evsel;
-		int err;
 
 		err = parse_events(evlist, "dummy:u", NULL);
 		if (err)
-- 
2.1.0


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

* [PATCH 07/16] perf tools: Add new Intel PT packet definitions
  2015-08-25 16:14 [GIT PULL 00/16] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (5 preceding siblings ...)
  2015-08-25 16:14 ` [PATCH 06/16] perf tools: Add Intel PT support for PSB periods Arnaldo Carvalho de Melo
@ 2015-08-25 16:14 ` Arnaldo Carvalho de Melo
  2015-08-25 16:14 ` [PATCH 08/16] perf tools: Pass Intel PT information for decoding MTC and CYC Arnaldo Carvalho de Melo
                   ` (9 subsequent siblings)
  16 siblings, 0 replies; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-08-25 16:14 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Adrian Hunter, Jiri Olsa, Arnaldo Carvalho de Melo

From: Adrian Hunter <adrian.hunter@intel.com>

New features have been added to Intel PT which include a number of new
packet definitions.

This patch adds packet definitions for new packets: TMA, MTC, CYC, VMCS,
TRACESTOP and MNT.  Also another bit in PIP is defined.

This patch only adds support for the definitions. Later patches add
support for decoding TMA, MTC, CYC and TRACESTOP which is where those
packets are explained.

VMCS and the newly defined bit in PIP are used with virtualization which
is not supported yet.  MNT is a maintenance packet which the decoder
should ignore.

For details, refer to the June 2015 or later Intel 64 and IA-32
Architectures SDM Chapter 36 Intel Processor Trace.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1437150840-31811-19-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 .../perf/util/intel-pt-decoder/intel-pt-decoder.c  |  70 +++++++++-
 .../util/intel-pt-decoder/intel-pt-pkt-decoder.c   | 142 +++++++++++++++++++--
 .../util/intel-pt-decoder/intel-pt-pkt-decoder.h   |   6 +
 3 files changed, 201 insertions(+), 17 deletions(-)

diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
index 56790ea1e88e..4a0e9fb1d173 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
@@ -923,6 +923,7 @@ static int intel_pt_walk_psbend(struct intel_pt_decoder *decoder)
 		case INTEL_PT_TIP_PGE:
 		case INTEL_PT_TIP:
 		case INTEL_PT_TNT:
+		case INTEL_PT_TRACESTOP:
 		case INTEL_PT_BAD:
 		case INTEL_PT_PSB:
 			intel_pt_log("ERROR: Unexpected packet\n");
@@ -935,6 +936,9 @@ static int intel_pt_walk_psbend(struct intel_pt_decoder *decoder)
 			intel_pt_calc_tsc_timestamp(decoder);
 			break;
 
+		case INTEL_PT_TMA:
+			break;
+
 		case INTEL_PT_CBR:
 			decoder->cbr = decoder->packet.payload;
 			break;
@@ -944,7 +948,7 @@ static int intel_pt_walk_psbend(struct intel_pt_decoder *decoder)
 			break;
 
 		case INTEL_PT_PIP:
-			decoder->cr3 = decoder->packet.payload;
+			decoder->cr3 = decoder->packet.payload & (BIT63 - 1);
 			break;
 
 		case INTEL_PT_FUP:
@@ -956,6 +960,12 @@ static int intel_pt_walk_psbend(struct intel_pt_decoder *decoder)
 			intel_pt_update_in_tx(decoder);
 			break;
 
+		case INTEL_PT_MTC:
+			break;
+
+		case INTEL_PT_CYC:
+		case INTEL_PT_VMCS:
+		case INTEL_PT_MNT:
 		case INTEL_PT_PAD:
 		default:
 			break;
@@ -983,8 +993,10 @@ static int intel_pt_walk_fup_tip(struct intel_pt_decoder *decoder)
 		switch (decoder->packet.type) {
 		case INTEL_PT_TNT:
 		case INTEL_PT_FUP:
+		case INTEL_PT_TRACESTOP:
 		case INTEL_PT_PSB:
 		case INTEL_PT_TSC:
+		case INTEL_PT_TMA:
 		case INTEL_PT_CBR:
 		case INTEL_PT_MODE_TSX:
 		case INTEL_PT_BAD:
@@ -1032,13 +1044,21 @@ static int intel_pt_walk_fup_tip(struct intel_pt_decoder *decoder)
 			return 0;
 
 		case INTEL_PT_PIP:
-			decoder->cr3 = decoder->packet.payload;
+			decoder->cr3 = decoder->packet.payload & (BIT63 - 1);
+			break;
+
+		case INTEL_PT_MTC:
+			break;
+
+		case INTEL_PT_CYC:
 			break;
 
 		case INTEL_PT_MODE_EXEC:
 			decoder->exec_mode = decoder->packet.payload;
 			break;
 
+		case INTEL_PT_VMCS:
+		case INTEL_PT_MNT:
 		case INTEL_PT_PAD:
 			break;
 
@@ -1122,6 +1142,9 @@ next:
 			}
 			return intel_pt_walk_fup_tip(decoder);
 
+		case INTEL_PT_TRACESTOP:
+			break;
+
 		case INTEL_PT_PSB:
 			intel_pt_clear_stack(&decoder->stack);
 			err = intel_pt_walk_psbend(decoder);
@@ -1132,13 +1155,22 @@ next:
 			break;
 
 		case INTEL_PT_PIP:
-			decoder->cr3 = decoder->packet.payload;
+			decoder->cr3 = decoder->packet.payload & (BIT63 - 1);
+			break;
+
+		case INTEL_PT_MTC:
 			break;
 
 		case INTEL_PT_TSC:
 			intel_pt_calc_tsc_timestamp(decoder);
 			break;
 
+		case INTEL_PT_TMA:
+			break;
+
+		case INTEL_PT_CYC:
+			break;
+
 		case INTEL_PT_CBR:
 			decoder->cbr = decoder->packet.payload;
 			break;
@@ -1162,6 +1194,8 @@ next:
 			return intel_pt_bug(decoder);
 
 		case INTEL_PT_PSBEND:
+		case INTEL_PT_VMCS:
+		case INTEL_PT_MNT:
 		case INTEL_PT_PAD:
 			break;
 
@@ -1202,16 +1236,25 @@ static int intel_pt_walk_psb(struct intel_pt_decoder *decoder)
 			}
 			break;
 
+		case INTEL_PT_MTC:
+			break;
+
 		case INTEL_PT_TSC:
 			intel_pt_calc_tsc_timestamp(decoder);
 			break;
 
+		case INTEL_PT_TMA:
+			break;
+
+		case INTEL_PT_CYC:
+			break;
+
 		case INTEL_PT_CBR:
 			decoder->cbr = decoder->packet.payload;
 			break;
 
 		case INTEL_PT_PIP:
-			decoder->cr3 = decoder->packet.payload;
+			decoder->cr3 = decoder->packet.payload & (BIT63 - 1);
 			break;
 
 		case INTEL_PT_MODE_EXEC:
@@ -1222,6 +1265,7 @@ static int intel_pt_walk_psb(struct intel_pt_decoder *decoder)
 			intel_pt_update_in_tx(decoder);
 			break;
 
+		case INTEL_PT_TRACESTOP:
 		case INTEL_PT_TNT:
 			intel_pt_log("ERROR: Unexpected packet\n");
 			if (decoder->ip)
@@ -1240,6 +1284,8 @@ static int intel_pt_walk_psb(struct intel_pt_decoder *decoder)
 			return 0;
 
 		case INTEL_PT_PSB:
+		case INTEL_PT_VMCS:
+		case INTEL_PT_MNT:
 		case INTEL_PT_PAD:
 		default:
 			break;
@@ -1282,16 +1328,25 @@ static int intel_pt_walk_to_ip(struct intel_pt_decoder *decoder)
 				intel_pt_set_last_ip(decoder);
 			break;
 
+		case INTEL_PT_MTC:
+			break;
+
 		case INTEL_PT_TSC:
 			intel_pt_calc_tsc_timestamp(decoder);
 			break;
 
+		case INTEL_PT_TMA:
+			break;
+
+		case INTEL_PT_CYC:
+			break;
+
 		case INTEL_PT_CBR:
 			decoder->cbr = decoder->packet.payload;
 			break;
 
 		case INTEL_PT_PIP:
-			decoder->cr3 = decoder->packet.payload;
+			decoder->cr3 = decoder->packet.payload & (BIT63 - 1);
 			break;
 
 		case INTEL_PT_MODE_EXEC:
@@ -1308,6 +1363,9 @@ static int intel_pt_walk_to_ip(struct intel_pt_decoder *decoder)
 		case INTEL_PT_BAD: /* Does not happen */
 			return intel_pt_bug(decoder);
 
+		case INTEL_PT_TRACESTOP:
+			break;
+
 		case INTEL_PT_PSB:
 			err = intel_pt_walk_psb(decoder);
 			if (err)
@@ -1321,6 +1379,8 @@ static int intel_pt_walk_to_ip(struct intel_pt_decoder *decoder)
 
 		case INTEL_PT_TNT:
 		case INTEL_PT_PSBEND:
+		case INTEL_PT_VMCS:
+		case INTEL_PT_MNT:
 		case INTEL_PT_PAD:
 		default:
 			break;
diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c
index 988c82c6652d..b1257c816310 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.c
@@ -24,6 +24,8 @@
 
 #define BIT63		((uint64_t)1 << 63)
 
+#define NR_FLAG		BIT63
+
 #if __BYTE_ORDER == __BIG_ENDIAN
 #define le16_to_cpu bswap_16
 #define le32_to_cpu bswap_32
@@ -46,15 +48,21 @@ static const char * const packet_name[] = {
 	[INTEL_PT_TIP_PGD]	= "TIP.PGD",
 	[INTEL_PT_TIP_PGE]	= "TIP.PGE",
 	[INTEL_PT_TSC]		= "TSC",
+	[INTEL_PT_TMA]		= "TMA",
 	[INTEL_PT_MODE_EXEC]	= "MODE.Exec",
 	[INTEL_PT_MODE_TSX]	= "MODE.TSX",
+	[INTEL_PT_MTC]		= "MTC",
 	[INTEL_PT_TIP]		= "TIP",
 	[INTEL_PT_FUP]		= "FUP",
+	[INTEL_PT_CYC]		= "CYC",
+	[INTEL_PT_VMCS]		= "VMCS",
 	[INTEL_PT_PSB]		= "PSB",
 	[INTEL_PT_PSBEND]	= "PSBEND",
 	[INTEL_PT_CBR]		= "CBR",
+	[INTEL_PT_TRACESTOP]	= "TraceSTOP",
 	[INTEL_PT_PIP]		= "PIP",
 	[INTEL_PT_OVF]		= "OVF",
+	[INTEL_PT_MNT]		= "MNT",
 };
 
 const char *intel_pt_pkt_name(enum intel_pt_pkt_type type)
@@ -96,10 +104,18 @@ static int intel_pt_get_pip(const unsigned char *buf, size_t len,
 	packet->type = INTEL_PT_PIP;
 	memcpy_le64(&payload, buf + 2, 6);
 	packet->payload = payload >> 1;
+	if (payload & 1)
+		packet->payload |= NR_FLAG;
 
 	return 8;
 }
 
+static int intel_pt_get_tracestop(struct intel_pt_pkt *packet)
+{
+	packet->type = INTEL_PT_TRACESTOP;
+	return 2;
+}
+
 static int intel_pt_get_cbr(const unsigned char *buf, size_t len,
 			    struct intel_pt_pkt *packet)
 {
@@ -110,6 +126,24 @@ static int intel_pt_get_cbr(const unsigned char *buf, size_t len,
 	return 4;
 }
 
+static int intel_pt_get_vmcs(const unsigned char *buf, size_t len,
+			     struct intel_pt_pkt *packet)
+{
+	unsigned int count = (52 - 5) >> 3;
+
+	if (count < 1 || count > 7)
+		return INTEL_PT_BAD_PACKET;
+
+	if (len < count + 2)
+		return INTEL_PT_NEED_MORE_BYTES;
+
+	packet->type = INTEL_PT_VMCS;
+	packet->count = count;
+	memcpy_le64(&packet->payload, buf + 2, count);
+
+	return count + 2;
+}
+
 static int intel_pt_get_ovf(struct intel_pt_pkt *packet)
 {
 	packet->type = INTEL_PT_OVF;
@@ -139,12 +173,49 @@ static int intel_pt_get_psbend(struct intel_pt_pkt *packet)
 	return 2;
 }
 
+static int intel_pt_get_tma(const unsigned char *buf, size_t len,
+			    struct intel_pt_pkt *packet)
+{
+	if (len < 7)
+		return INTEL_PT_NEED_MORE_BYTES;
+
+	packet->type = INTEL_PT_TMA;
+	packet->payload = buf[2] | (buf[3] << 8);
+	packet->count = buf[5] | ((buf[6] & BIT(0)) << 8);
+	return 7;
+}
+
 static int intel_pt_get_pad(struct intel_pt_pkt *packet)
 {
 	packet->type = INTEL_PT_PAD;
 	return 1;
 }
 
+static int intel_pt_get_mnt(const unsigned char *buf, size_t len,
+			    struct intel_pt_pkt *packet)
+{
+	if (len < 11)
+		return INTEL_PT_NEED_MORE_BYTES;
+	packet->type = INTEL_PT_MNT;
+	memcpy_le64(&packet->payload, buf + 3, 8);
+	return 11
+;
+}
+
+static int intel_pt_get_3byte(const unsigned char *buf, size_t len,
+			      struct intel_pt_pkt *packet)
+{
+	if (len < 3)
+		return INTEL_PT_NEED_MORE_BYTES;
+
+	switch (buf[2]) {
+	case 0x88: /* MNT */
+		return intel_pt_get_mnt(buf, len, packet);
+	default:
+		return INTEL_PT_BAD_PACKET;
+	}
+}
+
 static int intel_pt_get_ext(const unsigned char *buf, size_t len,
 			    struct intel_pt_pkt *packet)
 {
@@ -156,14 +227,22 @@ static int intel_pt_get_ext(const unsigned char *buf, size_t len,
 		return intel_pt_get_long_tnt(buf, len, packet);
 	case 0x43: /* PIP */
 		return intel_pt_get_pip(buf, len, packet);
+	case 0x83: /* TraceStop */
+		return intel_pt_get_tracestop(packet);
 	case 0x03: /* CBR */
 		return intel_pt_get_cbr(buf, len, packet);
+	case 0xc8: /* VMCS */
+		return intel_pt_get_vmcs(buf, len, packet);
 	case 0xf3: /* OVF */
 		return intel_pt_get_ovf(packet);
 	case 0x82: /* PSB */
 		return intel_pt_get_psb(buf, len, packet);
 	case 0x23: /* PSBEND */
 		return intel_pt_get_psbend(packet);
+	case 0x73: /* TMA */
+		return intel_pt_get_tma(buf, len, packet);
+	case 0xC3: /* 3-byte header */
+		return intel_pt_get_3byte(buf, len, packet);
 	default:
 		return INTEL_PT_BAD_PACKET;
 	}
@@ -187,6 +266,28 @@ static int intel_pt_get_short_tnt(unsigned int byte,
 	return 1;
 }
 
+static int intel_pt_get_cyc(unsigned int byte, const unsigned char *buf,
+			    size_t len, struct intel_pt_pkt *packet)
+{
+	unsigned int offs = 1, shift;
+	uint64_t payload = byte >> 3;
+
+	byte >>= 2;
+	len -= 1;
+	for (shift = 5; byte & 1; shift += 7) {
+		if (offs > 9)
+			return INTEL_PT_BAD_PACKET;
+		if (len < offs)
+			return INTEL_PT_NEED_MORE_BYTES;
+		byte = buf[offs++];
+		payload |= (byte >> 1) << shift;
+	}
+
+	packet->type = INTEL_PT_CYC;
+	packet->payload = payload;
+	return offs;
+}
+
 static int intel_pt_get_ip(enum intel_pt_pkt_type type, unsigned int byte,
 			   const unsigned char *buf, size_t len,
 			   struct intel_pt_pkt *packet)
@@ -269,6 +370,16 @@ static int intel_pt_get_tsc(const unsigned char *buf, size_t len,
 	return 8;
 }
 
+static int intel_pt_get_mtc(const unsigned char *buf, size_t len,
+			    struct intel_pt_pkt *packet)
+{
+	if (len < 2)
+		return INTEL_PT_NEED_MORE_BYTES;
+	packet->type = INTEL_PT_MTC;
+	packet->payload = buf[1];
+	return 2;
+}
+
 static int intel_pt_do_get_packet(const unsigned char *buf, size_t len,
 				  struct intel_pt_pkt *packet)
 {
@@ -288,6 +399,9 @@ static int intel_pt_do_get_packet(const unsigned char *buf, size_t len,
 		return intel_pt_get_short_tnt(byte, packet);
 	}
 
+	if ((byte & 2))
+		return intel_pt_get_cyc(byte, buf, len, packet);
+
 	switch (byte & 0x1f) {
 	case 0x0D:
 		return intel_pt_get_ip(INTEL_PT_TIP, byte, buf, len, packet);
@@ -305,6 +419,8 @@ static int intel_pt_do_get_packet(const unsigned char *buf, size_t len,
 			return intel_pt_get_mode(buf, len, packet);
 		case 0x19:
 			return intel_pt_get_tsc(buf, len, packet);
+		case 0x59:
+			return intel_pt_get_mtc(buf, len, packet);
 		default:
 			return INTEL_PT_BAD_PACKET;
 		}
@@ -329,7 +445,7 @@ int intel_pt_get_packet(const unsigned char *buf, size_t len,
 int intel_pt_pkt_desc(const struct intel_pt_pkt *packet, char *buf,
 		      size_t buf_len)
 {
-	int ret, i;
+	int ret, i, nr;
 	unsigned long long payload = packet->payload;
 	const char *name = intel_pt_pkt_name(packet->type);
 
@@ -338,6 +454,7 @@ int intel_pt_pkt_desc(const struct intel_pt_pkt *packet, char *buf,
 	case INTEL_PT_PAD:
 	case INTEL_PT_PSB:
 	case INTEL_PT_PSBEND:
+	case INTEL_PT_TRACESTOP:
 	case INTEL_PT_OVF:
 		return snprintf(buf, buf_len, "%s", name);
 	case INTEL_PT_TNT: {
@@ -371,17 +488,16 @@ int intel_pt_pkt_desc(const struct intel_pt_pkt *packet, char *buf,
 	case INTEL_PT_FUP:
 		if (!(packet->count))
 			return snprintf(buf, buf_len, "%s no ip", name);
+	case INTEL_PT_CYC:
+	case INTEL_PT_VMCS:
+	case INTEL_PT_MTC:
+	case INTEL_PT_MNT:
 	case INTEL_PT_CBR:
-		return snprintf(buf, buf_len, "%s 0x%llx", name, payload);
 	case INTEL_PT_TSC:
-		if (packet->count)
-			return snprintf(buf, buf_len,
-					"%s 0x%llx CTC 0x%x FC 0x%x",
-					name, payload, packet->count & 0xffff,
-					(packet->count >> 16) & 0x1ff);
-		else
-			return snprintf(buf, buf_len, "%s 0x%llx",
-					name, payload);
+		return snprintf(buf, buf_len, "%s 0x%llx", name, payload);
+	case INTEL_PT_TMA:
+		return snprintf(buf, buf_len, "%s CTC 0x%x FC 0x%x", name,
+				(unsigned)payload, packet->count);
 	case INTEL_PT_MODE_EXEC:
 		return snprintf(buf, buf_len, "%s %lld", name, payload);
 	case INTEL_PT_MODE_TSX:
@@ -389,8 +505,10 @@ int intel_pt_pkt_desc(const struct intel_pt_pkt *packet, char *buf,
 				name, (unsigned)(payload >> 1) & 1,
 				(unsigned)payload & 1);
 	case INTEL_PT_PIP:
-		ret = snprintf(buf, buf_len, "%s 0x%llx",
-			       name, payload);
+		nr = packet->payload & NR_FLAG ? 1 : 0;
+		payload &= ~NR_FLAG;
+		ret = snprintf(buf, buf_len, "%s 0x%llx (NR=%d)",
+			       name, payload, nr);
 		return ret;
 	default:
 		break;
diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.h b/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.h
index 53404fa942b3..781bb79883bd 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.h
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-pkt-decoder.h
@@ -37,15 +37,21 @@ enum intel_pt_pkt_type {
 	INTEL_PT_TIP_PGD,
 	INTEL_PT_TIP_PGE,
 	INTEL_PT_TSC,
+	INTEL_PT_TMA,
 	INTEL_PT_MODE_EXEC,
 	INTEL_PT_MODE_TSX,
+	INTEL_PT_MTC,
 	INTEL_PT_TIP,
 	INTEL_PT_FUP,
+	INTEL_PT_CYC,
+	INTEL_PT_VMCS,
 	INTEL_PT_PSB,
 	INTEL_PT_PSBEND,
 	INTEL_PT_CBR,
+	INTEL_PT_TRACESTOP,
 	INTEL_PT_PIP,
 	INTEL_PT_OVF,
+	INTEL_PT_MNT,
 };
 
 struct intel_pt_pkt {
-- 
2.1.0


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

* [PATCH 08/16] perf tools: Pass Intel PT information for decoding MTC and CYC
  2015-08-25 16:14 [GIT PULL 00/16] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (6 preceding siblings ...)
  2015-08-25 16:14 ` [PATCH 07/16] perf tools: Add new Intel PT packet definitions Arnaldo Carvalho de Melo
@ 2015-08-25 16:14 ` Arnaldo Carvalho de Melo
  2015-08-25 16:14 ` [PATCH 09/16] perf tools: Add Intel PT support for decoding MTC packets Arnaldo Carvalho de Melo
                   ` (8 subsequent siblings)
  16 siblings, 0 replies; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-08-25 16:14 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Adrian Hunter, Jiri Olsa, Arnaldo Carvalho de Melo

From: Adrian Hunter <adrian.hunter@intel.com>

Record additional information in the AUXTRACE_INFO event in preparation
for decoding MTC and CYC packets.  Pass the information to the decoder.

The AUXTRACE_INFO record can be extended by using the size to indicate
the presence of new members.

The additional information includes PMU config bit positions and the TSC
to CTC (hardware crystal clock) ratio needed to decode MTC packets.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1437150840-31811-20-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/arch/x86/util/intel-pt.c                | 24 ++++++++-
 .../perf/util/intel-pt-decoder/intel-pt-decoder.h  |  3 ++
 tools/perf/util/intel-pt.c                         | 62 ++++++++++++++++++----
 tools/perf/util/intel-pt.h                         |  5 ++
 4 files changed, 83 insertions(+), 11 deletions(-)

diff --git a/tools/perf/arch/x86/util/intel-pt.c b/tools/perf/arch/x86/util/intel-pt.c
index 145975b003a7..faae9289bcf6 100644
--- a/tools/perf/arch/x86/util/intel-pt.c
+++ b/tools/perf/arch/x86/util/intel-pt.c
@@ -18,6 +18,7 @@
 #include <linux/types.h>
 #include <linux/bitops.h>
 #include <linux/log2.h>
+#include <cpuid.h>
 
 #include "../../perf.h"
 #include "../../util/session.h"
@@ -261,6 +262,15 @@ static size_t intel_pt_info_priv_size(struct auxtrace_record *itr __maybe_unused
 	return INTEL_PT_AUXTRACE_PRIV_SIZE;
 }
 
+static void intel_pt_tsc_ctc_ratio(u32 *n, u32 *d)
+{
+	unsigned int eax = 0, ebx = 0, ecx = 0, edx = 0;
+
+	__get_cpuid(0x15, &eax, &ebx, &ecx, &edx);
+	*n = ebx;
+	*d = eax;
+}
+
 static int intel_pt_info_fill(struct auxtrace_record *itr,
 			      struct perf_session *session,
 			      struct auxtrace_info_event *auxtrace_info,
@@ -272,7 +282,8 @@ static int intel_pt_info_fill(struct auxtrace_record *itr,
 	struct perf_event_mmap_page *pc;
 	struct perf_tsc_conversion tc = { .time_mult = 0, };
 	bool cap_user_time_zero = false, per_cpu_mmaps;
-	u64 tsc_bit, noretcomp_bit;
+	u64 tsc_bit, mtc_bit, mtc_freq_bits, cyc_bit, noretcomp_bit;
+	u32 tsc_ctc_ratio_n, tsc_ctc_ratio_d;
 	int err;
 
 	if (priv_size != INTEL_PT_AUXTRACE_PRIV_SIZE)
@@ -281,6 +292,12 @@ static int intel_pt_info_fill(struct auxtrace_record *itr,
 	intel_pt_parse_terms(&intel_pt_pmu->format, "tsc", &tsc_bit);
 	intel_pt_parse_terms(&intel_pt_pmu->format, "noretcomp",
 			     &noretcomp_bit);
+	intel_pt_parse_terms(&intel_pt_pmu->format, "mtc", &mtc_bit);
+	mtc_freq_bits = perf_pmu__format_bits(&intel_pt_pmu->format,
+					      "mtc_period");
+	intel_pt_parse_terms(&intel_pt_pmu->format, "cyc", &cyc_bit);
+
+	intel_pt_tsc_ctc_ratio(&tsc_ctc_ratio_n, &tsc_ctc_ratio_d);
 
 	if (!session->evlist->nr_mmaps)
 		return -EINVAL;
@@ -311,6 +328,11 @@ static int intel_pt_info_fill(struct auxtrace_record *itr,
 	auxtrace_info->priv[INTEL_PT_HAVE_SCHED_SWITCH] = ptr->have_sched_switch;
 	auxtrace_info->priv[INTEL_PT_SNAPSHOT_MODE] = ptr->snapshot_mode;
 	auxtrace_info->priv[INTEL_PT_PER_CPU_MMAPS] = per_cpu_mmaps;
+	auxtrace_info->priv[INTEL_PT_MTC_BIT] = mtc_bit;
+	auxtrace_info->priv[INTEL_PT_MTC_FREQ_BITS] = mtc_freq_bits;
+	auxtrace_info->priv[INTEL_PT_TSC_CTC_N] = tsc_ctc_ratio_n;
+	auxtrace_info->priv[INTEL_PT_TSC_CTC_D] = tsc_ctc_ratio_d;
+	auxtrace_info->priv[INTEL_PT_CYC_BIT] = cyc_bit;
 
 	return 0;
 }
diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h
index cbf57044c385..56cc47baca11 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h
@@ -87,6 +87,9 @@ struct intel_pt_params {
 	uint64_t period;
 	enum intel_pt_period_type period_type;
 	unsigned max_non_turbo_ratio;
+	unsigned int mtc_period;
+	uint32_t tsc_ctc_ratio_n;
+	uint32_t tsc_ctc_ratio_d;
 };
 
 struct intel_pt_decoder;
diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c
index 3b34a64195ea..bb41c20e6005 100644
--- a/tools/perf/util/intel-pt.c
+++ b/tools/perf/util/intel-pt.c
@@ -91,6 +91,11 @@ struct intel_pt {
 	bool synth_needs_swap;
 
 	u64 tsc_bit;
+	u64 mtc_bit;
+	u64 mtc_freq_bits;
+	u32 tsc_ctc_ratio_n;
+	u32 tsc_ctc_ratio_d;
+	u64 cyc_bit;
 	u64 noretcomp_bit;
 	unsigned max_non_turbo_ratio;
 };
@@ -568,6 +573,25 @@ static bool intel_pt_return_compression(struct intel_pt *pt)
 	return true;
 }
 
+static unsigned int intel_pt_mtc_period(struct intel_pt *pt)
+{
+	struct perf_evsel *evsel;
+	unsigned int shift;
+	u64 config;
+
+	if (!pt->mtc_freq_bits)
+		return 0;
+
+	for (shift = 0, config = pt->mtc_freq_bits; !(config & 1); shift++)
+		config >>= 1;
+
+	evlist__for_each(pt->session->evlist, evsel) {
+		if (intel_pt_get_config(pt, &evsel->attr, &config))
+			return (config & pt->mtc_freq_bits) >> shift;
+	}
+	return 0;
+}
+
 static bool intel_pt_timeless_decoding(struct intel_pt *pt)
 {
 	struct perf_evsel *evsel;
@@ -668,6 +692,9 @@ static struct intel_pt_queue *intel_pt_alloc_queue(struct intel_pt *pt,
 	params.data = ptq;
 	params.return_compression = intel_pt_return_compression(pt);
 	params.max_non_turbo_ratio = pt->max_non_turbo_ratio;
+	params.mtc_period = intel_pt_mtc_period(pt);
+	params.tsc_ctc_ratio_n = pt->tsc_ctc_ratio_n;
+	params.tsc_ctc_ratio_d = pt->tsc_ctc_ratio_d;
 
 	if (pt->synth_opts.instructions) {
 		if (pt->synth_opts.period) {
@@ -1751,16 +1778,20 @@ static struct perf_evsel *intel_pt_find_sched_switch(struct perf_evlist *evlist)
 }
 
 static const char * const intel_pt_info_fmts[] = {
-	[INTEL_PT_PMU_TYPE]		= "  PMU Type           %"PRId64"\n",
-	[INTEL_PT_TIME_SHIFT]		= "  Time Shift         %"PRIu64"\n",
-	[INTEL_PT_TIME_MULT]		= "  Time Muliplier     %"PRIu64"\n",
-	[INTEL_PT_TIME_ZERO]		= "  Time Zero          %"PRIu64"\n",
-	[INTEL_PT_CAP_USER_TIME_ZERO]	= "  Cap Time Zero      %"PRId64"\n",
-	[INTEL_PT_TSC_BIT]		= "  TSC bit            %#"PRIx64"\n",
-	[INTEL_PT_NORETCOMP_BIT]	= "  NoRETComp bit      %#"PRIx64"\n",
-	[INTEL_PT_HAVE_SCHED_SWITCH]	= "  Have sched_switch  %"PRId64"\n",
-	[INTEL_PT_SNAPSHOT_MODE]	= "  Snapshot mode      %"PRId64"\n",
-	[INTEL_PT_PER_CPU_MMAPS]	= "  Per-cpu maps       %"PRId64"\n",
+	[INTEL_PT_PMU_TYPE]		= "  PMU Type            %"PRId64"\n",
+	[INTEL_PT_TIME_SHIFT]		= "  Time Shift          %"PRIu64"\n",
+	[INTEL_PT_TIME_MULT]		= "  Time Muliplier      %"PRIu64"\n",
+	[INTEL_PT_TIME_ZERO]		= "  Time Zero           %"PRIu64"\n",
+	[INTEL_PT_CAP_USER_TIME_ZERO]	= "  Cap Time Zero       %"PRId64"\n",
+	[INTEL_PT_TSC_BIT]		= "  TSC bit             %#"PRIx64"\n",
+	[INTEL_PT_NORETCOMP_BIT]	= "  NoRETComp bit       %#"PRIx64"\n",
+	[INTEL_PT_HAVE_SCHED_SWITCH]	= "  Have sched_switch   %"PRId64"\n",
+	[INTEL_PT_SNAPSHOT_MODE]	= "  Snapshot mode       %"PRId64"\n",
+	[INTEL_PT_PER_CPU_MMAPS]	= "  Per-cpu maps        %"PRId64"\n",
+	[INTEL_PT_MTC_BIT]		= "  MTC bit             %#"PRIx64"\n",
+	[INTEL_PT_TSC_CTC_N]		= "  TSC:CTC numerator   %"PRIu64"\n",
+	[INTEL_PT_TSC_CTC_D]		= "  TSC:CTC denominator %"PRIu64"\n",
+	[INTEL_PT_CYC_BIT]		= "  CYC bit             %#"PRIx64"\n",
 };
 
 static void intel_pt_print_info(u64 *arr, int start, int finish)
@@ -1812,6 +1843,17 @@ int intel_pt_process_auxtrace_info(union perf_event *event,
 	intel_pt_print_info(&auxtrace_info->priv[0], INTEL_PT_PMU_TYPE,
 			    INTEL_PT_PER_CPU_MMAPS);
 
+	if (auxtrace_info->header.size >= sizeof(struct auxtrace_info_event) +
+					(sizeof(u64) * INTEL_PT_CYC_BIT)) {
+		pt->mtc_bit = auxtrace_info->priv[INTEL_PT_MTC_BIT];
+		pt->mtc_freq_bits = auxtrace_info->priv[INTEL_PT_MTC_FREQ_BITS];
+		pt->tsc_ctc_ratio_n = auxtrace_info->priv[INTEL_PT_TSC_CTC_N];
+		pt->tsc_ctc_ratio_d = auxtrace_info->priv[INTEL_PT_TSC_CTC_D];
+		pt->cyc_bit = auxtrace_info->priv[INTEL_PT_CYC_BIT];
+		intel_pt_print_info(&auxtrace_info->priv[0], INTEL_PT_MTC_BIT,
+				    INTEL_PT_CYC_BIT);
+	}
+
 	pt->timeless_decoding = intel_pt_timeless_decoding(pt);
 	pt->have_tsc = intel_pt_have_tsc(pt);
 	pt->sampling_mode = false;
diff --git a/tools/perf/util/intel-pt.h b/tools/perf/util/intel-pt.h
index a1bfe93473ba..0065949df693 100644
--- a/tools/perf/util/intel-pt.h
+++ b/tools/perf/util/intel-pt.h
@@ -29,6 +29,11 @@ enum {
 	INTEL_PT_HAVE_SCHED_SWITCH,
 	INTEL_PT_SNAPSHOT_MODE,
 	INTEL_PT_PER_CPU_MMAPS,
+	INTEL_PT_MTC_BIT,
+	INTEL_PT_MTC_FREQ_BITS,
+	INTEL_PT_TSC_CTC_N,
+	INTEL_PT_TSC_CTC_D,
+	INTEL_PT_CYC_BIT,
 	INTEL_PT_AUXTRACE_PRIV_MAX,
 };
 
-- 
2.1.0


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

* [PATCH 09/16] perf tools: Add Intel PT support for decoding MTC packets
  2015-08-25 16:14 [GIT PULL 00/16] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (7 preceding siblings ...)
  2015-08-25 16:14 ` [PATCH 08/16] perf tools: Pass Intel PT information for decoding MTC and CYC Arnaldo Carvalho de Melo
@ 2015-08-25 16:14 ` Arnaldo Carvalho de Melo
  2015-08-25 16:14 ` [PATCH 10/16] perf tools: Add Intel PT support for using " Arnaldo Carvalho de Melo
                   ` (7 subsequent siblings)
  16 siblings, 0 replies; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-08-25 16:14 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Adrian Hunter, Jiri Olsa, Arnaldo Carvalho de Melo

From: Adrian Hunter <adrian.hunter@intel.com>

MTC packets provide finer grain timestamp information than TSC packets.
MTC packets record time using the hardware crystal clock (CTC) which is
related to TSC packets using a TMA packet.

This patch just adds decoder support.

Support for a default value and validation of values is provided by a
later patch. Also documentation is updated in a separate patch.

For details refer to the June 2015 or later Intel 64 and IA-32
Architectures SDM Chapter 36 Intel Processor Trace.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1437150840-31811-21-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 .../perf/util/intel-pt-decoder/intel-pt-decoder.c  | 162 ++++++++++++++++++++-
 .../perf/util/intel-pt-decoder/intel-pt-decoder.h  |   1 +
 2 files changed, 159 insertions(+), 4 deletions(-)

diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
index 4a0e9fb1d173..f7119a11a4b6 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
@@ -85,7 +85,9 @@ struct intel_pt_decoder {
 	const unsigned char *buf;
 	size_t len;
 	bool return_compression;
+	bool mtc_insn;
 	bool pge;
+	bool have_tma;
 	uint64_t pos;
 	uint64_t last_ip;
 	uint64_t ip;
@@ -94,6 +96,15 @@ struct intel_pt_decoder {
 	uint64_t tsc_timestamp;
 	uint64_t ref_timestamp;
 	uint64_t ret_addr;
+	uint64_t ctc_timestamp;
+	uint64_t ctc_delta;
+	uint32_t last_mtc;
+	uint32_t tsc_ctc_ratio_n;
+	uint32_t tsc_ctc_ratio_d;
+	uint32_t tsc_ctc_mult;
+	uint32_t tsc_slip;
+	uint32_t ctc_rem_mask;
+	int mtc_shift;
 	struct intel_pt_stack stack;
 	enum intel_pt_pkt_state pkt_state;
 	struct intel_pt_pkt packet;
@@ -149,6 +160,13 @@ static void intel_pt_setup_period(struct intel_pt_decoder *decoder)
 	}
 }
 
+static uint64_t multdiv(uint64_t t, uint32_t n, uint32_t d)
+{
+	if (!d)
+		return 0;
+	return (t / d) * n + ((t % d) * n) / d;
+}
+
 struct intel_pt_decoder *intel_pt_decoder_new(struct intel_pt_params *params)
 {
 	struct intel_pt_decoder *decoder;
@@ -175,6 +193,39 @@ struct intel_pt_decoder *intel_pt_decoder_new(struct intel_pt_params *params)
 
 	intel_pt_setup_period(decoder);
 
+	decoder->mtc_shift = params->mtc_period;
+	decoder->ctc_rem_mask = (1 << decoder->mtc_shift) - 1;
+
+	decoder->tsc_ctc_ratio_n = params->tsc_ctc_ratio_n;
+	decoder->tsc_ctc_ratio_d = params->tsc_ctc_ratio_d;
+
+	if (!decoder->tsc_ctc_ratio_n)
+		decoder->tsc_ctc_ratio_d = 0;
+
+	if (decoder->tsc_ctc_ratio_d) {
+		if (!(decoder->tsc_ctc_ratio_n % decoder->tsc_ctc_ratio_d))
+			decoder->tsc_ctc_mult = decoder->tsc_ctc_ratio_n /
+						decoder->tsc_ctc_ratio_d;
+
+		/*
+		 * Allow for timestamps appearing to backwards because a TSC
+		 * packet has slipped past a MTC packet, so allow 2 MTC ticks
+		 * or ...
+		 */
+		decoder->tsc_slip = multdiv(2 << decoder->mtc_shift,
+					decoder->tsc_ctc_ratio_n,
+					decoder->tsc_ctc_ratio_d);
+	}
+	/* ... or 0x100 paranoia */
+	if (decoder->tsc_slip < 0x100)
+		decoder->tsc_slip = 0x100;
+
+	intel_pt_log("timestamp: mtc_shift %u\n", decoder->mtc_shift);
+	intel_pt_log("timestamp: tsc_ctc_ratio_n %u\n", decoder->tsc_ctc_ratio_n);
+	intel_pt_log("timestamp: tsc_ctc_ratio_d %u\n", decoder->tsc_ctc_ratio_d);
+	intel_pt_log("timestamp: tsc_ctc_mult %u\n", decoder->tsc_ctc_mult);
+	intel_pt_log("timestamp: tsc_slip %#x\n", decoder->tsc_slip);
+
 	return decoder;
 }
 
@@ -368,6 +419,7 @@ static inline void intel_pt_update_in_tx(struct intel_pt_decoder *decoder)
 static int intel_pt_bad_packet(struct intel_pt_decoder *decoder)
 {
 	intel_pt_clear_tx_flags(decoder);
+	decoder->have_tma = false;
 	decoder->pkt_len = 1;
 	decoder->pkt_step = 1;
 	intel_pt_decoder_log_packet(decoder);
@@ -400,6 +452,7 @@ static int intel_pt_get_data(struct intel_pt_decoder *decoder)
 		decoder->pkt_state = INTEL_PT_STATE_NO_PSB;
 		decoder->ref_timestamp = buffer.ref_timestamp;
 		decoder->timestamp = 0;
+		decoder->have_tma = false;
 		decoder->state.trace_nr = buffer.trace_nr;
 		intel_pt_log("Reference timestamp 0x%" PRIx64 "\n",
 			     decoder->ref_timestamp);
@@ -523,6 +576,7 @@ static uint64_t intel_pt_next_sample(struct intel_pt_decoder *decoder)
 	case INTEL_PT_PERIOD_TICKS:
 		return intel_pt_next_period(decoder);
 	case INTEL_PT_PERIOD_NONE:
+	case INTEL_PT_PERIOD_MTC:
 	default:
 		return 0;
 	}
@@ -542,6 +596,7 @@ static void intel_pt_sample_insn(struct intel_pt_decoder *decoder)
 		decoder->last_masked_timestamp = masked_timestamp;
 		break;
 	case INTEL_PT_PERIOD_NONE:
+	case INTEL_PT_PERIOD_MTC:
 	default:
 		break;
 	}
@@ -555,6 +610,9 @@ static int intel_pt_walk_insn(struct intel_pt_decoder *decoder,
 	uint64_t max_insn_cnt, insn_cnt = 0;
 	int err;
 
+	if (!decoder->mtc_insn)
+		decoder->mtc_insn = true;
+
 	max_insn_cnt = intel_pt_next_sample(decoder);
 
 	err = decoder->walk_insn(intel_pt_insn, &insn_cnt, &decoder->ip, ip,
@@ -861,6 +919,8 @@ static void intel_pt_calc_tsc_timestamp(struct intel_pt_decoder *decoder)
 {
 	uint64_t timestamp;
 
+	decoder->have_tma = false;
+
 	if (decoder->ref_timestamp) {
 		timestamp = decoder->packet.payload |
 			    (decoder->ref_timestamp & (0xffULL << 56));
@@ -878,17 +938,18 @@ static void intel_pt_calc_tsc_timestamp(struct intel_pt_decoder *decoder)
 	} else if (decoder->timestamp) {
 		timestamp = decoder->packet.payload |
 			    (decoder->timestamp & (0xffULL << 56));
+		decoder->tsc_timestamp = timestamp;
 		if (timestamp < decoder->timestamp &&
-		    decoder->timestamp - timestamp < 0x100) {
-			intel_pt_log_to("ERROR: Suppressing backwards timestamp",
+		    decoder->timestamp - timestamp < decoder->tsc_slip) {
+			intel_pt_log_to("Suppressing backwards timestamp",
 					timestamp);
 			timestamp = decoder->timestamp;
 		}
 		while (timestamp < decoder->timestamp) {
 			intel_pt_log_to("Wraparound timestamp", timestamp);
 			timestamp += (1ULL << 56);
+			decoder->tsc_timestamp = timestamp;
 		}
-		decoder->tsc_timestamp = timestamp;
 		decoder->timestamp = timestamp;
 		decoder->timestamp_insn_cnt = 0;
 	}
@@ -900,11 +961,73 @@ static int intel_pt_overflow(struct intel_pt_decoder *decoder)
 {
 	intel_pt_log("ERROR: Buffer overflow\n");
 	intel_pt_clear_tx_flags(decoder);
+	decoder->have_tma = false;
 	decoder->pkt_state = INTEL_PT_STATE_ERR_RESYNC;
 	decoder->overflow = true;
 	return -EOVERFLOW;
 }
 
+static void intel_pt_calc_tma(struct intel_pt_decoder *decoder)
+{
+	uint32_t ctc = decoder->packet.payload;
+	uint32_t fc = decoder->packet.count;
+	uint32_t ctc_rem = ctc & decoder->ctc_rem_mask;
+
+	if (!decoder->tsc_ctc_ratio_d)
+		return;
+
+	decoder->last_mtc = (ctc >> decoder->mtc_shift) & 0xff;
+	decoder->ctc_timestamp = decoder->tsc_timestamp - fc;
+	if (decoder->tsc_ctc_mult) {
+		decoder->ctc_timestamp -= ctc_rem * decoder->tsc_ctc_mult;
+	} else {
+		decoder->ctc_timestamp -= multdiv(ctc_rem,
+						  decoder->tsc_ctc_ratio_n,
+						  decoder->tsc_ctc_ratio_d);
+	}
+	decoder->ctc_delta = 0;
+	decoder->have_tma = true;
+	intel_pt_log("CTC timestamp " x64_fmt " last MTC %#x  CTC rem %#x\n",
+		     decoder->ctc_timestamp, decoder->last_mtc, ctc_rem);
+}
+
+static void intel_pt_calc_mtc_timestamp(struct intel_pt_decoder *decoder)
+{
+	uint64_t timestamp;
+	uint32_t mtc, mtc_delta;
+
+	if (!decoder->have_tma)
+		return;
+
+	mtc = decoder->packet.payload;
+
+	if (mtc > decoder->last_mtc)
+		mtc_delta = mtc - decoder->last_mtc;
+	else
+		mtc_delta = mtc + 256 - decoder->last_mtc;
+
+	decoder->ctc_delta += mtc_delta << decoder->mtc_shift;
+
+	if (decoder->tsc_ctc_mult) {
+		timestamp = decoder->ctc_timestamp +
+			    decoder->ctc_delta * decoder->tsc_ctc_mult;
+	} else {
+		timestamp = decoder->ctc_timestamp +
+			    multdiv(decoder->ctc_delta,
+				    decoder->tsc_ctc_ratio_n,
+				    decoder->tsc_ctc_ratio_d);
+	}
+
+	if (timestamp < decoder->timestamp)
+		intel_pt_log("Suppressing MTC timestamp " x64_fmt " less than current timestamp " x64_fmt "\n",
+			     timestamp, decoder->timestamp);
+	else
+		decoder->timestamp = timestamp;
+
+	decoder->timestamp_insn_cnt = 0;
+	decoder->last_mtc = mtc;
+}
+
 /* Walk PSB+ packets when already in sync. */
 static int intel_pt_walk_psbend(struct intel_pt_decoder *decoder)
 {
@@ -926,6 +1049,7 @@ static int intel_pt_walk_psbend(struct intel_pt_decoder *decoder)
 		case INTEL_PT_TRACESTOP:
 		case INTEL_PT_BAD:
 		case INTEL_PT_PSB:
+			decoder->have_tma = false;
 			intel_pt_log("ERROR: Unexpected packet\n");
 			return -EAGAIN;
 
@@ -937,6 +1061,7 @@ static int intel_pt_walk_psbend(struct intel_pt_decoder *decoder)
 			break;
 
 		case INTEL_PT_TMA:
+			intel_pt_calc_tma(decoder);
 			break;
 
 		case INTEL_PT_CBR:
@@ -961,6 +1086,9 @@ static int intel_pt_walk_psbend(struct intel_pt_decoder *decoder)
 			break;
 
 		case INTEL_PT_MTC:
+			intel_pt_calc_mtc_timestamp(decoder);
+			if (decoder->period_type == INTEL_PT_PERIOD_MTC)
+				decoder->state.type |= INTEL_PT_INSTRUCTION;
 			break;
 
 		case INTEL_PT_CYC:
@@ -1048,6 +1176,9 @@ static int intel_pt_walk_fup_tip(struct intel_pt_decoder *decoder)
 			break;
 
 		case INTEL_PT_MTC:
+			intel_pt_calc_mtc_timestamp(decoder);
+			if (decoder->period_type == INTEL_PT_PERIOD_MTC)
+				decoder->state.type |= INTEL_PT_INSTRUCTION;
 			break;
 
 		case INTEL_PT_CYC:
@@ -1159,13 +1290,31 @@ next:
 			break;
 
 		case INTEL_PT_MTC:
-			break;
+			intel_pt_calc_mtc_timestamp(decoder);
+			if (decoder->period_type != INTEL_PT_PERIOD_MTC)
+				break;
+			/*
+			 * Ensure that there has been an instruction since the
+			 * last MTC.
+			 */
+			if (!decoder->mtc_insn)
+				break;
+			decoder->mtc_insn = false;
+			/* Ensure that there is a timestamp */
+			if (!decoder->timestamp)
+				break;
+			decoder->state.type = INTEL_PT_INSTRUCTION;
+			decoder->state.from_ip = decoder->ip;
+			decoder->state.to_ip = 0;
+			decoder->mtc_insn = false;
+			return 0;
 
 		case INTEL_PT_TSC:
 			intel_pt_calc_tsc_timestamp(decoder);
 			break;
 
 		case INTEL_PT_TMA:
+			intel_pt_calc_tma(decoder);
 			break;
 
 		case INTEL_PT_CYC:
@@ -1237,6 +1386,7 @@ static int intel_pt_walk_psb(struct intel_pt_decoder *decoder)
 			break;
 
 		case INTEL_PT_MTC:
+			intel_pt_calc_mtc_timestamp(decoder);
 			break;
 
 		case INTEL_PT_TSC:
@@ -1244,6 +1394,7 @@ static int intel_pt_walk_psb(struct intel_pt_decoder *decoder)
 			break;
 
 		case INTEL_PT_TMA:
+			intel_pt_calc_tma(decoder);
 			break;
 
 		case INTEL_PT_CYC:
@@ -1267,6 +1418,7 @@ static int intel_pt_walk_psb(struct intel_pt_decoder *decoder)
 
 		case INTEL_PT_TRACESTOP:
 		case INTEL_PT_TNT:
+			decoder->have_tma = false;
 			intel_pt_log("ERROR: Unexpected packet\n");
 			if (decoder->ip)
 				decoder->pkt_state = INTEL_PT_STATE_ERR4;
@@ -1329,6 +1481,7 @@ static int intel_pt_walk_to_ip(struct intel_pt_decoder *decoder)
 			break;
 
 		case INTEL_PT_MTC:
+			intel_pt_calc_mtc_timestamp(decoder);
 			break;
 
 		case INTEL_PT_TSC:
@@ -1336,6 +1489,7 @@ static int intel_pt_walk_to_ip(struct intel_pt_decoder *decoder)
 			break;
 
 		case INTEL_PT_TMA:
+			intel_pt_calc_tma(decoder);
 			break;
 
 		case INTEL_PT_CYC:
diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h
index 56cc47baca11..02c38fec1c37 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h
@@ -36,6 +36,7 @@ enum intel_pt_period_type {
 	INTEL_PT_PERIOD_NONE,
 	INTEL_PT_PERIOD_INSTRUCTIONS,
 	INTEL_PT_PERIOD_TICKS,
+	INTEL_PT_PERIOD_MTC,
 };
 
 enum {
-- 
2.1.0


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

* [PATCH 10/16] perf tools: Add Intel PT support for using MTC packets
  2015-08-25 16:14 [GIT PULL 00/16] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (8 preceding siblings ...)
  2015-08-25 16:14 ` [PATCH 09/16] perf tools: Add Intel PT support for decoding MTC packets Arnaldo Carvalho de Melo
@ 2015-08-25 16:14 ` Arnaldo Carvalho de Melo
  2015-08-25 16:14 ` [PATCH 11/16] perf tools: Add Intel PT support for decoding CYC packets Arnaldo Carvalho de Melo
                   ` (6 subsequent siblings)
  16 siblings, 0 replies; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-08-25 16:14 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Adrian Hunter, Jiri Olsa, Arnaldo Carvalho de Melo

From: Adrian Hunter <adrian.hunter@intel.com>

MTC packets are a new Intel PT feature.

MTC packets provide finer grain timestamp information than TSC packets.

Support for this feature is indicated by:

  /sys/bus/event_source/devices/intel_pt/caps/mtc

which contains "1" if the feature is supported and "0" otherwise.

MTC packets can be requested using a PMU config term e.g. perf record -e
intel_pt/mtc/u sleep 1

The frequency of MTC packets can also be specified.  e.g. perf record -e
intel_pt/mtc,mtc_period=2/u sleep 1

The default value is 3 or the nearest lower value that is supported.  0
is always supported.

Valid values are given by:

/sys/bus/event_source/devices/intel_pt/caps/mtc_periods

which contains a hexadecimal value, the bits of which represent valid
values e.g. bit 2 set means value 2 is valid.

The value is converted to the MTC frequency as:

	CTC-frequency / (2 ^ value)

e.g. value 3 means one eighth of CTC-frequency

Where CTC is the hardware crystal clock, the frequency of which can be
related to TSC via values provided in cpuid leaf 0x15.

If an invalid value is entered, the error message will give a list of
valid values e.g.

	$ perf record -e intel_pt/mtc_period=15/u uname
	Invalid mtc_period for intel_pt. Valid values are: 0,3,6,9

tools/perf/Documentation/intel-pt.txt is updated in a later patch as
there are a number of new features being added.

For more information refer to the June 2015 or later Intel 64 and IA-32
Architectures SDM Chapter 36 Intel Processor Trace.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1437150840-31811-22-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/arch/x86/util/intel-pt.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/tools/perf/arch/x86/util/intel-pt.c b/tools/perf/arch/x86/util/intel-pt.c
index faae9289bcf6..a5de01dad868 100644
--- a/tools/perf/arch/x86/util/intel-pt.c
+++ b/tools/perf/arch/x86/util/intel-pt.c
@@ -190,17 +190,33 @@ static int intel_pt_pick_bit(int bits, int target)
 static u64 intel_pt_default_config(struct perf_pmu *intel_pt_pmu)
 {
 	char buf[256];
+	int mtc, mtc_periods = 0, mtc_period;
 	int psb_cyc, psb_periods, psb_period;
 	int pos = 0;
 	u64 config;
 
 	pos += scnprintf(buf + pos, sizeof(buf) - pos, "tsc");
 
+	if (perf_pmu__scan_file(intel_pt_pmu, "caps/mtc", "%d",
+				&mtc) != 1)
+		mtc = 1;
+
+	if (mtc) {
+		if (perf_pmu__scan_file(intel_pt_pmu, "caps/mtc_periods", "%x",
+					&mtc_periods) != 1)
+			mtc_periods = 0;
+		if (mtc_periods) {
+			mtc_period = intel_pt_pick_bit(mtc_periods, 3);
+			pos += scnprintf(buf + pos, sizeof(buf) - pos,
+					 ",mtc,mtc_period=%d", mtc_period);
+		}
+	}
+
 	if (perf_pmu__scan_file(intel_pt_pmu, "caps/psb_cyc", "%d",
 				&psb_cyc) != 1)
 		psb_cyc = 1;
 
-	if (psb_cyc) {
+	if (psb_cyc && mtc_periods) {
 		if (perf_pmu__scan_file(intel_pt_pmu, "caps/psb_periods", "%x",
 					&psb_periods) != 1)
 			psb_periods = 0;
@@ -454,9 +470,17 @@ out_err:
 static int intel_pt_validate_config(struct perf_pmu *intel_pt_pmu,
 				    struct perf_evsel *evsel)
 {
+	int err;
+
 	if (!evsel)
 		return 0;
 
+	err = intel_pt_val_config_term(intel_pt_pmu, "caps/mtc_periods",
+				       "mtc_period", "caps/mtc",
+				       evsel->attr.config);
+	if (err)
+		return err;
+
 	return intel_pt_val_config_term(intel_pt_pmu, "caps/psb_periods",
 					"psb_period", "caps/psb_cyc",
 					evsel->attr.config);
-- 
2.1.0


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

* [PATCH 11/16] perf tools: Add Intel PT support for decoding CYC packets
  2015-08-25 16:14 [GIT PULL 00/16] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (9 preceding siblings ...)
  2015-08-25 16:14 ` [PATCH 10/16] perf tools: Add Intel PT support for using " Arnaldo Carvalho de Melo
@ 2015-08-25 16:14 ` Arnaldo Carvalho de Melo
  2015-08-25 16:14 ` [PATCH 12/16] perf tools: Add Intel PT support for using " Arnaldo Carvalho de Melo
                   ` (5 subsequent siblings)
  16 siblings, 0 replies; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-08-25 16:14 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Adrian Hunter, Jiri Olsa, Arnaldo Carvalho de Melo

From: Adrian Hunter <adrian.hunter@intel.com>

CYC packets provide even finer grain timestamp information than MTC and
TSC packets.  A CYC packet contains the number of CPU cycles since the
last CYC packet.

This patch just adds decoder support.  The CPU frequency can be related
to TSC using the Maximum Non-Turbo Ratio in combination with the CBR
(core-to-bus ratio) packet.  However more accuracy is achieved by simply
interpolating the number of cycles between other timing packets like MTC
or TSC.  This patch takes the latter approach.

Support for a default value and validation of values is provided by a
later patch. Also documentation is updated in a separate patch.

For details refer to the June 2015 or later Intel 64 and IA-32
Architectures SDM Chapter 36 Intel Processor Trace.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1437150840-31811-23-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 .../perf/util/intel-pt-decoder/intel-pt-decoder.c  | 311 ++++++++++++++++++++-
 1 file changed, 306 insertions(+), 5 deletions(-)

diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
index f7119a11a4b6..0845c5e6ad1d 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
@@ -88,6 +88,7 @@ struct intel_pt_decoder {
 	bool mtc_insn;
 	bool pge;
 	bool have_tma;
+	bool have_cyc;
 	uint64_t pos;
 	uint64_t last_ip;
 	uint64_t ip;
@@ -98,6 +99,8 @@ struct intel_pt_decoder {
 	uint64_t ret_addr;
 	uint64_t ctc_timestamp;
 	uint64_t ctc_delta;
+	uint64_t cycle_cnt;
+	uint64_t cyc_ref_timestamp;
 	uint32_t last_mtc;
 	uint32_t tsc_ctc_ratio_n;
 	uint32_t tsc_ctc_ratio_d;
@@ -111,8 +114,13 @@ struct intel_pt_decoder {
 	struct intel_pt_pkt tnt;
 	int pkt_step;
 	int pkt_len;
+	int last_packet_type;
 	unsigned int cbr;
 	unsigned int max_non_turbo_ratio;
+	double max_non_turbo_ratio_fp;
+	double cbr_cyc_to_tsc;
+	double calc_cyc_to_tsc;
+	bool have_calc_cyc_to_tsc;
 	int exec_mode;
 	unsigned int insn_bytes;
 	uint64_t sign_bit;
@@ -189,7 +197,8 @@ struct intel_pt_decoder *intel_pt_decoder_new(struct intel_pt_params *params)
 	decoder->period             = params->period;
 	decoder->period_type        = params->period_type;
 
-	decoder->max_non_turbo_ratio = params->max_non_turbo_ratio;
+	decoder->max_non_turbo_ratio    = params->max_non_turbo_ratio;
+	decoder->max_non_turbo_ratio_fp = params->max_non_turbo_ratio;
 
 	intel_pt_setup_period(decoder);
 
@@ -514,10 +523,247 @@ static int intel_pt_get_split_packet(struct intel_pt_decoder *decoder)
 	return ret;
 }
 
+struct intel_pt_pkt_info {
+	struct intel_pt_decoder	  *decoder;
+	struct intel_pt_pkt       packet;
+	uint64_t                  pos;
+	int                       pkt_len;
+	int                       last_packet_type;
+	void                      *data;
+};
+
+typedef int (*intel_pt_pkt_cb_t)(struct intel_pt_pkt_info *pkt_info);
+
+/* Lookahead packets in current buffer */
+static int intel_pt_pkt_lookahead(struct intel_pt_decoder *decoder,
+				  intel_pt_pkt_cb_t cb, void *data)
+{
+	struct intel_pt_pkt_info pkt_info;
+	const unsigned char *buf = decoder->buf;
+	size_t len = decoder->len;
+	int ret;
+
+	pkt_info.decoder          = decoder;
+	pkt_info.pos              = decoder->pos;
+	pkt_info.pkt_len          = decoder->pkt_step;
+	pkt_info.last_packet_type = decoder->last_packet_type;
+	pkt_info.data             = data;
+
+	while (1) {
+		do {
+			pkt_info.pos += pkt_info.pkt_len;
+			buf          += pkt_info.pkt_len;
+			len          -= pkt_info.pkt_len;
+
+			if (!len)
+				return INTEL_PT_NEED_MORE_BYTES;
+
+			ret = intel_pt_get_packet(buf, len, &pkt_info.packet);
+			if (!ret)
+				return INTEL_PT_NEED_MORE_BYTES;
+			if (ret < 0)
+				return ret;
+
+			pkt_info.pkt_len = ret;
+		} while (pkt_info.packet.type == INTEL_PT_PAD);
+
+		ret = cb(&pkt_info);
+		if (ret)
+			return 0;
+
+		pkt_info.last_packet_type = pkt_info.packet.type;
+	}
+}
+
+struct intel_pt_calc_cyc_to_tsc_info {
+	uint64_t        cycle_cnt;
+	unsigned int    cbr;
+	uint32_t        last_mtc;
+	uint64_t        ctc_timestamp;
+	uint64_t        ctc_delta;
+	uint64_t        tsc_timestamp;
+	uint64_t        timestamp;
+	bool            have_tma;
+	bool            from_mtc;
+	double          cbr_cyc_to_tsc;
+};
+
+static int intel_pt_calc_cyc_cb(struct intel_pt_pkt_info *pkt_info)
+{
+	struct intel_pt_decoder *decoder = pkt_info->decoder;
+	struct intel_pt_calc_cyc_to_tsc_info *data = pkt_info->data;
+	uint64_t timestamp;
+	double cyc_to_tsc;
+	unsigned int cbr;
+	uint32_t mtc, mtc_delta, ctc, fc, ctc_rem;
+
+	switch (pkt_info->packet.type) {
+	case INTEL_PT_TNT:
+	case INTEL_PT_TIP_PGE:
+	case INTEL_PT_TIP:
+	case INTEL_PT_FUP:
+	case INTEL_PT_PSB:
+	case INTEL_PT_PIP:
+	case INTEL_PT_MODE_EXEC:
+	case INTEL_PT_MODE_TSX:
+	case INTEL_PT_PSBEND:
+	case INTEL_PT_PAD:
+	case INTEL_PT_VMCS:
+	case INTEL_PT_MNT:
+		return 0;
+
+	case INTEL_PT_MTC:
+		if (!data->have_tma)
+			return 0;
+
+		mtc = pkt_info->packet.payload;
+		if (mtc > data->last_mtc)
+			mtc_delta = mtc - data->last_mtc;
+		else
+			mtc_delta = mtc + 256 - data->last_mtc;
+		data->ctc_delta += mtc_delta << decoder->mtc_shift;
+		data->last_mtc = mtc;
+
+		if (decoder->tsc_ctc_mult) {
+			timestamp = data->ctc_timestamp +
+				data->ctc_delta * decoder->tsc_ctc_mult;
+		} else {
+			timestamp = data->ctc_timestamp +
+				multdiv(data->ctc_delta,
+					decoder->tsc_ctc_ratio_n,
+					decoder->tsc_ctc_ratio_d);
+		}
+
+		if (timestamp < data->timestamp)
+			return 1;
+
+		if (pkt_info->last_packet_type != INTEL_PT_CYC) {
+			data->timestamp = timestamp;
+			return 0;
+		}
+
+		break;
+
+	case INTEL_PT_TSC:
+		timestamp = pkt_info->packet.payload |
+			    (data->timestamp & (0xffULL << 56));
+		if (data->from_mtc && timestamp < data->timestamp &&
+		    data->timestamp - timestamp < decoder->tsc_slip)
+			return 1;
+		while (timestamp < data->timestamp)
+			timestamp += (1ULL << 56);
+		if (pkt_info->last_packet_type != INTEL_PT_CYC) {
+			if (data->from_mtc)
+				return 1;
+			data->tsc_timestamp = timestamp;
+			data->timestamp = timestamp;
+			return 0;
+		}
+		break;
+
+	case INTEL_PT_TMA:
+		if (data->from_mtc)
+			return 1;
+
+		if (!decoder->tsc_ctc_ratio_d)
+			return 0;
+
+		ctc = pkt_info->packet.payload;
+		fc = pkt_info->packet.count;
+		ctc_rem = ctc & decoder->ctc_rem_mask;
+
+		data->last_mtc = (ctc >> decoder->mtc_shift) & 0xff;
+
+		data->ctc_timestamp = data->tsc_timestamp - fc;
+		if (decoder->tsc_ctc_mult) {
+			data->ctc_timestamp -= ctc_rem * decoder->tsc_ctc_mult;
+		} else {
+			data->ctc_timestamp -=
+				multdiv(ctc_rem, decoder->tsc_ctc_ratio_n,
+					decoder->tsc_ctc_ratio_d);
+		}
+
+		data->ctc_delta = 0;
+		data->have_tma = true;
+
+		return 0;
+
+	case INTEL_PT_CYC:
+		data->cycle_cnt += pkt_info->packet.payload;
+		return 0;
+
+	case INTEL_PT_CBR:
+		cbr = pkt_info->packet.payload;
+		if (data->cbr && data->cbr != cbr)
+			return 1;
+		data->cbr = cbr;
+		data->cbr_cyc_to_tsc = decoder->max_non_turbo_ratio_fp / cbr;
+		return 0;
+
+	case INTEL_PT_TIP_PGD:
+	case INTEL_PT_TRACESTOP:
+	case INTEL_PT_OVF:
+	case INTEL_PT_BAD: /* Does not happen */
+	default:
+		return 1;
+	}
+
+	if (!data->cbr && decoder->cbr) {
+		data->cbr = decoder->cbr;
+		data->cbr_cyc_to_tsc = decoder->cbr_cyc_to_tsc;
+	}
+
+	if (!data->cycle_cnt)
+		return 1;
+
+	cyc_to_tsc = (double)(timestamp - decoder->timestamp) / data->cycle_cnt;
+
+	if (data->cbr && cyc_to_tsc > data->cbr_cyc_to_tsc &&
+	    cyc_to_tsc / data->cbr_cyc_to_tsc > 1.25) {
+		intel_pt_log("Timestamp: calculated %g TSC ticks per cycle too big (c.f. CBR-based value %g), pos " x64_fmt "\n",
+			     cyc_to_tsc, data->cbr_cyc_to_tsc, pkt_info->pos);
+		return 1;
+	}
+
+	decoder->calc_cyc_to_tsc = cyc_to_tsc;
+	decoder->have_calc_cyc_to_tsc = true;
+
+	if (data->cbr) {
+		intel_pt_log("Timestamp: calculated %g TSC ticks per cycle c.f. CBR-based value %g, pos " x64_fmt "\n",
+			     cyc_to_tsc, data->cbr_cyc_to_tsc, pkt_info->pos);
+	} else {
+		intel_pt_log("Timestamp: calculated %g TSC ticks per cycle c.f. unknown CBR-based value, pos " x64_fmt "\n",
+			     cyc_to_tsc, pkt_info->pos);
+	}
+
+	return 1;
+}
+
+static void intel_pt_calc_cyc_to_tsc(struct intel_pt_decoder *decoder,
+				     bool from_mtc)
+{
+	struct intel_pt_calc_cyc_to_tsc_info data = {
+		.cycle_cnt      = 0,
+		.cbr            = 0,
+		.last_mtc       = decoder->last_mtc,
+		.ctc_timestamp  = decoder->ctc_timestamp,
+		.ctc_delta      = decoder->ctc_delta,
+		.tsc_timestamp  = decoder->tsc_timestamp,
+		.timestamp      = decoder->timestamp,
+		.have_tma       = decoder->have_tma,
+		.from_mtc       = from_mtc,
+		.cbr_cyc_to_tsc = 0,
+	};
+
+	intel_pt_pkt_lookahead(decoder, intel_pt_calc_cyc_cb, &data);
+}
+
 static int intel_pt_get_next_packet(struct intel_pt_decoder *decoder)
 {
 	int ret;
 
+	decoder->last_packet_type = decoder->packet.type;
+
 	do {
 		decoder->pos += decoder->pkt_step;
 		decoder->buf += decoder->pkt_step;
@@ -954,6 +1200,13 @@ static void intel_pt_calc_tsc_timestamp(struct intel_pt_decoder *decoder)
 		decoder->timestamp_insn_cnt = 0;
 	}
 
+	if (decoder->last_packet_type == INTEL_PT_CYC) {
+		decoder->cyc_ref_timestamp = decoder->timestamp;
+		decoder->cycle_cnt = 0;
+		decoder->have_calc_cyc_to_tsc = false;
+		intel_pt_calc_cyc_to_tsc(decoder, false);
+	}
+
 	intel_pt_log_to("Setting timestamp", decoder->timestamp);
 }
 
@@ -962,6 +1215,7 @@ static int intel_pt_overflow(struct intel_pt_decoder *decoder)
 	intel_pt_log("ERROR: Buffer overflow\n");
 	intel_pt_clear_tx_flags(decoder);
 	decoder->have_tma = false;
+	decoder->cbr = 0;
 	decoder->pkt_state = INTEL_PT_STATE_ERR_RESYNC;
 	decoder->overflow = true;
 	return -EOVERFLOW;
@@ -1026,6 +1280,49 @@ static void intel_pt_calc_mtc_timestamp(struct intel_pt_decoder *decoder)
 
 	decoder->timestamp_insn_cnt = 0;
 	decoder->last_mtc = mtc;
+
+	if (decoder->last_packet_type == INTEL_PT_CYC) {
+		decoder->cyc_ref_timestamp = decoder->timestamp;
+		decoder->cycle_cnt = 0;
+		decoder->have_calc_cyc_to_tsc = false;
+		intel_pt_calc_cyc_to_tsc(decoder, true);
+	}
+}
+
+static void intel_pt_calc_cbr(struct intel_pt_decoder *decoder)
+{
+	unsigned int cbr = decoder->packet.payload;
+
+	if (decoder->cbr == cbr)
+		return;
+
+	decoder->cbr = cbr;
+	decoder->cbr_cyc_to_tsc = decoder->max_non_turbo_ratio_fp / cbr;
+}
+
+static void intel_pt_calc_cyc_timestamp(struct intel_pt_decoder *decoder)
+{
+	uint64_t timestamp = decoder->cyc_ref_timestamp;
+
+	decoder->have_cyc = true;
+
+	decoder->cycle_cnt += decoder->packet.payload;
+
+	if (!decoder->cyc_ref_timestamp)
+		return;
+
+	if (decoder->have_calc_cyc_to_tsc)
+		timestamp += decoder->cycle_cnt * decoder->calc_cyc_to_tsc;
+	else if (decoder->cbr)
+		timestamp += decoder->cycle_cnt * decoder->cbr_cyc_to_tsc;
+	else
+		return;
+
+	if (timestamp < decoder->timestamp)
+		intel_pt_log("Suppressing CYC timestamp " x64_fmt " less than current timestamp " x64_fmt "\n",
+			     timestamp, decoder->timestamp);
+	else
+		decoder->timestamp = timestamp;
 }
 
 /* Walk PSB+ packets when already in sync. */
@@ -1065,7 +1362,7 @@ static int intel_pt_walk_psbend(struct intel_pt_decoder *decoder)
 			break;
 
 		case INTEL_PT_CBR:
-			decoder->cbr = decoder->packet.payload;
+			intel_pt_calc_cbr(decoder);
 			break;
 
 		case INTEL_PT_MODE_EXEC:
@@ -1182,6 +1479,7 @@ static int intel_pt_walk_fup_tip(struct intel_pt_decoder *decoder)
 			break;
 
 		case INTEL_PT_CYC:
+			intel_pt_calc_cyc_timestamp(decoder);
 			break;
 
 		case INTEL_PT_MODE_EXEC:
@@ -1318,10 +1616,11 @@ next:
 			break;
 
 		case INTEL_PT_CYC:
+			intel_pt_calc_cyc_timestamp(decoder);
 			break;
 
 		case INTEL_PT_CBR:
-			decoder->cbr = decoder->packet.payload;
+			intel_pt_calc_cbr(decoder);
 			break;
 
 		case INTEL_PT_MODE_EXEC:
@@ -1398,10 +1697,11 @@ static int intel_pt_walk_psb(struct intel_pt_decoder *decoder)
 			break;
 
 		case INTEL_PT_CYC:
+			intel_pt_calc_cyc_timestamp(decoder);
 			break;
 
 		case INTEL_PT_CBR:
-			decoder->cbr = decoder->packet.payload;
+			intel_pt_calc_cbr(decoder);
 			break;
 
 		case INTEL_PT_PIP:
@@ -1493,10 +1793,11 @@ static int intel_pt_walk_to_ip(struct intel_pt_decoder *decoder)
 			break;
 
 		case INTEL_PT_CYC:
+			intel_pt_calc_cyc_timestamp(decoder);
 			break;
 
 		case INTEL_PT_CBR:
-			decoder->cbr = decoder->packet.payload;
+			intel_pt_calc_cbr(decoder);
 			break;
 
 		case INTEL_PT_PIP:
-- 
2.1.0


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

* [PATCH 12/16] perf tools: Add Intel PT support for using CYC packets
  2015-08-25 16:14 [GIT PULL 00/16] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (10 preceding siblings ...)
  2015-08-25 16:14 ` [PATCH 11/16] perf tools: Add Intel PT support for decoding CYC packets Arnaldo Carvalho de Melo
@ 2015-08-25 16:14 ` Arnaldo Carvalho de Melo
  2015-08-25 16:14 ` [PATCH 13/16] perf tools: Add Intel PT support for decoding TRACESTOP packets Arnaldo Carvalho de Melo
                   ` (4 subsequent siblings)
  16 siblings, 0 replies; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-08-25 16:14 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Adrian Hunter, Jiri Olsa, Arnaldo Carvalho de Melo

From: Adrian Hunter <adrian.hunter@intel.com>

CYC packets are a new Intel PT feature.

CYC packets provide even finer grain timestamp information than MTC and
TSC packets.  A CYC packet contains the number of CPU cycles since the
last CYC packet. Unlike MTC and TSC packets, CYC packets are only sent
when another packet is also sent.

Support for this feature is indicated by:

/sys/bus/event_source/devices/intel_pt/caps/psb_cyc

which contains "1" if the feature is supported and "0" otherwise.

CYC packets can be requested using a PMU config term e.g. perf record -e
intel_pt/cyc/u sleep 1

The frequency of CYC packets can also be specified.  e.g. perf record -e
intel_pt/cyc,cyc_thresh=2/u sleep 1

CYC packets are not requested by default.

Valid cyc_thresh values are given by:

/sys/bus/event_source/devices/intel_pt/caps/cycle_thresholds

which contains a hexadecimal value, the bits of which represent valid
values e.g. bit 2 set means value 2 is valid.

The value represents the minimum number of CPU cycles that must have
passed before a CYC packet can be sent.  The number of CPU cycles is:

    2 ^ (value - 1)

e.g. value 4 means 8 CPU cycles must pass before a CYC packet can be
sent.  Note a CYC packet is still only sent when another packet is sent,
not at, e.g. every 8 CPU cycles.

If an invalid value is entered, the error message will give a list of
valid values e.g.

    $ perf record -e intel_pt/cyc,cyc_thresh=15/u uname
    Invalid cyc_thresh for intel_pt. Valid values are: 0-12

tools/perf/Documentation/intel-pt.txt is updated in a later patch as
there are a number of new features being added.

For more information refer to the June 2015 or later Intel 64 and IA-32
Architectures SDM Chapter 36 Intel Processor Trace.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1437150840-31811-24-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/arch/x86/util/intel-pt.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/tools/perf/arch/x86/util/intel-pt.c b/tools/perf/arch/x86/util/intel-pt.c
index a5de01dad868..2ca10d796c0b 100644
--- a/tools/perf/arch/x86/util/intel-pt.c
+++ b/tools/perf/arch/x86/util/intel-pt.c
@@ -475,6 +475,12 @@ static int intel_pt_validate_config(struct perf_pmu *intel_pt_pmu,
 	if (!evsel)
 		return 0;
 
+	err = intel_pt_val_config_term(intel_pt_pmu, "caps/cycle_thresholds",
+				       "cyc_thresh", "caps/psb_cyc",
+				       evsel->attr.config);
+	if (err)
+		return err;
+
 	err = intel_pt_val_config_term(intel_pt_pmu, "caps/mtc_periods",
 				       "mtc_period", "caps/mtc",
 				       evsel->attr.config);
-- 
2.1.0


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

* [PATCH 13/16] perf tools: Add Intel PT support for decoding TRACESTOP packets
  2015-08-25 16:14 [GIT PULL 00/16] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (11 preceding siblings ...)
  2015-08-25 16:14 ` [PATCH 12/16] perf tools: Add Intel PT support for using " Arnaldo Carvalho de Melo
@ 2015-08-25 16:14 ` Arnaldo Carvalho de Melo
  2015-08-25 16:14 ` [PATCH 14/16] perf tools: Update Intel PT documentation Arnaldo Carvalho de Melo
                   ` (3 subsequent siblings)
  16 siblings, 0 replies; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-08-25 16:14 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Adrian Hunter, Jiri Olsa, Arnaldo Carvalho de Melo

From: Adrian Hunter <adrian.hunter@intel.com>

A TRACESTOP packet is produced when an Intel PT trace enters a defined
region of the address space at which point the tracing stops.

This patch just adds decoder support.

Support for specifying TRACESTOP regions is left until later.

For details refer to the June 2015 or later Intel 64 and IA-32
Architectures SDM Chapter 36 Intel Processor Trace.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1437150840-31811-25-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/intel-pt-decoder/intel-pt-decoder.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
index 0845c5e6ad1d..22ba50224319 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.c
@@ -1572,6 +1572,10 @@ next:
 			return intel_pt_walk_fup_tip(decoder);
 
 		case INTEL_PT_TRACESTOP:
+			decoder->pge = false;
+			decoder->continuous_period = false;
+			intel_pt_clear_tx_flags(decoder);
+			decoder->have_tma = false;
 			break;
 
 		case INTEL_PT_PSB:
@@ -1717,6 +1721,9 @@ static int intel_pt_walk_psb(struct intel_pt_decoder *decoder)
 			break;
 
 		case INTEL_PT_TRACESTOP:
+			decoder->pge = false;
+			decoder->continuous_period = false;
+			intel_pt_clear_tx_flags(decoder);
 		case INTEL_PT_TNT:
 			decoder->have_tma = false;
 			intel_pt_log("ERROR: Unexpected packet\n");
@@ -1819,6 +1826,10 @@ static int intel_pt_walk_to_ip(struct intel_pt_decoder *decoder)
 			return intel_pt_bug(decoder);
 
 		case INTEL_PT_TRACESTOP:
+			decoder->pge = false;
+			decoder->continuous_period = false;
+			intel_pt_clear_tx_flags(decoder);
+			decoder->have_tma = false;
 			break;
 
 		case INTEL_PT_PSB:
-- 
2.1.0


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

* [PATCH 14/16] perf tools: Update Intel PT documentation
  2015-08-25 16:14 [GIT PULL 00/16] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (12 preceding siblings ...)
  2015-08-25 16:14 ` [PATCH 13/16] perf tools: Add Intel PT support for decoding TRACESTOP packets Arnaldo Carvalho de Melo
@ 2015-08-25 16:14 ` Arnaldo Carvalho de Melo
  2015-08-25 16:14 ` [PATCH 15/16] perf probe: Prevent segfault when reading probe point with absolute address Arnaldo Carvalho de Melo
                   ` (2 subsequent siblings)
  16 siblings, 0 replies; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-08-25 16:14 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Adrian Hunter, Jiri Olsa, Arnaldo Carvalho de Melo

From: Adrian Hunter <adrian.hunter@intel.com>

Update Intel PT documentation to describe new features.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1437150840-31811-26-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/Documentation/intel-pt.txt | 194 ++++++++++++++++++++++++++++++++--
 1 file changed, 186 insertions(+), 8 deletions(-)

diff --git a/tools/perf/Documentation/intel-pt.txt b/tools/perf/Documentation/intel-pt.txt
index 2866b62eb293..4a0501d7a3b4 100644
--- a/tools/perf/Documentation/intel-pt.txt
+++ b/tools/perf/Documentation/intel-pt.txt
@@ -142,19 +142,21 @@ which is the same as
 
 	-e intel_pt/tsc=1,noretcomp=0/
 
+Note there are now new config terms - see section 'config terms' further below.
+
 The config terms are listed in /sys/devices/intel_pt/format.  They are bit
 fields within the config member of the struct perf_event_attr which is
 passed to the kernel by the perf_event_open system call.  They correspond to bit
 fields in the IA32_RTIT_CTL MSR.  Here is a list of them and their definitions:
 
-	$ for f in `ls /sys/devices/intel_pt/format`;do
-	> echo $f
-	> cat /sys/devices/intel_pt/format/$f
-	> done
-	noretcomp
-	config:11
-	tsc
-	config:10
+	$ grep -H . /sys/bus/event_source/devices/intel_pt/format/*
+	/sys/bus/event_source/devices/intel_pt/format/cyc:config:1
+	/sys/bus/event_source/devices/intel_pt/format/cyc_thresh:config:19-22
+	/sys/bus/event_source/devices/intel_pt/format/mtc:config:9
+	/sys/bus/event_source/devices/intel_pt/format/mtc_period:config:14-17
+	/sys/bus/event_source/devices/intel_pt/format/noretcomp:config:11
+	/sys/bus/event_source/devices/intel_pt/format/psb_period:config:24-27
+	/sys/bus/event_source/devices/intel_pt/format/tsc:config:10
 
 Note that the default config must be overridden for each term i.e.
 
@@ -209,9 +211,185 @@ perf_event_attr is displayed if the -vv option is used e.g.
 	------------------------------------------------------------
 
 
+config terms
+------------
+
+The June 2015 version of Intel 64 and IA-32 Architectures Software Developer
+Manuals, Chapter 36 Intel Processor Trace, defined new Intel PT features.
+Some of the features are reflect in new config terms.  All the config terms are
+described below.
+
+tsc		Always supported.  Produces TSC timestamp packets to provide
+		timing information.  In some cases it is possible to decode
+		without timing information, for example a per-thread context
+		that does not overlap executable memory maps.
+
+		The default config selects tsc (i.e. tsc=1).
+
+noretcomp	Always supported.  Disables "return compression" so a TIP packet
+		is produced when a function returns.  Causes more packets to be
+		produced but might make decoding more reliable.
+
+		The default config does not select noretcomp (i.e. noretcomp=0).
+
+psb_period	Allows the frequency of PSB packets to be specified.
+
+		The PSB packet is a synchronization packet that provides a
+		starting point for decoding or recovery from errors.
+
+		Support for psb_period is indicated by:
+
+			/sys/bus/event_source/devices/intel_pt/caps/psb_cyc
+
+		which contains "1" if the feature is supported and "0"
+		otherwise.
+
+		Valid values are given by:
+
+			/sys/bus/event_source/devices/intel_pt/caps/psb_periods
+
+		which contains a hexadecimal value, the bits of which represent
+		valid values e.g. bit 2 set means value 2 is valid.
+
+		The psb_period value is converted to the approximate number of
+		trace bytes between PSB packets as:
+
+			2 ^ (value + 11)
+
+		e.g. value 3 means 16KiB bytes between PSBs
+
+		If an invalid value is entered, the error message
+		will give a list of valid values e.g.
+
+			$ perf record -e intel_pt/psb_period=15/u uname
+			Invalid psb_period for intel_pt. Valid values are: 0-5
+
+		If MTC packets are selected, the default config selects a value
+		of 3 (i.e. psb_period=3) or the nearest lower value that is
+		supported (0 is always supported).  Otherwise the default is 0.
+
+		If decoding is expected to be reliable and the buffer is large
+		then a large PSB period can be used.
+
+		Because a TSC packet is produced with PSB, the PSB period can
+		also affect the granularity to timing information in the absence
+		of MTC or CYC.
+
+mtc		Produces MTC timing packets.
+
+		MTC packets provide finer grain timestamp information than TSC
+		packets.  MTC packets record time using the hardware crystal
+		clock (CTC) which is related to TSC packets using a TMA packet.
+
+		Support for this feature is indicated by:
+
+			/sys/bus/event_source/devices/intel_pt/caps/mtc
+
+		which contains "1" if the feature is supported and
+		"0" otherwise.
+
+		The frequency of MTC packets can also be specified - see
+		mtc_period below.
+
+mtc_period	Specifies how frequently MTC packets are produced - see mtc
+		above for how to determine if MTC packets are supported.
+
+		Valid values are given by:
+
+			/sys/bus/event_source/devices/intel_pt/caps/mtc_periods
+
+		which contains a hexadecimal value, the bits of which represent
+		valid values e.g. bit 2 set means value 2 is valid.
+
+		The mtc_period value is converted to the MTC frequency as:
+
+			CTC-frequency / (2 ^ value)
+
+		e.g. value 3 means one eighth of CTC-frequency
+
+		Where CTC is the hardware crystal clock, the frequency of which
+		can be related to TSC via values provided in cpuid leaf 0x15.
+
+		If an invalid value is entered, the error message
+		will give a list of valid values e.g.
+
+			$ perf record -e intel_pt/mtc_period=15/u uname
+			Invalid mtc_period for intel_pt. Valid values are: 0,3,6,9
+
+		The default value is 3 or the nearest lower value
+		that is supported (0 is always supported).
+
+cyc		Produces CYC timing packets.
+
+		CYC packets provide even finer grain timestamp information than
+		MTC and TSC packets.  A CYC packet contains the number of CPU
+		cycles since the last CYC packet. Unlike MTC and TSC packets,
+		CYC packets are only sent when another packet is also sent.
+
+		Support for this feature is indicated by:
+
+			/sys/bus/event_source/devices/intel_pt/caps/psb_cyc
+
+		which contains "1" if the feature is supported and
+		"0" otherwise.
+
+		The number of CYC packets produced can be reduced by specifying
+		a threshold - see cyc_thresh below.
+
+cyc_thresh	Specifies how frequently CYC packets are produced - see cyc
+		above for how to determine if CYC packets are supported.
+
+		Valid cyc_thresh values are given by:
+
+			/sys/bus/event_source/devices/intel_pt/caps/cycle_thresholds
+
+		which contains a hexadecimal value, the bits of which represent
+		valid values e.g. bit 2 set means value 2 is valid.
+
+		The cyc_thresh value represents the minimum number of CPU cycles
+		that must have passed before a CYC packet can be sent.  The
+		number of CPU cycles is:
+
+			2 ^ (value - 1)
+
+		e.g. value 4 means 8 CPU cycles must pass before a CYC packet
+		can be sent.  Note a CYC packet is still only sent when another
+		packet is sent, not at, e.g. every 8 CPU cycles.
+
+		If an invalid value is entered, the error message
+		will give a list of valid values e.g.
+
+			$ perf record -e intel_pt/cyc,cyc_thresh=15/u uname
+			Invalid cyc_thresh for intel_pt. Valid values are: 0-12
+
+		CYC packets are not requested by default.
+
+no_force_psb	This is a driver option and is not in the IA32_RTIT_CTL MSR.
+
+		It stops the driver resetting the byte count to zero whenever
+		enabling the trace (for example on context switches) which in
+		turn results in no PSB being forced.  However some processors
+		will produce a PSB anyway.
+
+		In any case, there is still a PSB when the trace is enabled for
+		the first time.
+
+		no_force_psb can be used to slightly decrease the trace size but
+		may make it harder for the decoder to recover from errors.
+
+		no_force_psb is not selected by default.
+
+
 new snapshot option
 -------------------
 
+The difference between full trace and snapshot from the kernel's perspective is
+that in full trace we don't overwrite trace data that the user hasn't collected
+yet (and indicated that by advancing aux_tail), whereas in snapshot mode we let
+the trace run and overwrite older data in the buffer so that whenever something
+interesting happens, we can stop it and grab a snapshot of what was going on
+around that interesting moment.
+
 To select snapshot mode a new option has been added:
 
 	-S
-- 
2.1.0


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

* [PATCH 15/16] perf probe: Prevent segfault when reading probe point with absolute address
  2015-08-25 16:14 [GIT PULL 00/16] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (13 preceding siblings ...)
  2015-08-25 16:14 ` [PATCH 14/16] perf tools: Update Intel PT documentation Arnaldo Carvalho de Melo
@ 2015-08-25 16:14 ` Arnaldo Carvalho de Melo
  2015-08-25 16:14 ` [PATCH 16/16] perf probe: Support probing at absolute addresses Arnaldo Carvalho de Melo
  2015-08-26 13:39 ` [GIT PULL 00/16] perf/core improvements and fixes Arnaldo Carvalho de Melo
  16 siblings, 0 replies; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-08-25 16:14 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Wang Nan, Masami Hiramatsu, Namhyung Kim, pi3orama,
	Arnaldo Carvalho de Melo

From: Wang Nan <wangnan0@huawei.com>

'perf probe -l' panic if there is a manually inserted probing point with
absolute address. For example:

  # echo 'p:probe/abs_ffffffff811e6615 0xffffffff811e6615' > /sys/kernel/debug/tracing/kprobe_events
  # perf probe -l
  Segmentation fault (core dumped)

This patch fix this problem by considering the situation that
"tp->symbol == NULL" in find_perf_probe_point_from_dwarf() and
find_perf_probe_point_from_map().

After this patch:

  # perf probe -l
  probe:abs_ffffffff811e6615 (on SyS_write+5@fs/read_write.c)

And when debug info is missing:

  # rm -rf ~/.debug
  # mv /lib/modules/4.2.0-rc1+/build/vmlinux /lib/modules/4.2.0-rc1+/build/vmlinux.bak
  # perf probe -l
  probe:abs_ffffffff811e6615 (on sys_write+5)

Signed-off-by: Wang Nan <wangnan0@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: pi3orama@163.com
Link: http://lkml.kernel.org/r/1440509256-193590-1-git-send-email-wangnan0@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/probe-event.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index f07374bc9c5a..6c7e538c9b8b 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -515,7 +515,7 @@ static int find_perf_probe_point_from_dwarf(struct probe_trace_point *tp,
 		if (ret < 0)
 			goto error;
 		addr += stext;
-	} else {
+	} else if (tp->symbol) {
 		addr = kernel_get_symbol_address_by_name(tp->symbol, false);
 		if (addr == 0)
 			goto error;
@@ -1815,17 +1815,17 @@ static int find_perf_probe_point_from_map(struct probe_trace_point *tp,
 {
 	struct symbol *sym = NULL;
 	struct map *map;
-	u64 addr;
+	u64 addr = tp->address;
 	int ret = -ENOENT;
 
 	if (!is_kprobe) {
 		map = dso__new_map(tp->module);
 		if (!map)
 			goto out;
-		addr = tp->address;
 		sym = map__find_symbol(map, addr, NULL);
 	} else {
-		addr = kernel_get_symbol_address_by_name(tp->symbol, true);
+		if (tp->symbol)
+			addr = kernel_get_symbol_address_by_name(tp->symbol, true);
 		if (addr) {
 			addr += tp->offset;
 			sym = __find_kernel_function(addr, &map);
-- 
2.1.0


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

* [PATCH 16/16] perf probe: Support probing at absolute addresses
  2015-08-25 16:14 [GIT PULL 00/16] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (14 preceding siblings ...)
  2015-08-25 16:14 ` [PATCH 15/16] perf probe: Prevent segfault when reading probe point with absolute address Arnaldo Carvalho de Melo
@ 2015-08-25 16:14 ` Arnaldo Carvalho de Melo
  2015-08-26  0:00   ` 平松雅巳 / HIRAMATU,MASAMI
  2015-08-26 13:39 ` [GIT PULL 00/16] perf/core improvements and fixes Arnaldo Carvalho de Melo
  16 siblings, 1 reply; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-08-25 16:14 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Wang Nan, Masami Hiramatsu, Namhyung Kim, pi3orama,
	Arnaldo Carvalho de Melo

From: Wang Nan <wangnan0@huawei.com>

It should be useful to allow 'perf probe' probe at absolute offsets of a
target.

For example, when (u)probing at a instruction of a shared object in an
embedded system where debuginfo is not available but we know the offset
of that instruction by manually digging.

This patch enables following perf probe command syntax:

  # perf probe +0xffffffff811e6615

And

  # perf probe /lib/x86_64-linux-gnu/libc-2.19.so +0xeb860

In the above example, we don't need a anchor symbol, so it is possible
to compute absolute addresses using other methods and then use 'perf
probe' to create the probing points.

Committer note:

One can as well specify a name, so that the probe doesn't get assigned a
generic one starting with abs_, i.e. if we use as described above we
get:

  [root@zoo ~]# readelf -sW  /lib64/libc-2.20.so | grep -w malloc
    1175: 00000000000830f0   300 FUNC    GLOBAL DEFAULT   12 malloc@@GLIBC_2.2.5
     813: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS malloc.c
    5276: 00000000000830f0   300 FUNC    GLOBAL DEFAULT   12 malloc
  [root@zoo ~]#
  [root@zoo ~]# perf probe /lib64/libc-2.20.so +0x830f0
  Added new event:
    probe_libc:abs_830f0 (on 0x830f0 in /lib64/libc-2.20.so)

  You can now use it in all perf tools, such as:

	perf record -e probe_libc:abs_830f0 -aR sleep 1

  [root@zoo ~]#
  [root@zoo ~]# perf probe -l
    probe_libc:abs_830f0 (on __libc_malloc@glibc-2.20/malloc/malloc.c in /lib64/libc-2.20.so)
  [root@zoo ~]#

Whereas if we assign it a name it gets more manageable:

  [root@zoo ~]# perf probe /lib64/libc-2.20.so malloc=+0x830f0
  Added new event:
    probe_libc:malloc    (on 0x830f0 in /lib64/libc-2.20.so)

  You can now use it in all perf tools, such as:

	perf record -e probe_libc:malloc -aR sleep 1

  [root@zoo ~]# perf probe -l
    probe_libc:malloc    (on __libc_malloc@glibc-2.20/malloc/malloc.c in /lib64/libc-2.20.so)
  [root@zoo ~]#

Both, of course, will produce the same results, and we can use a
non canonical name, if the need arises:

  [root@zoo ~]# perf probe /lib64/libc-2.20.so memory_allocation=+0x830f0
  Added new event:
    probe_libc:memory_allocation (on 0x830f0 in /lib64/libc-2.20.so)

  You can now use it in all perf tools, such as:

	perf record -e probe_libc:memory_allocation -aR sleep 1

  [root@zoo ~]# perf probe -l
    probe_libc:memory_allocation (on __libc_malloc@glibc-2.20/malloc/malloc.c in /lib64/libc-2.20.so)
  [root@zoo ~]#

Signed-off-by: Wang Nan <wangnan0@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: pi3orama@163.com
Link: http://lkml.kernel.org/r/1440509256-193590-2-git-send-email-wangnan0@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/probe-event.c  | 144 +++++++++++++++++++++++++++++++++++++----
 tools/perf/util/probe-event.h  |   3 +
 tools/perf/util/probe-finder.c |  21 +-----
 3 files changed, 138 insertions(+), 30 deletions(-)

diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index 6c7e538c9b8b..59de69a4e3ac 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -1194,9 +1194,13 @@ static int parse_perf_probe_point(char *arg, struct perf_probe_event *pev)
 		*ptr++ = '\0';
 	}
 
-	tmp = strdup(arg);
-	if (tmp == NULL)
-		return -ENOMEM;
+	if (arg[0] == '\0')
+		tmp = NULL;
+	else {
+		tmp = strdup(arg);
+		if (tmp == NULL)
+			return -ENOMEM;
+	}
 
 	if (file_spec)
 		pp->file = tmp;
@@ -1283,11 +1287,6 @@ static int parse_perf_probe_point(char *arg, struct perf_probe_event *pev)
 		return -EINVAL;
 	}
 
-	if (pp->offset && !pp->function) {
-		semantic_error("Offset requires an entry function.\n");
-		return -EINVAL;
-	}
-
 	if (pp->retprobe && !pp->function) {
 		semantic_error("Return probe requires an entry function.\n");
 		return -EINVAL;
@@ -1299,6 +1298,11 @@ static int parse_perf_probe_point(char *arg, struct perf_probe_event *pev)
 		return -EINVAL;
 	}
 
+	if (!pp->function && !pp->offset && !pp->file) {
+		semantic_error("Absolute address should not be zero.\n");
+		return -EINVAL;
+	}
+
 	pr_debug("symbol:%s file:%s line:%d offset:%lu return:%d lazy:%s\n",
 		 pp->function, pp->file, pp->line, pp->offset, pp->retprobe,
 		 pp->lazy_line);
@@ -1609,7 +1613,7 @@ error:
 static char *synthesize_perf_probe_point(struct perf_probe_point *pp)
 {
 	char *buf, *tmp;
-	char offs[32] = "", line[32] = "", file[32] = "";
+	char offs[32] = "", line[32] = "", file[32] = "", addr[32] = "";
 	int ret, len;
 
 	buf = zalloc(MAX_CMDLEN);
@@ -1622,6 +1626,11 @@ static char *synthesize_perf_probe_point(struct perf_probe_point *pp)
 		if (ret <= 0)
 			goto error;
 	}
+	if (!pp->function) {
+		ret = e_snprintf(addr, 32, "0x%lx", pp->offset);
+		if (ret <= 0)
+			goto error;
+	}
 	if (pp->line) {
 		ret = e_snprintf(line, 32, ":%d", pp->line);
 		if (ret <= 0)
@@ -1639,9 +1648,11 @@ static char *synthesize_perf_probe_point(struct perf_probe_point *pp)
 			goto error;
 	}
 
-	if (pp->function)
-		ret = e_snprintf(buf, MAX_CMDLEN, "%s%s%s%s%s", pp->function,
-				 offs, pp->retprobe ? "%return" : "", line,
+	if (pp->function || pp->offset)
+		ret = e_snprintf(buf, MAX_CMDLEN, "%s%s%s%s%s",
+				 pp->function ? : addr,
+				 pp->function ? offs : "",
+				 pp->retprobe ? "%return" : "", line,
 				 file);
 	else
 		ret = e_snprintf(buf, MAX_CMDLEN, "%s%s", file, line);
@@ -1786,6 +1797,11 @@ char *synthesize_probe_trace_command(struct probe_trace_event *tev)
 	if (tev->uprobes)
 		ret = e_snprintf(buf + len, MAX_CMDLEN - len, "%s:0x%lx",
 				 tp->module, tp->address);
+	else if (tp->symbol[0] == '0' && tp->symbol[1] == 'x')
+		/* Absolute address. See try_to_find_absolute_address() */
+		ret = e_snprintf(buf + len, MAX_CMDLEN - len, "%s%s0x%lx",
+				 tp->module ?: "", tp->module ? ":" : "",
+				 tp->address);
 	else
 		ret = e_snprintf(buf + len, MAX_CMDLEN - len, "%s%s%s+%lu",
 				 tp->module ?: "", tp->module ? ":" : "",
@@ -2572,6 +2588,87 @@ err_out:
 	goto out;
 }
 
+static int try_to_find_absolute_address(struct perf_probe_event *pev,
+					struct probe_trace_event **tevs)
+{
+	struct perf_probe_point *pp = &pev->point;
+	struct probe_trace_event *tev;
+	struct probe_trace_point *tp;
+	int i, err;
+
+	if (perf_probe_event_need_dwarf(pev) || pev->point.function)
+		return -EINVAL;
+
+	/*
+	 * This is 'perf probe /lib/libc.so +0xabcd'. Try to probe at
+	 * absolute address.
+	 *
+	 * Only one tev can be generated by this.
+	 */
+	*tevs = zalloc(sizeof(*tev));
+	if (!*tevs)
+		return -ENOMEM;
+
+	tev = *tevs;
+	tp = &tev->point;
+
+	/*
+	 * Don't use tp->offset, use address directly, because
+	 * in synthesize_probe_trace_command() address cannot be
+	 * zero.
+	 */
+	tp->address = pev->point.offset;
+	tp->retprobe = pp->retprobe;
+	tev->uprobes = pev->uprobes;
+
+	err = -ENOMEM;
+	/* Give it a '0x' leading symbol name */
+	if (asprintf(&tp->symbol, "0x%lx", tp->address) < 0)
+		goto errout;
+
+	/* For kprobe, check range */
+	if ((!tev->uprobes) &&
+	    (kprobe_warn_out_range(tev->point.symbol,
+				   tev->point.address))) {
+		err = -EACCES;
+		goto errout;
+	}
+
+	if (asprintf(&tp->realname, "abs_%lx", tp->address) < 0)
+		goto errout;
+
+	if (pev->target) {
+		tp->module = strdup(pev->target);
+		if (!tp->module)
+			goto errout;
+	}
+
+	if (tev->group) {
+		tev->group = strdup(pev->group);
+		if (!tev->group)
+			goto errout;
+	}
+
+	if (pev->event) {
+		tev->event = strdup(pev->event);
+		if (!tev->event)
+			goto errout;
+	}
+
+	tev->nargs = pev->nargs;
+	for (i = 0; i < tev->nargs; i++)
+		copy_to_probe_trace_arg(&tev->args[i], &pev->args[i]);
+
+	return 1;
+
+errout:
+	if (*tevs) {
+		clear_probe_trace_events(*tevs, 1);
+		*tevs = NULL;
+	}
+	return err;
+}
+
 bool __weak arch__prefers_symtab(void) { return false; }
 
 static int convert_to_probe_trace_events(struct perf_probe_event *pev,
@@ -2588,6 +2685,10 @@ static int convert_to_probe_trace_events(struct perf_probe_event *pev,
 		}
 	}
 
+	ret = try_to_find_absolute_address(pev, tevs);
+	if (ret > 0)
+		return ret;
+
 	if (arch__prefers_symtab() && !perf_probe_event_need_dwarf(pev)) {
 		ret = find_probe_trace_events_from_map(pev, tevs);
 		if (ret > 0)
@@ -2758,3 +2859,22 @@ end:
 	return ret;
 }
 
+int copy_to_probe_trace_arg(struct probe_trace_arg *tvar,
+			    struct perf_probe_arg *pvar)
+{
+	tvar->value = strdup(pvar->var);
+	if (tvar->value == NULL)
+		return -ENOMEM;
+	if (pvar->type) {
+		tvar->type = strdup(pvar->type);
+		if (tvar->type == NULL)
+			return -ENOMEM;
+	}
+	if (pvar->name) {
+		tvar->name = strdup(pvar->name);
+		if (tvar->name == NULL)
+			return -ENOMEM;
+	} else
+		tvar->name = NULL;
+	return 0;
+}
diff --git a/tools/perf/util/probe-event.h b/tools/perf/util/probe-event.h
index 83ee95e9743b..174a3cf6c03d 100644
--- a/tools/perf/util/probe-event.h
+++ b/tools/perf/util/probe-event.h
@@ -156,4 +156,7 @@ int e_snprintf(char *str, size_t size, const char *format, ...)
 /* Maximum index number of event-name postfix */
 #define MAX_EVENT_INDEX	1024
 
+int copy_to_probe_trace_arg(struct probe_trace_arg *tvar,
+			    struct perf_probe_arg *pvar);
+
 #endif /*_PROBE_EVENT_H */
diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
index 7b80f8cb62b9..29c43c0680a8 100644
--- a/tools/perf/util/probe-finder.c
+++ b/tools/perf/util/probe-finder.c
@@ -553,24 +553,9 @@ static int find_variable(Dwarf_Die *sc_die, struct probe_finder *pf)
 	char buf[32], *ptr;
 	int ret = 0;
 
-	if (!is_c_varname(pf->pvar->var)) {
-		/* Copy raw parameters */
-		pf->tvar->value = strdup(pf->pvar->var);
-		if (pf->tvar->value == NULL)
-			return -ENOMEM;
-		if (pf->pvar->type) {
-			pf->tvar->type = strdup(pf->pvar->type);
-			if (pf->tvar->type == NULL)
-				return -ENOMEM;
-		}
-		if (pf->pvar->name) {
-			pf->tvar->name = strdup(pf->pvar->name);
-			if (pf->tvar->name == NULL)
-				return -ENOMEM;
-		} else
-			pf->tvar->name = NULL;
-		return 0;
-	}
+	/* Copy raw parameters */
+	if (!is_c_varname(pf->pvar->var))
+		return copy_to_probe_trace_arg(pf->tvar, pf->pvar);
 
 	if (pf->pvar->name)
 		pf->tvar->name = strdup(pf->pvar->name);
-- 
2.1.0


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

* RE: [PATCH 16/16] perf probe: Support probing at absolute addresses
  2015-08-25 16:14 ` [PATCH 16/16] perf probe: Support probing at absolute addresses Arnaldo Carvalho de Melo
@ 2015-08-26  0:00   ` 平松雅巳 / HIRAMATU,MASAMI
  2015-08-26 12:58     ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 58+ messages in thread
From: 平松雅巳 / HIRAMATU,MASAMI @ 2015-08-26  0:00 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Ingo Molnar
  Cc: linux-kernel, Wang Nan, Namhyung Kim, pi3orama, Arnaldo Carvalho de Melo

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="utf-8", Size: 11497 bytes --]

Arnaldo, I don't think we need "+". 

So, Nak it.

> -----Original Message-----
> From: Arnaldo Carvalho de Melo [mailto:acme@kernel.org]
> Sent: Wednesday, August 26, 2015 1:15 AM
> To: Ingo Molnar
> Cc: linux-kernel@vger.kernel.org; Wang Nan; 平松雅巳 / HIRAMATU,MASAMI; Namhyung Kim; pi3orama@163.com; Arnaldo Carvalho
> de Melo
> Subject: [!][PATCH 16/16] perf probe: Support probing at absolute addresses
> 
> From: Wang Nan <wangnan0@huawei.com>
> 
> It should be useful to allow 'perf probe' probe at absolute offsets of a
> target.
> 
> For example, when (u)probing at a instruction of a shared object in an
> embedded system where debuginfo is not available but we know the offset
> of that instruction by manually digging.
> 
> This patch enables following perf probe command syntax:
> 
>   # perf probe +0xffffffff811e6615
> 
> And
> 
>   # perf probe /lib/x86_64-linux-gnu/libc-2.19.so +0xeb860
> 
> In the above example, we don't need a anchor symbol, so it is possible
> to compute absolute addresses using other methods and then use 'perf
> probe' to create the probing points.
> 
> Committer note:
> 
> One can as well specify a name, so that the probe doesn't get assigned a
> generic one starting with abs_, i.e. if we use as described above we
> get:
> 
>   [root@zoo ~]# readelf -sW  /lib64/libc-2.20.so | grep -w malloc
>     1175: 00000000000830f0   300 FUNC    GLOBAL DEFAULT   12 malloc@@GLIBC_2.2.5
>      813: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS malloc.c
>     5276: 00000000000830f0   300 FUNC    GLOBAL DEFAULT   12 malloc
>   [root@zoo ~]#
>   [root@zoo ~]# perf probe /lib64/libc-2.20.so +0x830f0
>   Added new event:
>     probe_libc:abs_830f0 (on 0x830f0 in /lib64/libc-2.20.so)
> 
>   You can now use it in all perf tools, such as:
> 
> 	perf record -e probe_libc:abs_830f0 -aR sleep 1
> 
>   [root@zoo ~]#
>   [root@zoo ~]# perf probe -l
>     probe_libc:abs_830f0 (on __libc_malloc@glibc-2.20/malloc/malloc.c in /lib64/libc-2.20.so)
>   [root@zoo ~]#
> 
> Whereas if we assign it a name it gets more manageable:
> 
>   [root@zoo ~]# perf probe /lib64/libc-2.20.so malloc=+0x830f0
>   Added new event:
>     probe_libc:malloc    (on 0x830f0 in /lib64/libc-2.20.so)
> 
>   You can now use it in all perf tools, such as:
> 
> 	perf record -e probe_libc:malloc -aR sleep 1
> 
>   [root@zoo ~]# perf probe -l
>     probe_libc:malloc    (on __libc_malloc@glibc-2.20/malloc/malloc.c in /lib64/libc-2.20.so)
>   [root@zoo ~]#
> 
> Both, of course, will produce the same results, and we can use a
> non canonical name, if the need arises:
> 
>   [root@zoo ~]# perf probe /lib64/libc-2.20.so memory_allocation=+0x830f0
>   Added new event:
>     probe_libc:memory_allocation (on 0x830f0 in /lib64/libc-2.20.so)
> 
>   You can now use it in all perf tools, such as:
> 
> 	perf record -e probe_libc:memory_allocation -aR sleep 1
> 
>   [root@zoo ~]# perf probe -l
>     probe_libc:memory_allocation (on __libc_malloc@glibc-2.20/malloc/malloc.c in /lib64/libc-2.20.so)
>   [root@zoo ~]#
> 
> Signed-off-by: Wang Nan <wangnan0@huawei.com>
> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
> Cc: Namhyung Kim <namhyung@kernel.org>
> Cc: pi3orama@163.com
> Link: http://lkml.kernel.org/r/1440509256-193590-2-git-send-email-wangnan0@huawei.com
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> ---
>  tools/perf/util/probe-event.c  | 144 +++++++++++++++++++++++++++++++++++++----
>  tools/perf/util/probe-event.h  |   3 +
>  tools/perf/util/probe-finder.c |  21 +-----
>  3 files changed, 138 insertions(+), 30 deletions(-)
> 
> diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
> index 6c7e538c9b8b..59de69a4e3ac 100644
> --- a/tools/perf/util/probe-event.c
> +++ b/tools/perf/util/probe-event.c
> @@ -1194,9 +1194,13 @@ static int parse_perf_probe_point(char *arg, struct perf_probe_event *pev)
>  		*ptr++ = '\0';
>  	}
> 
> -	tmp = strdup(arg);
> -	if (tmp == NULL)
> -		return -ENOMEM;
> +	if (arg[0] == '\0')
> +		tmp = NULL;
> +	else {
> +		tmp = strdup(arg);
> +		if (tmp == NULL)
> +			return -ENOMEM;
> +	}
> 
>  	if (file_spec)
>  		pp->file = tmp;
> @@ -1283,11 +1287,6 @@ static int parse_perf_probe_point(char *arg, struct perf_probe_event *pev)
>  		return -EINVAL;
>  	}
> 
> -	if (pp->offset && !pp->function) {
> -		semantic_error("Offset requires an entry function.\n");
> -		return -EINVAL;
> -	}
> -
>  	if (pp->retprobe && !pp->function) {
>  		semantic_error("Return probe requires an entry function.\n");
>  		return -EINVAL;
> @@ -1299,6 +1298,11 @@ static int parse_perf_probe_point(char *arg, struct perf_probe_event *pev)
>  		return -EINVAL;
>  	}
> 
> +	if (!pp->function && !pp->offset && !pp->file) {
> +		semantic_error("Absolute address should not be zero.\n");
> +		return -EINVAL;
> +	}
> +
>  	pr_debug("symbol:%s file:%s line:%d offset:%lu return:%d lazy:%s\n",
>  		 pp->function, pp->file, pp->line, pp->offset, pp->retprobe,
>  		 pp->lazy_line);
> @@ -1609,7 +1613,7 @@ error:
>  static char *synthesize_perf_probe_point(struct perf_probe_point *pp)
>  {
>  	char *buf, *tmp;
> -	char offs[32] = "", line[32] = "", file[32] = "";
> +	char offs[32] = "", line[32] = "", file[32] = "", addr[32] = "";
>  	int ret, len;
> 
>  	buf = zalloc(MAX_CMDLEN);
> @@ -1622,6 +1626,11 @@ static char *synthesize_perf_probe_point(struct perf_probe_point *pp)
>  		if (ret <= 0)
>  			goto error;
>  	}
> +	if (!pp->function) {
> +		ret = e_snprintf(addr, 32, "0x%lx", pp->offset);
> +		if (ret <= 0)
> +			goto error;
> +	}
>  	if (pp->line) {
>  		ret = e_snprintf(line, 32, ":%d", pp->line);
>  		if (ret <= 0)
> @@ -1639,9 +1648,11 @@ static char *synthesize_perf_probe_point(struct perf_probe_point *pp)
>  			goto error;
>  	}
> 
> -	if (pp->function)
> -		ret = e_snprintf(buf, MAX_CMDLEN, "%s%s%s%s%s", pp->function,
> -				 offs, pp->retprobe ? "%return" : "", line,
> +	if (pp->function || pp->offset)
> +		ret = e_snprintf(buf, MAX_CMDLEN, "%s%s%s%s%s",
> +				 pp->function ? : addr,
> +				 pp->function ? offs : "",
> +				 pp->retprobe ? "%return" : "", line,
>  				 file);
>  	else
>  		ret = e_snprintf(buf, MAX_CMDLEN, "%s%s", file, line);
> @@ -1786,6 +1797,11 @@ char *synthesize_probe_trace_command(struct probe_trace_event *tev)
>  	if (tev->uprobes)
>  		ret = e_snprintf(buf + len, MAX_CMDLEN - len, "%s:0x%lx",
>  				 tp->module, tp->address);
> +	else if (tp->symbol[0] == '0' && tp->symbol[1] == 'x')
> +		/* Absolute address. See try_to_find_absolute_address() */
> +		ret = e_snprintf(buf + len, MAX_CMDLEN - len, "%s%s0x%lx",
> +				 tp->module ?: "", tp->module ? ":" : "",
> +				 tp->address);
>  	else
>  		ret = e_snprintf(buf + len, MAX_CMDLEN - len, "%s%s%s+%lu",
>  				 tp->module ?: "", tp->module ? ":" : "",
> @@ -2572,6 +2588,87 @@ err_out:
>  	goto out;
>  }
> 
> +static int try_to_find_absolute_address(struct perf_probe_event *pev,
> +					struct probe_trace_event **tevs)
> +{
> +	struct perf_probe_point *pp = &pev->point;
> +	struct probe_trace_event *tev;
> +	struct probe_trace_point *tp;
> +	int i, err;
> +
> +	if (perf_probe_event_need_dwarf(pev) || pev->point.function)
> +		return -EINVAL;
> +
> +	/*
> +	 * This is 'perf probe /lib/libc.so +0xabcd'. Try to probe at
> +	 * absolute address.
> +	 *
> +	 * Only one tev can be generated by this.
> +	 */
> +	*tevs = zalloc(sizeof(*tev));
> +	if (!*tevs)
> +		return -ENOMEM;
> +
> +	tev = *tevs;
> +	tp = &tev->point;
> +
> +	/*
> +	 * Don't use tp->offset, use address directly, because
> +	 * in synthesize_probe_trace_command() address cannot be
> +	 * zero.
> +	 */
> +	tp->address = pev->point.offset;
> +	tp->retprobe = pp->retprobe;
> +	tev->uprobes = pev->uprobes;
> +
> +	err = -ENOMEM;
> +	/* Give it a '0x' leading symbol name */
> +	if (asprintf(&tp->symbol, "0x%lx", tp->address) < 0)
> +		goto errout;
> +
> +	/* For kprobe, check range */
> +	if ((!tev->uprobes) &&
> +	    (kprobe_warn_out_range(tev->point.symbol,
> +				   tev->point.address))) {
> +		err = -EACCES;
> +		goto errout;
> +	}
> +
> +	if (asprintf(&tp->realname, "abs_%lx", tp->address) < 0)
> +		goto errout;
> +
> +	if (pev->target) {
> +		tp->module = strdup(pev->target);
> +		if (!tp->module)
> +			goto errout;
> +	}
> +
> +	if (tev->group) {
> +		tev->group = strdup(pev->group);
> +		if (!tev->group)
> +			goto errout;
> +	}
> +
> +	if (pev->event) {
> +		tev->event = strdup(pev->event);
> +		if (!tev->event)
> +			goto errout;
> +	}
> +
> +	tev->nargs = pev->nargs;
> +	for (i = 0; i < tev->nargs; i++)
> +		copy_to_probe_trace_arg(&tev->args[i], &pev->args[i]);
> +
> +	return 1;
> +
> +errout:
> +	if (*tevs) {
> +		clear_probe_trace_events(*tevs, 1);
> +		*tevs = NULL;
> +	}
> +	return err;
> +}
> +
>  bool __weak arch__prefers_symtab(void) { return false; }
> 
>  static int convert_to_probe_trace_events(struct perf_probe_event *pev,
> @@ -2588,6 +2685,10 @@ static int convert_to_probe_trace_events(struct perf_probe_event *pev,
>  		}
>  	}
> 
> +	ret = try_to_find_absolute_address(pev, tevs);
> +	if (ret > 0)
> +		return ret;
> +
>  	if (arch__prefers_symtab() && !perf_probe_event_need_dwarf(pev)) {
>  		ret = find_probe_trace_events_from_map(pev, tevs);
>  		if (ret > 0)
> @@ -2758,3 +2859,22 @@ end:
>  	return ret;
>  }
> 
> +int copy_to_probe_trace_arg(struct probe_trace_arg *tvar,
> +			    struct perf_probe_arg *pvar)
> +{
> +	tvar->value = strdup(pvar->var);
> +	if (tvar->value == NULL)
> +		return -ENOMEM;
> +	if (pvar->type) {
> +		tvar->type = strdup(pvar->type);
> +		if (tvar->type == NULL)
> +			return -ENOMEM;
> +	}
> +	if (pvar->name) {
> +		tvar->name = strdup(pvar->name);
> +		if (tvar->name == NULL)
> +			return -ENOMEM;
> +	} else
> +		tvar->name = NULL;
> +	return 0;
> +}
> diff --git a/tools/perf/util/probe-event.h b/tools/perf/util/probe-event.h
> index 83ee95e9743b..174a3cf6c03d 100644
> --- a/tools/perf/util/probe-event.h
> +++ b/tools/perf/util/probe-event.h
> @@ -156,4 +156,7 @@ int e_snprintf(char *str, size_t size, const char *format, ...)
>  /* Maximum index number of event-name postfix */
>  #define MAX_EVENT_INDEX	1024
> 
> +int copy_to_probe_trace_arg(struct probe_trace_arg *tvar,
> +			    struct perf_probe_arg *pvar);
> +
>  #endif /*_PROBE_EVENT_H */
> diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
> index 7b80f8cb62b9..29c43c0680a8 100644
> --- a/tools/perf/util/probe-finder.c
> +++ b/tools/perf/util/probe-finder.c
> @@ -553,24 +553,9 @@ static int find_variable(Dwarf_Die *sc_die, struct probe_finder *pf)
>  	char buf[32], *ptr;
>  	int ret = 0;
> 
> -	if (!is_c_varname(pf->pvar->var)) {
> -		/* Copy raw parameters */
> -		pf->tvar->value = strdup(pf->pvar->var);
> -		if (pf->tvar->value == NULL)
> -			return -ENOMEM;
> -		if (pf->pvar->type) {
> -			pf->tvar->type = strdup(pf->pvar->type);
> -			if (pf->tvar->type == NULL)
> -				return -ENOMEM;
> -		}
> -		if (pf->pvar->name) {
> -			pf->tvar->name = strdup(pf->pvar->name);
> -			if (pf->tvar->name == NULL)
> -				return -ENOMEM;
> -		} else
> -			pf->tvar->name = NULL;
> -		return 0;
> -	}
> +	/* Copy raw parameters */
> +	if (!is_c_varname(pf->pvar->var))
> +		return copy_to_probe_trace_arg(pf->tvar, pf->pvar);
> 
>  	if (pf->pvar->name)
>  		pf->tvar->name = strdup(pf->pvar->name);
> --
> 2.1.0

ÿôèº{.nÇ+‰·Ÿ®‰­†+%ŠËÿ±éݶ\x17¥Šwÿº{.nÇ+‰·¥Š{±þG«éÿŠ{ayº\x1dʇڙë,j\a­¢f£¢·hšïêÿ‘êçz_è®\x03(­éšŽŠÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?™¨è­Ú&£ø§~á¶iO•æ¬z·švØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?–I¥

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

* Re: [PATCH 16/16] perf probe: Support probing at absolute addresses
  2015-08-26  0:00   ` 平松雅巳 / HIRAMATU,MASAMI
@ 2015-08-26 12:58     ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-08-26 12:58 UTC (permalink / raw)
  To: 平松雅巳 / HIRAMATU,MASAMI
  Cc: Ingo Molnar, linux-kernel, Wang Nan, Namhyung Kim, pi3orama

Em Wed, Aug 26, 2015 at 12:00:56AM +0000, 平松雅巳 / HIRAMATU,MASAMI escreveu:
> Arnaldo, I don't think we need "+". 

What would be the problem? When we write


 perf probe /lib/x86_64-linux-gnu/libc-2.19.so +0xeb860

What we're meaning is: Take the address where libc-2.19.so is loaded, in
each process, add (+) to that address the number 0xeb860 (an offset),
and when that probe is enabled, put a breakpoint there.

I saw it that way and thus to me it seemed really natural, thus I
applied.

> So, Nak it.

I don't have strong feelings about that one and I saw that there was a
long discussion, so I'll read it and process the patches, if I don't see
anything questionable.

Next time I'll try not to process perf probe patches so fast :-)

- Arnaldo
 
> > -----Original Message-----
> > From: Arnaldo Carvalho de Melo [mailto:acme@kernel.org]
> > Sent: Wednesday, August 26, 2015 1:15 AM
> > To: Ingo Molnar
> > Cc: linux-kernel@vger.kernel.org; Wang Nan; 平松雅巳 / HIRAMATU,MASAMI; Namhyung Kim; pi3orama@163.com; Arnaldo Carvalho
> > de Melo
> > Subject: [!][PATCH 16/16] perf probe: Support probing at absolute addresses
> > 
> > From: Wang Nan <wangnan0@huawei.com>
> > 
> > It should be useful to allow 'perf probe' probe at absolute offsets of a
> > target.
> > 
> > For example, when (u)probing at a instruction of a shared object in an
> > embedded system where debuginfo is not available but we know the offset
> > of that instruction by manually digging.
> > 
> > This patch enables following perf probe command syntax:
> > 
> >   # perf probe +0xffffffff811e6615
> > 
> > And
> > 
> >   # perf probe /lib/x86_64-linux-gnu/libc-2.19.so +0xeb860
> > 
> > In the above example, we don't need a anchor symbol, so it is possible
> > to compute absolute addresses using other methods and then use 'perf
> > probe' to create the probing points.
> > 
> > Committer note:
> > 
> > One can as well specify a name, so that the probe doesn't get assigned a
> > generic one starting with abs_, i.e. if we use as described above we
> > get:
> > 
> >   [root@zoo ~]# readelf -sW  /lib64/libc-2.20.so | grep -w malloc
> >     1175: 00000000000830f0   300 FUNC    GLOBAL DEFAULT   12 malloc@@GLIBC_2.2.5
> >      813: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS malloc.c
> >     5276: 00000000000830f0   300 FUNC    GLOBAL DEFAULT   12 malloc
> >   [root@zoo ~]#
> >   [root@zoo ~]# perf probe /lib64/libc-2.20.so +0x830f0
> >   Added new event:
> >     probe_libc:abs_830f0 (on 0x830f0 in /lib64/libc-2.20.so)
> > 
> >   You can now use it in all perf tools, such as:
> > 
> > 	perf record -e probe_libc:abs_830f0 -aR sleep 1
> > 
> >   [root@zoo ~]#
> >   [root@zoo ~]# perf probe -l
> >     probe_libc:abs_830f0 (on __libc_malloc@glibc-2.20/malloc/malloc.c in /lib64/libc-2.20.so)
> >   [root@zoo ~]#
> > 
> > Whereas if we assign it a name it gets more manageable:
> > 
> >   [root@zoo ~]# perf probe /lib64/libc-2.20.so malloc=+0x830f0
> >   Added new event:
> >     probe_libc:malloc    (on 0x830f0 in /lib64/libc-2.20.so)
> > 
> >   You can now use it in all perf tools, such as:
> > 
> > 	perf record -e probe_libc:malloc -aR sleep 1
> > 
> >   [root@zoo ~]# perf probe -l
> >     probe_libc:malloc    (on __libc_malloc@glibc-2.20/malloc/malloc.c in /lib64/libc-2.20.so)
> >   [root@zoo ~]#
> > 
> > Both, of course, will produce the same results, and we can use a
> > non canonical name, if the need arises:
> > 
> >   [root@zoo ~]# perf probe /lib64/libc-2.20.so memory_allocation=+0x830f0
> >   Added new event:
> >     probe_libc:memory_allocation (on 0x830f0 in /lib64/libc-2.20.so)
> > 
> >   You can now use it in all perf tools, such as:
> > 
> > 	perf record -e probe_libc:memory_allocation -aR sleep 1
> > 
> >   [root@zoo ~]# perf probe -l
> >     probe_libc:memory_allocation (on __libc_malloc@glibc-2.20/malloc/malloc.c in /lib64/libc-2.20.so)
> >   [root@zoo ~]#
> > 
> > Signed-off-by: Wang Nan <wangnan0@huawei.com>
> > Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> > Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
> > Cc: Namhyung Kim <namhyung@kernel.org>
> > Cc: pi3orama@163.com
> > Link: http://lkml.kernel.org/r/1440509256-193590-2-git-send-email-wangnan0@huawei.com
> > Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> > ---
> >  tools/perf/util/probe-event.c  | 144 +++++++++++++++++++++++++++++++++++++----
> >  tools/perf/util/probe-event.h  |   3 +
> >  tools/perf/util/probe-finder.c |  21 +-----
> >  3 files changed, 138 insertions(+), 30 deletions(-)
> > 
> > diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
> > index 6c7e538c9b8b..59de69a4e3ac 100644
> > --- a/tools/perf/util/probe-event.c
> > +++ b/tools/perf/util/probe-event.c
> > @@ -1194,9 +1194,13 @@ static int parse_perf_probe_point(char *arg, struct perf_probe_event *pev)
> >  		*ptr++ = '\0';
> >  	}
> > 
> > -	tmp = strdup(arg);
> > -	if (tmp == NULL)
> > -		return -ENOMEM;
> > +	if (arg[0] == '\0')
> > +		tmp = NULL;
> > +	else {
> > +		tmp = strdup(arg);
> > +		if (tmp == NULL)
> > +			return -ENOMEM;
> > +	}
> > 
> >  	if (file_spec)
> >  		pp->file = tmp;
> > @@ -1283,11 +1287,6 @@ static int parse_perf_probe_point(char *arg, struct perf_probe_event *pev)
> >  		return -EINVAL;
> >  	}
> > 
> > -	if (pp->offset && !pp->function) {
> > -		semantic_error("Offset requires an entry function.\n");
> > -		return -EINVAL;
> > -	}
> > -
> >  	if (pp->retprobe && !pp->function) {
> >  		semantic_error("Return probe requires an entry function.\n");
> >  		return -EINVAL;
> > @@ -1299,6 +1298,11 @@ static int parse_perf_probe_point(char *arg, struct perf_probe_event *pev)
> >  		return -EINVAL;
> >  	}
> > 
> > +	if (!pp->function && !pp->offset && !pp->file) {
> > +		semantic_error("Absolute address should not be zero.\n");
> > +		return -EINVAL;
> > +	}
> > +
> >  	pr_debug("symbol:%s file:%s line:%d offset:%lu return:%d lazy:%s\n",
> >  		 pp->function, pp->file, pp->line, pp->offset, pp->retprobe,
> >  		 pp->lazy_line);
> > @@ -1609,7 +1613,7 @@ error:
> >  static char *synthesize_perf_probe_point(struct perf_probe_point *pp)
> >  {
> >  	char *buf, *tmp;
> > -	char offs[32] = "", line[32] = "", file[32] = "";
> > +	char offs[32] = "", line[32] = "", file[32] = "", addr[32] = "";
> >  	int ret, len;
> > 
> >  	buf = zalloc(MAX_CMDLEN);
> > @@ -1622,6 +1626,11 @@ static char *synthesize_perf_probe_point(struct perf_probe_point *pp)
> >  		if (ret <= 0)
> >  			goto error;
> >  	}
> > +	if (!pp->function) {
> > +		ret = e_snprintf(addr, 32, "0x%lx", pp->offset);
> > +		if (ret <= 0)
> > +			goto error;
> > +	}
> >  	if (pp->line) {
> >  		ret = e_snprintf(line, 32, ":%d", pp->line);
> >  		if (ret <= 0)
> > @@ -1639,9 +1648,11 @@ static char *synthesize_perf_probe_point(struct perf_probe_point *pp)
> >  			goto error;
> >  	}
> > 
> > -	if (pp->function)
> > -		ret = e_snprintf(buf, MAX_CMDLEN, "%s%s%s%s%s", pp->function,
> > -				 offs, pp->retprobe ? "%return" : "", line,
> > +	if (pp->function || pp->offset)
> > +		ret = e_snprintf(buf, MAX_CMDLEN, "%s%s%s%s%s",
> > +				 pp->function ? : addr,
> > +				 pp->function ? offs : "",
> > +				 pp->retprobe ? "%return" : "", line,
> >  				 file);
> >  	else
> >  		ret = e_snprintf(buf, MAX_CMDLEN, "%s%s", file, line);
> > @@ -1786,6 +1797,11 @@ char *synthesize_probe_trace_command(struct probe_trace_event *tev)
> >  	if (tev->uprobes)
> >  		ret = e_snprintf(buf + len, MAX_CMDLEN - len, "%s:0x%lx",
> >  				 tp->module, tp->address);
> > +	else if (tp->symbol[0] == '0' && tp->symbol[1] == 'x')
> > +		/* Absolute address. See try_to_find_absolute_address() */
> > +		ret = e_snprintf(buf + len, MAX_CMDLEN - len, "%s%s0x%lx",
> > +				 tp->module ?: "", tp->module ? ":" : "",
> > +				 tp->address);
> >  	else
> >  		ret = e_snprintf(buf + len, MAX_CMDLEN - len, "%s%s%s+%lu",
> >  				 tp->module ?: "", tp->module ? ":" : "",
> > @@ -2572,6 +2588,87 @@ err_out:
> >  	goto out;
> >  }
> > 
> > +static int try_to_find_absolute_address(struct perf_probe_event *pev,
> > +					struct probe_trace_event **tevs)
> > +{
> > +	struct perf_probe_point *pp = &pev->point;
> > +	struct probe_trace_event *tev;
> > +	struct probe_trace_point *tp;
> > +	int i, err;
> > +
> > +	if (perf_probe_event_need_dwarf(pev) || pev->point.function)
> > +		return -EINVAL;
> > +
> > +	/*
> > +	 * This is 'perf probe /lib/libc.so +0xabcd'. Try to probe at
> > +	 * absolute address.
> > +	 *
> > +	 * Only one tev can be generated by this.
> > +	 */
> > +	*tevs = zalloc(sizeof(*tev));
> > +	if (!*tevs)
> > +		return -ENOMEM;
> > +
> > +	tev = *tevs;
> > +	tp = &tev->point;
> > +
> > +	/*
> > +	 * Don't use tp->offset, use address directly, because
> > +	 * in synthesize_probe_trace_command() address cannot be
> > +	 * zero.
> > +	 */
> > +	tp->address = pev->point.offset;
> > +	tp->retprobe = pp->retprobe;
> > +	tev->uprobes = pev->uprobes;
> > +
> > +	err = -ENOMEM;
> > +	/* Give it a '0x' leading symbol name */
> > +	if (asprintf(&tp->symbol, "0x%lx", tp->address) < 0)
> > +		goto errout;
> > +
> > +	/* For kprobe, check range */
> > +	if ((!tev->uprobes) &&
> > +	    (kprobe_warn_out_range(tev->point.symbol,
> > +				   tev->point.address))) {
> > +		err = -EACCES;
> > +		goto errout;
> > +	}
> > +
> > +	if (asprintf(&tp->realname, "abs_%lx", tp->address) < 0)
> > +		goto errout;
> > +
> > +	if (pev->target) {
> > +		tp->module = strdup(pev->target);
> > +		if (!tp->module)
> > +			goto errout;
> > +	}
> > +
> > +	if (tev->group) {
> > +		tev->group = strdup(pev->group);
> > +		if (!tev->group)
> > +			goto errout;
> > +	}
> > +
> > +	if (pev->event) {
> > +		tev->event = strdup(pev->event);
> > +		if (!tev->event)
> > +			goto errout;
> > +	}
> > +
> > +	tev->nargs = pev->nargs;
> > +	for (i = 0; i < tev->nargs; i++)
> > +		copy_to_probe_trace_arg(&tev->args[i], &pev->args[i]);
> > +
> > +	return 1;
> > +
> > +errout:
> > +	if (*tevs) {
> > +		clear_probe_trace_events(*tevs, 1);
> > +		*tevs = NULL;
> > +	}
> > +	return err;
> > +}
> > +
> >  bool __weak arch__prefers_symtab(void) { return false; }
> > 
> >  static int convert_to_probe_trace_events(struct perf_probe_event *pev,
> > @@ -2588,6 +2685,10 @@ static int convert_to_probe_trace_events(struct perf_probe_event *pev,
> >  		}
> >  	}
> > 
> > +	ret = try_to_find_absolute_address(pev, tevs);
> > +	if (ret > 0)
> > +		return ret;
> > +
> >  	if (arch__prefers_symtab() && !perf_probe_event_need_dwarf(pev)) {
> >  		ret = find_probe_trace_events_from_map(pev, tevs);
> >  		if (ret > 0)
> > @@ -2758,3 +2859,22 @@ end:
> >  	return ret;
> >  }
> > 
> > +int copy_to_probe_trace_arg(struct probe_trace_arg *tvar,
> > +			    struct perf_probe_arg *pvar)
> > +{
> > +	tvar->value = strdup(pvar->var);
> > +	if (tvar->value == NULL)
> > +		return -ENOMEM;
> > +	if (pvar->type) {
> > +		tvar->type = strdup(pvar->type);
> > +		if (tvar->type == NULL)
> > +			return -ENOMEM;
> > +	}
> > +	if (pvar->name) {
> > +		tvar->name = strdup(pvar->name);
> > +		if (tvar->name == NULL)
> > +			return -ENOMEM;
> > +	} else
> > +		tvar->name = NULL;
> > +	return 0;
> > +}
> > diff --git a/tools/perf/util/probe-event.h b/tools/perf/util/probe-event.h
> > index 83ee95e9743b..174a3cf6c03d 100644
> > --- a/tools/perf/util/probe-event.h
> > +++ b/tools/perf/util/probe-event.h
> > @@ -156,4 +156,7 @@ int e_snprintf(char *str, size_t size, const char *format, ...)
> >  /* Maximum index number of event-name postfix */
> >  #define MAX_EVENT_INDEX	1024
> > 
> > +int copy_to_probe_trace_arg(struct probe_trace_arg *tvar,
> > +			    struct perf_probe_arg *pvar);
> > +
> >  #endif /*_PROBE_EVENT_H */
> > diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
> > index 7b80f8cb62b9..29c43c0680a8 100644
> > --- a/tools/perf/util/probe-finder.c
> > +++ b/tools/perf/util/probe-finder.c
> > @@ -553,24 +553,9 @@ static int find_variable(Dwarf_Die *sc_die, struct probe_finder *pf)
> >  	char buf[32], *ptr;
> >  	int ret = 0;
> > 
> > -	if (!is_c_varname(pf->pvar->var)) {
> > -		/* Copy raw parameters */
> > -		pf->tvar->value = strdup(pf->pvar->var);
> > -		if (pf->tvar->value == NULL)
> > -			return -ENOMEM;
> > -		if (pf->pvar->type) {
> > -			pf->tvar->type = strdup(pf->pvar->type);
> > -			if (pf->tvar->type == NULL)
> > -				return -ENOMEM;
> > -		}
> > -		if (pf->pvar->name) {
> > -			pf->tvar->name = strdup(pf->pvar->name);
> > -			if (pf->tvar->name == NULL)
> > -				return -ENOMEM;
> > -		} else
> > -			pf->tvar->name = NULL;
> > -		return 0;
> > -	}
> > +	/* Copy raw parameters */
> > +	if (!is_c_varname(pf->pvar->var))
> > +		return copy_to_probe_trace_arg(pf->tvar, pf->pvar);
> > 
> >  	if (pf->pvar->name)
> >  		pf->tvar->name = strdup(pf->pvar->name);
> > --
> > 2.1.0
> 

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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2015-08-25 16:14 [GIT PULL 00/16] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (15 preceding siblings ...)
  2015-08-25 16:14 ` [PATCH 16/16] perf probe: Support probing at absolute addresses Arnaldo Carvalho de Melo
@ 2015-08-26 13:39 ` Arnaldo Carvalho de Melo
  16 siblings, 0 replies; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-08-26 13:39 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Adrian Hunter, Borislav Petkov, David Ahern,
	Frederic Weisbecker, Jiri Olsa, Masami Hiramatsu, Namhyung Kim,
	pi3orama, Stephane Eranian, Wang Nan

Em Tue, Aug 25, 2015 at 01:14:22PM -0300, Arnaldo Carvalho de Melo escreveu:
> Hi Ingo,
> 
> 	Please consider pulling, now to get back looking at eBPF :-)

Ingo, please do not process this one, there was a NAK from Masami to
some new syntax on adding non symbolic probes, will resubmit with the
new patches provided by Wang Nan that already got Masami's approval.

- Arnaldo
 
> - Arnaldo
> 
> The following changes since commit 0e53909a1cf0153736fb52c216558a65530d8c40:
> 
>   Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-08-22 08:45:46 +0200)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo
> 
> for you to fetch changes up to 1cbebfc7abb549ed3f4080e12c4d7b07d1f16637:
> 
>   perf probe: Support probing at absolute addresses (2015-08-25 12:36:22 -0300)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes:
> 
> User visible:
> 
> - Add support for using several Intel PT features (CYC, MTC packets), the
>   relevant documentation was updated: tools/perf/Documentation/intel-pt.txt,
>   briefly describing those packets, its purposes, how to configure them in
>   the event config terms and relevant external documentation for further
>   reading. (Adrian Hunter)
> 
> - Introduce support for probing at an absolut address, for user and kernel
>   'perf probe's, useful when one have the symbol maps on a developer machine
>   but not on an embedded system (Wang Nan)
> 
> - Clear the progress bar at the end of a ordered_events flush, fixing
>   an UI artifact when, after ordering the events the screen doesn't get
>   completely redraw, for instance, when an error window covers just the
>   center of the screen and waits for user input. (Arnaldo Carvalho de Melo)
> 
> - Fix 'annotate' segfault by resetting the dso find_symbol cache when removing
>   symbols (Arnaldo Carvalho de Melo)
> 
> Infrastructure:
> 
> - Fix Intel PT 'instructions' sample period (Adrian Hunter)
> 
> - Prevent segfault when reading probe point with absolute address (Wang Nan)
> 
> Build fixes:
> 
> - Fix tarball build broken by pt/bts (Adrian Hunter)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Adrian Hunter (11):
>       perf tools: Fix tarball build broken by pt/bts
>       perf tools: Fix Intel PT 'instructions' sample period
>       perf tools: Add Intel PT support for PSB periods
>       perf tools: Add new Intel PT packet definitions
>       perf tools: Pass Intel PT information for decoding MTC and CYC
>       perf tools: Add Intel PT support for decoding MTC packets
>       perf tools: Add Intel PT support for using MTC packets
>       perf tools: Add Intel PT support for decoding CYC packets
>       perf tools: Add Intel PT support for using CYC packets
>       perf tools: Add Intel PT support for decoding TRACESTOP packets
>       perf tools: Update Intel PT documentation
> 
> Arnaldo Carvalho de Melo (3):
>       perf annotate: Reset the dso find_symbol cache when removing symbols
>       perf ui tui progress: Implement the ui_progress_ops->finish() method
>       perf ordered_events: Clear the progress bar at the end of a flush
> 
> Wang Nan (2):
>       perf probe: Prevent segfault when reading probe point with absolute address
>       perf probe: Support probing at absolute addresses
> 
>  tools/perf/Documentation/intel-pt.txt              | 194 ++++++-
>  tools/perf/arch/x86/util/intel-pt.c                | 271 +++++++++-
>  tools/perf/builtin-annotate.c                      |   1 +
>  tools/perf/ui/tui/progress.c                       |  19 +-
>  tools/perf/util/dso.h                              |   2 +
>  tools/perf/util/intel-pt-decoder/inat.c            |   2 +-
>  tools/perf/util/intel-pt-decoder/inat.h            |   2 +-
>  tools/perf/util/intel-pt-decoder/inat_types.h      |  29 ++
>  tools/perf/util/intel-pt-decoder/insn.c            |   4 +-
>  tools/perf/util/intel-pt-decoder/insn.h            |   2 +-
>  .../perf/util/intel-pt-decoder/intel-pt-decoder.c  | 555 ++++++++++++++++++++-
>  .../perf/util/intel-pt-decoder/intel-pt-decoder.h  |   5 +
>  .../util/intel-pt-decoder/intel-pt-insn-decoder.c  |   2 +-
>  .../util/intel-pt-decoder/intel-pt-pkt-decoder.c   | 142 +++++-
>  .../util/intel-pt-decoder/intel-pt-pkt-decoder.h   |   6 +
>  tools/perf/util/intel-pt.c                         |  67 ++-
>  tools/perf/util/intel-pt.h                         |   5 +
>  tools/perf/util/ordered-events.c                   |   3 +
>  tools/perf/util/probe-event.c                      | 152 +++++-
>  tools/perf/util/probe-event.h                      |   3 +
>  tools/perf/util/probe-finder.c                     |  21 +-
>  tools/perf/util/symbol.c                           |  10 +
>  22 files changed, 1404 insertions(+), 93 deletions(-)
>  create mode 100644 tools/perf/util/intel-pt-decoder/inat_types.h
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/

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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2019-01-04 18:33 Arnaldo Carvalho de Melo
@ 2019-01-08 15:32 ` Ingo Molnar
  0 siblings, 0 replies; 58+ messages in thread
From: Ingo Molnar @ 2019-01-08 15:32 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Clark Williams, linux-kernel, linux-perf-users,
	Arnaldo Carvalho de Melo, Ivan Krylov, Jin Yao,
	Mattias Jacobsson


* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Hi Ingo,
> 
> 	Please consider pulling,
> 
> Best regards,
> 
> - Arnaldo
> 
> Test results at the end of this message, as usual.
> 
> The following changes since commit 2573be22e5b6f24a0cabc97715c808c47e29eaaf:
> 
>   Merge tag 'perf-core-for-mingo-4.21-20190103' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent (2019-01-03 14:05:16 +0100)
> 
> are available in the Git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo-4.21-20190104
> 
> for you to fetch changes up to 03fa483821c0b4db7c2b1453d3332f397d82313f:
> 
>   perf test shell: Use a fallback to get the pathname in vfs_getname (2019-01-04 15:12:29 -0300)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes:
> 
> perf annotate:
> 
>   Ivan Krylov:
> 
>   - Pass filename to objdump via execl, fixing usage with filenames
>     with special characters.
> 
> perf report:
> 
>   Jin Yao:
> 
>      Fix wrong iteration count in --branch-history
> 
> perf stat:
> 
>   Jin Yao:
> 
>   - Fix endless wait for child process
> 
> perf test:
> 
>   Arnaldo Carvalho de Melo:
> 
>   - Use a fallback to get the pathname in vfs_getname in
> 
> tools build:
> 
>   Jiri Olsa:
> 
>   - Allow overriding CFLAGS assignments.
> 
> Misc:
> 
>   Arnaldo Carvalho de Melo:
> 
>   - Syncronize UAPI headers
> 
>   Mattias Jacobsson:
> 
>   - Remove redundant va_end() in strbuf_addv()
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Arnaldo Carvalho de Melo (10):
>       tools headers x86: Sync disabled-features.h
>       tools headers uapi: Sync prctl.h with the kernel sources
>       tools beauty: Make the prctl option table generator catch all PR_ options
>       tools headers uapi: Update i915_drm.h
>       tools headers uapi: Sync linux/in.h copy from the kernel sources
>       tools headers uapi: Sync linux/kvm.h with the kernel sources
>       tools headers uapi: Sync copy of asm-generic/unistd.h with the kernel sources
>       tools headers x86: Sync asm/cpufeatures.h copy with the kernel sources
>       perf python: Make sure the python binding output directory is in place
>       perf test shell: Use a fallback to get the pathname in vfs_getname
> 
> Ivan Krylov (1):
>       perf annotate: Pass filename to objdump via execl
> 
> Jin Yao (2):
>       perf stat: Fix endless wait for child process
>       perf report: Fix wrong iteration count in --branch-history
> 
> Jiri Olsa (2):
>       tools thermal tmon: Use -O3 instead of -O1 if available
>       tools iio: Override CFLAGS assignments
> 
> Mattias Jacobsson (1):
>       perf strbuf: Remove redundant va_end() in strbuf_addv()
> 
>  tools/arch/x86/include/asm/cpufeatures.h        |  2 ++
>  tools/arch/x86/include/asm/disabled-features.h  |  8 ++++++-
>  tools/iio/Makefile                              |  2 +-
>  tools/include/uapi/asm-generic/unistd.h         |  4 +++-
>  tools/include/uapi/drm/i915_drm.h               |  8 +++++++
>  tools/include/uapi/linux/in.h                   | 10 +++++---
>  tools/include/uapi/linux/kvm.h                  | 19 +++++++++++++++
>  tools/include/uapi/linux/prctl.h                |  8 +++++++
>  tools/perf/Makefile.perf                        |  4 +++-
>  tools/perf/builtin-stat.c                       |  3 ++-
>  tools/perf/tests/shell/lib/probe_vfs_getname.sh |  3 ++-
>  tools/perf/trace/beauty/prctl_option.sh         |  2 +-
>  tools/perf/util/annotate.c                      |  8 +++----
>  tools/perf/util/callchain.c                     | 32 +++++++++++++++----------
>  tools/perf/util/callchain.h                     |  1 +
>  tools/perf/util/machine.c                       |  2 +-
>  tools/perf/util/strbuf.c                        |  1 -
>  tools/thermal/tmon/Makefile                     |  2 +-
>  18 files changed, 90 insertions(+), 29 deletions(-)

Pulled, thanks a lot Arnaldo!

	Ingo

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

* [GIT PULL 00/16] perf/core improvements and fixes
@ 2019-01-04 18:33 Arnaldo Carvalho de Melo
  2019-01-08 15:32 ` Ingo Molnar
  0 siblings, 1 reply; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2019-01-04 18:33 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Clark Williams, linux-kernel, linux-perf-users,
	Arnaldo Carvalho de Melo, Arnaldo Carvalho de Melo, Ivan Krylov,
	Jin Yao, Mattias Jacobsson

Hi Ingo,

	Please consider pulling,

Best regards,

- Arnaldo

Test results at the end of this message, as usual.

The following changes since commit 2573be22e5b6f24a0cabc97715c808c47e29eaaf:

  Merge tag 'perf-core-for-mingo-4.21-20190103' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent (2019-01-03 14:05:16 +0100)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo-4.21-20190104

for you to fetch changes up to 03fa483821c0b4db7c2b1453d3332f397d82313f:

  perf test shell: Use a fallback to get the pathname in vfs_getname (2019-01-04 15:12:29 -0300)

----------------------------------------------------------------
perf/core improvements and fixes:

perf annotate:

  Ivan Krylov:

  - Pass filename to objdump via execl, fixing usage with filenames
    with special characters.

perf report:

  Jin Yao:

     Fix wrong iteration count in --branch-history

perf stat:

  Jin Yao:

  - Fix endless wait for child process

perf test:

  Arnaldo Carvalho de Melo:

  - Use a fallback to get the pathname in vfs_getname in

tools build:

  Jiri Olsa:

  - Allow overriding CFLAGS assignments.

Misc:

  Arnaldo Carvalho de Melo:

  - Syncronize UAPI headers

  Mattias Jacobsson:

  - Remove redundant va_end() in strbuf_addv()

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Arnaldo Carvalho de Melo (10):
      tools headers x86: Sync disabled-features.h
      tools headers uapi: Sync prctl.h with the kernel sources
      tools beauty: Make the prctl option table generator catch all PR_ options
      tools headers uapi: Update i915_drm.h
      tools headers uapi: Sync linux/in.h copy from the kernel sources
      tools headers uapi: Sync linux/kvm.h with the kernel sources
      tools headers uapi: Sync copy of asm-generic/unistd.h with the kernel sources
      tools headers x86: Sync asm/cpufeatures.h copy with the kernel sources
      perf python: Make sure the python binding output directory is in place
      perf test shell: Use a fallback to get the pathname in vfs_getname

Ivan Krylov (1):
      perf annotate: Pass filename to objdump via execl

Jin Yao (2):
      perf stat: Fix endless wait for child process
      perf report: Fix wrong iteration count in --branch-history

Jiri Olsa (2):
      tools thermal tmon: Use -O3 instead of -O1 if available
      tools iio: Override CFLAGS assignments

Mattias Jacobsson (1):
      perf strbuf: Remove redundant va_end() in strbuf_addv()

 tools/arch/x86/include/asm/cpufeatures.h        |  2 ++
 tools/arch/x86/include/asm/disabled-features.h  |  8 ++++++-
 tools/iio/Makefile                              |  2 +-
 tools/include/uapi/asm-generic/unistd.h         |  4 +++-
 tools/include/uapi/drm/i915_drm.h               |  8 +++++++
 tools/include/uapi/linux/in.h                   | 10 +++++---
 tools/include/uapi/linux/kvm.h                  | 19 +++++++++++++++
 tools/include/uapi/linux/prctl.h                |  8 +++++++
 tools/perf/Makefile.perf                        |  4 +++-
 tools/perf/builtin-stat.c                       |  3 ++-
 tools/perf/tests/shell/lib/probe_vfs_getname.sh |  3 ++-
 tools/perf/trace/beauty/prctl_option.sh         |  2 +-
 tools/perf/util/annotate.c                      |  8 +++----
 tools/perf/util/callchain.c                     | 32 +++++++++++++++----------
 tools/perf/util/callchain.h                     |  1 +
 tools/perf/util/machine.c                       |  2 +-
 tools/perf/util/strbuf.c                        |  1 -
 tools/thermal/tmon/Makefile                     |  2 +-
 18 files changed, 90 insertions(+), 29 deletions(-)

Test results:

The first ones are container based builds of tools/perf with and without libelf
support.  Where clang is available, it is also used to build perf with/without
libelf, and building with LIBCLANGLLVM=1 (built-in clang) with gcc and clang
when clang and its devel libraries are installed.

The objtool and samples/bpf/ builds are disabled now that I'm switching from
using the sources in a local volume to fetching them from a http server to
build it inside the container, to make it easier to build in a container cluster.
Those will come back later.

Several are cross builds, the ones with -x-ARCH and the android one, and those
may not have all the features built, due to lack of multi-arch devel packages,
available and being used so far on just a few, like
debian:experimental-x-{arm64,mipsel}.

The 'perf test' one will perform a variety of tests exercising
tools/perf/util/, tools/lib/{bpf,traceevent,etc}, as well as run perf commands
with a variety of command line event specifications to then intercept the
sys_perf_event syscall to check that the perf_event_attr fields are set up as
expected, among a variety of other unit tests.

Then there is the 'make -C tools/perf build-test' ones, that build tools/perf/
with a variety of feature sets, exercising the build with an incomplete set of
features as well as with a complete one. It is planned to have it run on each
of the containers mentioned above, using some container orchestration
infrastructure. Get in contact if interested in helping having this in place.

  $ dm
   1  alpine:3.4                    : Ok   gcc (Alpine 5.3.0) 5.3.0
   2  alpine:3.5                    : Ok   gcc (Alpine 6.2.1) 6.2.1 20160822
   3  alpine:3.6                    : Ok   gcc (Alpine 6.3.0) 6.3.0
   4  alpine:3.7                    : Ok   gcc (Alpine 6.4.0) 6.4.0
   5  alpine:3.8                    : Ok   gcc (Alpine 6.4.0) 6.4.0
   6  alpine:edge                   : Ok   gcc (Alpine 8.2.0) 8.2.0
   7  amazonlinux:1                 : Ok   gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28)
   8  amazonlinux:2                 : Ok   gcc (GCC) 7.3.1 20180303 (Red Hat 7.3.1-5)
   9  android-ndk:r12b-arm          : Ok   arm-linux-androideabi-gcc (GCC) 4.9.x 20150123 (prerelease)
  10  android-ndk:r15c-arm          : Ok   arm-linux-androideabi-gcc (GCC) 4.9.x 20150123 (prerelease)
  11  centos:5                      : Ok   gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-55)
  12  centos:6                      : Ok   gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-23)
  13  centos:7                      : Ok   gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)
  14  clearlinux:latest             : Ok   gcc (Clear Linux OS for Intel Architecture) 8.2.1 20180502
  15  debian:7                      : Ok   gcc (Debian 4.7.2-5) 4.7.2
  16  debian:8                      : Ok   gcc (Debian 4.9.2-10+deb8u2) 4.9.2
  17  debian:9                      : Ok   gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516
  18  debian:experimental           : Ok   gcc (Debian 8.2.0-13) 8.2.0
  19  debian:experimental-x-arm64   : Ok   aarch64-linux-gnu-gcc (Debian 8.2.0-11) 8.2.0
  20  debian:experimental-x-mips    : Ok   mips-linux-gnu-gcc (Debian 8.2.0-11) 8.2.0
  21  debian:experimental-x-mips64  : Ok   mips64-linux-gnuabi64-gcc (Debian 8.2.0-11) 8.2.0
  22  debian:experimental-x-mipsel  : Ok   mipsel-linux-gnu-gcc (Debian 8.2.0-11) 8.2.0
  23  fedora:20                     : Ok   gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-7)
  24  fedora:22                     : Ok   gcc (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6)
  25  fedora:23                     : Ok   gcc (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6)
  26  fedora:24                     : Ok   gcc (GCC) 6.3.1 20161221 (Red Hat 6.3.1-1)
  27  fedora:24-x-ARC-uClibc        : Ok   arc-linux-gcc (ARCompact ISA Linux uClibc toolchain 2017.09-rc2) 7.1.1 20170710
  28  fedora:25                     : Ok   gcc (GCC) 6.4.1 20170727 (Red Hat 6.4.1-1)
  29  fedora:26                     : Ok   gcc (GCC) 7.3.1 20180130 (Red Hat 7.3.1-2)
  30  fedora:27                     : Ok   gcc (GCC) 7.3.1 20180712 (Red Hat 7.3.1-6)
  31  fedora:28                     : Ok   gcc (GCC) 8.2.1 20181105 (Red Hat 8.2.1-5)
  32  fedora:29                     : Ok   gcc (GCC) 8.2.1 20181105 (Red Hat 8.2.1-5)
  33  fedora:rawhide                : Ok   gcc (GCC) 8.2.1 20181105 (Red Hat 8.2.1-5)
  34  gentoo-stage3-amd64:latest    : Ok   gcc (Gentoo 7.3.0-r3 p1.4) 7.3.0
  35  mageia:5                      : Ok   gcc (GCC) 4.9.2
  36  mageia:6                      : Ok   gcc (Mageia 5.5.0-1.mga6) 5.5.0
  37  opensuse:13.2                 : Ok   gcc (SUSE Linux) 4.8.3 20140627 [gcc-4_8-branch revision 212064]
  38  opensuse:15.0                 : Ok   gcc (SUSE Linux) 7.3.1 20180323 [gcc-7-branch revision 258812]
  39  opensuse:42.1                 : Ok   gcc (SUSE Linux) 4.8.5
  40  opensuse:42.2                 : Ok   gcc (SUSE Linux) 4.8.5
  41  opensuse:42.3                 : Ok   gcc (SUSE Linux) 4.8.5
  42  opensuse:tumbleweed           : Ok   gcc (SUSE Linux) 8.2.1 20181108 [gcc-8-branch revision 265914]
  43  oraclelinux:6                 : Ok   gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-23.0.1)
  44  oraclelinux:7                 : Ok   gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36.0.1)
  45  ubuntu:12.04.5                : Ok   gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
  46  ubuntu:14.04.4                : Ok   gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4
  47  ubuntu:14.04.4-x-linaro-arm64 : Ok   aarch64-linux-gnu-gcc (Linaro GCC 5.5-2017.10) 5.5.0
  48  ubuntu:16.04                  : Ok   gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609
  49  ubuntu:16.04-x-arm            : Ok   arm-linux-gnueabihf-gcc (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
  50  ubuntu:16.04-x-arm64          : Ok   aarch64-linux-gnu-gcc (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
  51  ubuntu:16.04-x-powerpc        : Ok   powerpc-linux-gnu-gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
  52  ubuntu:16.04-x-powerpc64      : Ok   powerpc64-linux-gnu-gcc (Ubuntu/IBM 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
  53  ubuntu:16.04-x-powerpc64el    : Ok   powerpc64le-linux-gnu-gcc (Ubuntu/IBM 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
  54  ubuntu:16.04-x-s390           : Ok   s390x-linux-gnu-gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
  55  ubuntu:17.10                  : Ok   gcc (Ubuntu 7.2.0-8ubuntu3.2) 7.2.0
  56  ubuntu:18.04                  : Ok   gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
  57  ubuntu:18.04-x-arm            : Ok   arm-linux-gnueabihf-gcc (Ubuntu/Linaro 7.3.0-27ubuntu1~18.04) 7.3.0
  58  ubuntu:18.04-x-arm64          : Ok   aarch64-linux-gnu-gcc (Ubuntu/Linaro 7.3.0-27ubuntu1~18.04) 7.3.0
  59  ubuntu:18.04-x-m68k           : Ok   m68k-linux-gnu-gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
  60  ubuntu:18.04-x-powerpc        : Ok   powerpc-linux-gnu-gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
  61  ubuntu:18.04-x-powerpc64      : Ok   powerpc64-linux-gnu-gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
  62  ubuntu:18.04-x-powerpc64el    : Ok   powerpc64le-linux-gnu-gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
  63  ubuntu:18.04-x-riscv64        : Ok   riscv64-linux-gnu-gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
  64  ubuntu:18.04-x-s390           : Ok   s390x-linux-gnu-gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
  65  ubuntu:18.04-x-sh4            : Ok   sh4-linux-gnu-gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
  66  ubuntu:18.04-x-sparc64        : Ok   sparc64-linux-gnu-gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
  67  ubuntu:18.10                  : Ok   gcc (Ubuntu 8.2.0-7ubuntu1) 8.2.0
  68  ubuntu:19.04                  : Ok   gcc (Ubuntu 8.2.0-12ubuntu1) 8.2.0
  69  ubuntu:19.04-x-alpha          : Ok   alpha-linux-gnu-gcc (Ubuntu 8.2.0-11ubuntu1) 8.2.0
  70  ubuntu:19.04-x-hppa           : Ok   hppa-linux-gnu-gcc (Ubuntu 8.2.0-11ubuntu1) 8.2.0

  # uname -a
  Linux quaco 4.19.13-300.fc29.x86_64 #1 SMP Sat Dec 29 22:54:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
  # git log --oneline -1
  03fa483821c0 perf test shell: Use a fallback to get the pathname in vfs_getname
  # perf version --build-options
  perf version 4.20.g03fa48
                   dwarf: [ on  ]  # HAVE_DWARF_SUPPORT
      dwarf_getlocations: [ on  ]  # HAVE_DWARF_GETLOCATIONS_SUPPORT
                   glibc: [ on  ]  # HAVE_GLIBC_SUPPORT
                    gtk2: [ on  ]  # HAVE_GTK2_SUPPORT
           syscall_table: [ on  ]  # HAVE_SYSCALL_TABLE_SUPPORT
                  libbfd: [ on  ]  # HAVE_LIBBFD_SUPPORT
                  libelf: [ on  ]  # HAVE_LIBELF_SUPPORT
                 libnuma: [ on  ]  # HAVE_LIBNUMA_SUPPORT
  numa_num_possible_cpus: [ on  ]  # HAVE_LIBNUMA_SUPPORT
                 libperl: [ on  ]  # HAVE_LIBPERL_SUPPORT
               libpython: [ on  ]  # HAVE_LIBPYTHON_SUPPORT
                libslang: [ on  ]  # HAVE_SLANG_SUPPORT
               libcrypto: [ on  ]  # HAVE_LIBCRYPTO_SUPPORT
               libunwind: [ on  ]  # HAVE_LIBUNWIND_SUPPORT
      libdw-dwarf-unwind: [ on  ]  # HAVE_DWARF_SUPPORT
                    zlib: [ on  ]  # HAVE_ZLIB_SUPPORT
                    lzma: [ on  ]  # HAVE_LZMA_SUPPORT
               get_cpuid: [ on  ]  # HAVE_AUXTRACE_SUPPORT
                     bpf: [ on  ]  # HAVE_LIBBPF_SUPPORT
  # perf test
   1: vmlinux symtab matches kallsyms                       : Ok
   2: Detect openat syscall event                           : Ok
   3: Detect openat syscall event on all cpus               : Ok
   4: Read samples using the mmap interface                 : Ok
   5: Test data source output                               : Ok
   6: Parse event definition strings                        : Ok
   7: Simple expression parser                              : Ok
   8: PERF_RECORD_* events & perf_sample fields             : Ok
   9: Parse perf pmu format                                 : Ok
  10: DSO data read                                         : Ok
  11: DSO data cache                                        : Ok
  12: DSO data reopen                                       : Ok
  13: Roundtrip evsel->name                                 : Ok
  14: Parse sched tracepoints fields                        : Ok
  15: syscalls:sys_enter_openat event fields                : Ok
  16: Setup struct perf_event_attr                          : Ok
  17: Match and link multiple hists                         : Ok
  18: 'import perf' in python                               : Ok
  19: Breakpoint overflow signal handler                    : Ok
  20: Breakpoint overflow sampling                          : Ok
  21: Breakpoint accounting                                 : Ok
  22: Watchpoint                                            :
  22.1: Read Only Watchpoint                                : Skip
  22.2: Write Only Watchpoint                               : Ok
  22.3: Read / Write Watchpoint                             : Ok
  22.4: Modify Watchpoint                                   : Ok
  23: Number of exit events of a simple workload            : Ok
  24: Software clock events period values                   : Ok
  25: Object code reading                                   : Ok
  26: Sample parsing                                        : Ok
  27: Use a dummy software event to keep tracking           : Ok
  28: Parse with no sample_id_all bit set                   : Ok
  29: Filter hist entries                                   : Ok
  30: Lookup mmap thread                                    : Ok
  31: Share thread mg                                       : Ok
  32: Sort output of hist entries                           : Ok
  33: Cumulate child hist entries                           : Ok
  34: Track with sched_switch                               : Ok
  35: Filter fds with revents mask in a fdarray             : Ok
  36: Add fd to a fdarray, making it autogrow               : Ok
  37: kmod_path__parse                                      : Ok
  38: Thread map                                            : Ok
  39: LLVM search and compile                               :
  39.1: Basic BPF llvm compile                              : Ok
  39.2: kbuild searching                                    : Ok
  39.3: Compile source for BPF prologue generation          : Ok
  39.4: Compile source for BPF relocation                   : Ok
  40: Session topology                                      : Ok
  41: BPF filter                                            :
  41.1: Basic BPF filtering                                 : Ok
  41.2: BPF pinning                                         : Ok
  41.3: BPF prologue generation                             : Ok
  41.4: BPF relocation checker                              : Ok
  42: Synthesize thread map                                 : Ok
  43: Remove thread map                                     : Ok
  44: Synthesize cpu map                                    : Ok
  45: Synthesize stat config                                : Ok
  46: Synthesize stat                                       : Ok
  47: Synthesize stat round                                 : Ok
  48: Synthesize attr update                                : Ok
  49: Event times                                           : Ok
  50: Read backward ring buffer                             : Ok
  51: Print cpu map                                         : Ok
  52: Probe SDT events                                      : Ok
  53: is_printable_array                                    : Ok
  54: Print bitmap                                          : Ok
  55: perf hooks                                            : Ok
  56: builtin clang support                                 : Skip (not compiled in)
  57: unit_number__scnprintf                                : Ok
  58: mem2node                                              : Ok
  59: x86 rdpmc                                             : Ok
  60: Convert perf time to TSC                              : Ok
  61: DWARF unwind                                          : Ok
  62: x86 instruction decoder - new instructions            : Ok
  63: x86 bp modify                                         : Ok
  64: probe libc's inet_pton & backtrace it with ping       : Ok
  65: Use vfs_getname probe to get syscall args filenames   : Ok
  66: Add vfs_getname probe to get syscall args filenames   : Ok
  67: Check open filename arg using perf trace + vfs_getname: Ok

  $ make -C tools/perf build-test
  make: Entering directory '/home/acme/git/perf/tools/perf'
  - tarpkg: ./tests/perf-targz-src-pkg .
            make_no_demangle_O: make NO_DEMANGLE=1
             make_no_libperl_O: make NO_LIBPERL=1
                make_no_newt_O: make NO_NEWT=1
                make_no_gtk2_O: make NO_GTK2=1
              make_no_libbpf_O: make NO_LIBBPF=1
                 make_static_O: make LDFLAGS=-static
                  make_no_ui_O: make NO_NEWT=1 NO_SLANG=1 NO_GTK2=1
                 make_cscope_O: make cscope
            make_no_libaudit_O: make NO_LIBAUDIT=1
                   make_help_O: make help
            make_no_auxtrace_O: make NO_AUXTRACE=1
             make_no_libnuma_O: make NO_LIBNUMA=1
                 make_perf_o_O: make perf.o
              make_no_libelf_O: make NO_LIBELF=1
         make_install_prefix_O: make install prefix=/tmp/krava
                   make_tags_O: make tags
           make_no_backtrace_O: make NO_BACKTRACE=1
                   make_pure_O: make
           make_no_libunwind_O: make NO_LIBUNWIND=1
               make_no_slang_O: make NO_SLANG=1
                make_install_O: make install
              make_clean_all_O: make clean all
            make_install_bin_O: make install-bin
           make_no_libpython_O: make NO_LIBPYTHON=1
                  make_debug_O: make DEBUG=1
                    make_doc_O: make doc
                make_minimal_O: make NO_LIBPERL=1 NO_LIBPYTHON=1 NO_NEWT=1 NO_GTK2=1 NO_DEMANGLE=1 NO_LIBELF=1 NO_LIBUNWIND=1 NO_BACKTRACE=1 NO_LIBNUMA=1 NO_LIBAUDIT=1 NO_LIBBIONIC=1 NO_LIBDW_DWARF_UNWIND=1 NO_AUXTRACE=1 NO_LIBBPF=1 NO_LIBCRYPTO=1 NO_SDT=1 NO_JVMTI=1
         make_with_clangllvm_O: make LIBCLANGLLVM=1
       make_util_pmu_bison_o_O: make util/pmu-bison.o
           make_no_libbionic_O: make NO_LIBBIONIC=1
             make_no_scripts_O: make NO_LIBPYTHON=1 NO_LIBPERL=1
             make_util_map_o_O: make util/map.o
        make_with_babeltrace_O: make LIBBABELTRACE=1
   make_install_prefix_slash_O: make install prefix=/tmp/krava/
  make_no_libdw_dwarf_unwind_O: make NO_LIBDW_DWARF_UNWIND=1
  OK
  make: Leaving directory '/home/acme/git/perf/tools/perf'
  $


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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2016-07-05  0:38 Arnaldo Carvalho de Melo
@ 2016-07-05 10:14 ` Ingo Molnar
  0 siblings, 0 replies; 58+ messages in thread
From: Ingo Molnar @ 2016-07-05 10:14 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Adrian Hunter, Alexei Starovoitov,
	Ananth N Mavinakayanahalli, Brendan Gregg, Chris Phlipot,
	Christoph Hellwig, Daniel Borkmann, David Ahern, Eric Leblond,
	He Kuang, Hemant Kumar, Jiri Olsa, Masami Hiramatsu,
	Milian Wolff, Namhyung Kim, Peter Zijlstra, pi3orama,
	Taeung Song, Wang Nan, Zefan Li, Arnaldo Carvalho de Melo


* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Hi Ingo,
> 
> 	Please consider pulling,
> 
> 	Build status:
> 
> [root@jouet ~]# dm
> alpine:3.4: FAIL  <--- strerror_r usage needs to be made XSI-compliant, Alpine Linux uses musl libc
> centos:5: FAIL    <--- flex snafu, being investigated by Jiri
> centos:6: Ok
> centos:7: Ok
> debian:7: Ok
> debian:8: Ok
> debian:experimental: Ok
> fedora:21: Ok
> fedora:22: Ok
> fedora:23: Ok
> fedora:24: Ok
> fedora:rawhide: Ok
> mageia:5: Ok
> opensuse:13.2: Ok
> opensuse:42.1: Ok
> ubuntu:12.04.5: Ok
> ubuntu:14.04.4: Ok
> ubuntu:15.10: Ok
> ubuntu:16.04: Ok
> [root@jouet ~]#
> 
> 	These images are now available at: https://hub.docker.com/search/?q=acmel
> 
> 	And the 'dm' script at: https://fedorapeople.org/~acme/perf/dm
> 
> Regards,
> 
> - Arnaldo
> 
> The following changes since commit dc29bb47a34130459fadd58f05e2acd051a6327d:
> 
>   Merge tag 'perf-core-for-mingo-20160630' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2016-07-01 08:40:39 +0200)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo-20160704
> 
> for you to fetch changes up to f3d082ceabe53177c98bfa4580a294c2844966e8:
> 
>   perf tools: Sync copy of syscall_64.tbl with the kernel (2016-07-04 20:29:40 -0300)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes:
> 
> Documentation:
> 
> - Update android build documentation (Chris Phlipot)
> 
> Infrastructure:
> 
> - Respect WERROR=0 in libapi and libsubcmd, to allow building on Android (Chris Phlipot)
> 
> - Prep work to support SDT events in probe cache (Masami Hiramatsu)
> 
> - ELF support for SDT (Hemant Kumar)
> 
> - Add feature detection for libelf's elf_getshdrstrndx function (Arnaldo Carvalho de Melo)
> 
> - Fix hist accumulation test (Jiri Olsa)
> 
> - Unwind callchain fixes (Jiri Olsa)
> 
> - Change internal representation of numa nodes obtained from
>   perf.data header (Jiri Olsa)
> 
> - Sync copy of syscall_64.tbl with the kernel (Arnaldo Carvalho de Melo)
> 
> - Add LGPL 2.1 license header to libbpf source files (Wang Nan)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Arnaldo Carvalho de Melo (2):
>       perf build: Add feature detection for libelf's elf_getshdrstrndx()
>       perf tools: Sync copy of syscall_64.tbl with the kernel
> 
> Chris Phlipot (3):
>       tools lib api: Respect WERROR=0 for build
>       tools lib subcmd: Respect WERROR=0 for build
>       perf tools: Update android build documentation
> 
> Hemant Kumar (1):
>       perf sdt: ELF support for SDT
> 
> Jiri Olsa (4):
>       perf header: Transform nodes string info to struct
>       perf tests: Fix hist accumulation test
>       perf unwind: Add initialized arg into unwind__prepare_access
>       perf unwind: Call unwind__prepare_access for forked thread
> 
> Masami Hiramatsu (5):
>       perf probe: Use cache entry if possible
>       perf probe: Show all cached probes
>       perf probe: Remove caches when --cache is given
>       perf probe: Add group name support
>       perf buildid-cache: Scan and import user SDT events to probe cache
> 
> Wang Nan (1):
>       tools lib bpf: Add license header
> 
>  tools/build/Makefile.feature                      |   1 +
>  tools/build/feature/Makefile                      |   4 +
>  tools/build/feature/test-all.c                    |   5 +
>  tools/build/feature/test-libelf-getshdrstrndx.c   |   8 +
>  tools/lib/api/Makefile                            |   8 +-
>  tools/lib/bpf/bpf.c                               |  13 ++
>  tools/lib/bpf/bpf.h                               |  13 ++
>  tools/lib/bpf/libbpf.c                            |  13 ++
>  tools/lib/bpf/libbpf.h                            |  13 ++
>  tools/lib/subcmd/Makefile                         |   8 +-
>  tools/perf/Documentation/android.txt              |  16 +-
>  tools/perf/Documentation/perf-buildid-cache.txt   |   3 +
>  tools/perf/Documentation/perf-probe.txt           |  19 +-
>  tools/perf/arch/x86/entry/syscalls/syscall_64.tbl |   2 +
>  tools/perf/builtin-probe.c                        |  31 ++-
>  tools/perf/config/Makefile                        |   4 +
>  tools/perf/tests/hists_cumulate.c                 |   4 +
>  tools/perf/util/build-id.c                        | 138 +++++++++++-
>  tools/perf/util/build-id.h                        |   3 +
>  tools/perf/util/callchain.h                       |   1 +
>  tools/perf/util/env.c                             |   5 +-
>  tools/perf/util/env.h                             |  10 +-
>  tools/perf/util/header.c                          |  76 +++----
>  tools/perf/util/map.c                             |   9 +-
>  tools/perf/util/map.h                             |   2 +-
>  tools/perf/util/probe-event.c                     |  91 +++++++-
>  tools/perf/util/probe-file.c                      | 175 ++++++++++++++-
>  tools/perf/util/probe-file.h                      |  10 +-
>  tools/perf/util/symbol-elf.c                      | 260 ++++++++++++++++++++++
>  tools/perf/util/symbol.h                          |  22 ++
>  tools/perf/util/thread.c                          |  39 +++-
>  tools/perf/util/unwind-libunwind.c                |  11 +-
>  tools/perf/util/unwind.h                          |   9 +-
>  tools/perf/util/util.c                            |  19 +-
>  34 files changed, 940 insertions(+), 105 deletions(-)
>  create mode 100644 tools/build/feature/test-libelf-getshdrstrndx.c

Pulled, thanks a lot Arnaldo!

	Ingo

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

* [GIT PULL 00/16] perf/core improvements and fixes
@ 2016-07-05  0:38 Arnaldo Carvalho de Melo
  2016-07-05 10:14 ` Ingo Molnar
  0 siblings, 1 reply; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2016-07-05  0:38 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Alexei Starovoitov, Ananth N Mavinakayanahalli, Brendan Gregg,
	Chris Phlipot, Christoph Hellwig, Daniel Borkmann, David Ahern,
	Eric Leblond, He Kuang, Hemant Kumar, Jiri Olsa,
	Masami Hiramatsu, Milian Wolff, Namhyung Kim, Peter Zijlstra,
	pi3orama, Taeung Song, Wang Nan, Zefan Li,
	Arnaldo Carvalho de Melo

Hi Ingo,

	Please consider pulling,

	Build status:

[root@jouet ~]# dm
alpine:3.4: FAIL  <--- strerror_r usage needs to be made XSI-compliant, Alpine Linux uses musl libc
centos:5: FAIL    <--- flex snafu, being investigated by Jiri
centos:6: Ok
centos:7: Ok
debian:7: Ok
debian:8: Ok
debian:experimental: Ok
fedora:21: Ok
fedora:22: Ok
fedora:23: Ok
fedora:24: Ok
fedora:rawhide: Ok
mageia:5: Ok
opensuse:13.2: Ok
opensuse:42.1: Ok
ubuntu:12.04.5: Ok
ubuntu:14.04.4: Ok
ubuntu:15.10: Ok
ubuntu:16.04: Ok
[root@jouet ~]#

	These images are now available at: https://hub.docker.com/search/?q=acmel

	And the 'dm' script at: https://fedorapeople.org/~acme/perf/dm

Regards,

- Arnaldo

The following changes since commit dc29bb47a34130459fadd58f05e2acd051a6327d:

  Merge tag 'perf-core-for-mingo-20160630' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2016-07-01 08:40:39 +0200)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo-20160704

for you to fetch changes up to f3d082ceabe53177c98bfa4580a294c2844966e8:

  perf tools: Sync copy of syscall_64.tbl with the kernel (2016-07-04 20:29:40 -0300)

----------------------------------------------------------------
perf/core improvements and fixes:

Documentation:

- Update android build documentation (Chris Phlipot)

Infrastructure:

- Respect WERROR=0 in libapi and libsubcmd, to allow building on Android (Chris Phlipot)

- Prep work to support SDT events in probe cache (Masami Hiramatsu)

- ELF support for SDT (Hemant Kumar)

- Add feature detection for libelf's elf_getshdrstrndx function (Arnaldo Carvalho de Melo)

- Fix hist accumulation test (Jiri Olsa)

- Unwind callchain fixes (Jiri Olsa)

- Change internal representation of numa nodes obtained from
  perf.data header (Jiri Olsa)

- Sync copy of syscall_64.tbl with the kernel (Arnaldo Carvalho de Melo)

- Add LGPL 2.1 license header to libbpf source files (Wang Nan)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Arnaldo Carvalho de Melo (2):
      perf build: Add feature detection for libelf's elf_getshdrstrndx()
      perf tools: Sync copy of syscall_64.tbl with the kernel

Chris Phlipot (3):
      tools lib api: Respect WERROR=0 for build
      tools lib subcmd: Respect WERROR=0 for build
      perf tools: Update android build documentation

Hemant Kumar (1):
      perf sdt: ELF support for SDT

Jiri Olsa (4):
      perf header: Transform nodes string info to struct
      perf tests: Fix hist accumulation test
      perf unwind: Add initialized arg into unwind__prepare_access
      perf unwind: Call unwind__prepare_access for forked thread

Masami Hiramatsu (5):
      perf probe: Use cache entry if possible
      perf probe: Show all cached probes
      perf probe: Remove caches when --cache is given
      perf probe: Add group name support
      perf buildid-cache: Scan and import user SDT events to probe cache

Wang Nan (1):
      tools lib bpf: Add license header

 tools/build/Makefile.feature                      |   1 +
 tools/build/feature/Makefile                      |   4 +
 tools/build/feature/test-all.c                    |   5 +
 tools/build/feature/test-libelf-getshdrstrndx.c   |   8 +
 tools/lib/api/Makefile                            |   8 +-
 tools/lib/bpf/bpf.c                               |  13 ++
 tools/lib/bpf/bpf.h                               |  13 ++
 tools/lib/bpf/libbpf.c                            |  13 ++
 tools/lib/bpf/libbpf.h                            |  13 ++
 tools/lib/subcmd/Makefile                         |   8 +-
 tools/perf/Documentation/android.txt              |  16 +-
 tools/perf/Documentation/perf-buildid-cache.txt   |   3 +
 tools/perf/Documentation/perf-probe.txt           |  19 +-
 tools/perf/arch/x86/entry/syscalls/syscall_64.tbl |   2 +
 tools/perf/builtin-probe.c                        |  31 ++-
 tools/perf/config/Makefile                        |   4 +
 tools/perf/tests/hists_cumulate.c                 |   4 +
 tools/perf/util/build-id.c                        | 138 +++++++++++-
 tools/perf/util/build-id.h                        |   3 +
 tools/perf/util/callchain.h                       |   1 +
 tools/perf/util/env.c                             |   5 +-
 tools/perf/util/env.h                             |  10 +-
 tools/perf/util/header.c                          |  76 +++----
 tools/perf/util/map.c                             |   9 +-
 tools/perf/util/map.h                             |   2 +-
 tools/perf/util/probe-event.c                     |  91 +++++++-
 tools/perf/util/probe-file.c                      | 175 ++++++++++++++-
 tools/perf/util/probe-file.h                      |  10 +-
 tools/perf/util/symbol-elf.c                      | 260 ++++++++++++++++++++++
 tools/perf/util/symbol.h                          |  22 ++
 tools/perf/util/thread.c                          |  39 +++-
 tools/perf/util/unwind-libunwind.c                |  11 +-
 tools/perf/util/unwind.h                          |   9 +-
 tools/perf/util/util.c                            |  19 +-
 34 files changed, 940 insertions(+), 105 deletions(-)
 create mode 100644 tools/build/feature/test-libelf-getshdrstrndx.c

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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2016-01-29 21:17 Arnaldo Carvalho de Melo
@ 2016-02-03 10:02 ` Ingo Molnar
  0 siblings, 0 replies; 58+ messages in thread
From: Ingo Molnar @ 2016-02-03 10:02 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Adrian Hunter, Alexander Yarygin,
	Alexei Starovoitov, Al Grant, Brendan Gregg, Chunyan Zhang,
	Daniel Borkmann, David Ahern, He Kuang, Hemant Kumar, Jiri Olsa,
	linux-arm-kernel, linux-doc, linuxppc-dev, Li Zefan,
	Masami Hiramatsu, Mathieu Poirier, Michael Ellerman, Mike Leach,
	Namhyung Kim, Naveen N . Rao, Paul Mackerras, Peter Zijlstra,
	pi3orama, Rabin Vincent, Scott Wood, Srikar Dronamraju,
	Tor Jeremiassen, Wang Nan, Will Deacon, Arnaldo Carvalho de Melo


* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Hi Ingo,
> 
> 	This is on top of the previously submitted perf-core-for-mingo tag,
> please consider applying,
> 
> - Arnaldo
> 
> The following changes since commit 5ac76283b32b116c58e362e99542182ddcfc8262:
> 
>   perf cpumap: Auto initialize cpu__max_{node,cpu} (2016-01-26 16:08:36 -0300)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo-2
> 
> for you to fetch changes up to 814568db641f6587c1e98a3a85f214cb6a30fe10:
> 
>   perf build: Align the names of the build tests: (2016-01-29 17:51:04 -0300)
> 
> ----------------------------------------------------------------
> New features:
> 
> - Port 'perf kvm stat' to PowerPC (Hemant Kumar)
> 
> Infrastructure:
> 
> - Use the 'feature-dump' target to do the feature checks just once and then
>   add code to reuse that in the tests/make makefile, speeding up the
>   'make -C tools/perf build-test' target (Wang Nan)
> 
> - Reduce the number of tests the 'build-test' target do to those that don't
>   pollute the source tree (Arnaldo Carvalho de Melo)
> 
> - Improve the output of the build tests a bit by aligning the name of the
>   tests, more can be done to filter out uninteresting info in the output
>   (Arnaldo Carvalho de Melo)
> 
> - Add perf_evlist pointer to *info_priv_size(), more prep work for
>   supporting the coresight architecture (Mathieu Poirier)
> 
> - Improve the 'perf test bp_signal' test (Wang Nan)
> 
> - Check environment before starting the BPF 'perf test', so that we can just
>   'Skip' older kernels instead of 'FAIL'ing them (Wang Nan)
> 
> - Fix cpumode of synthesized buildid event (Wang Nan)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Arnaldo Carvalho de Melo (2):
>       perf tools: Speed up build-tests by reducing the number of builds tested
>       perf build: Align the names of the build tests:
> 
> Hemant Kumar (4):
>       perf kvm/{x86,s390}: Remove dependency on uapi/kvm_perf.h
>       perf kvm/{x86,s390}: Remove const from kvm_events_tp
>       perf kvm/powerpc: Port perf kvm stat to powerpc
>       perf kvm/powerpc: Add support for HCALL reasons
> 
> Jiri Olsa (1):
>       perf build: Fix feature-dump checks, we need to test all features
> 
> Mathieu Poirier (1):
>       perf auxtrace: Add perf_evlist pointer to *info_priv_size()
> 
> Wang Nan (8):
>       tools build: Check basic headers for test-compile feature checker
>       perf build: Remove all condition feature check {C,LD}FLAGS
>       perf build: Use feature dump file for build-test
>       perf buildid: Fix cpumode of buildid event
>       perf test: Check environment before start real BPF test
>       perf test: Improve bp_signal
>       perf tools: Move timestamp creation to util
>       perf record: Use OPT_BOOLEAN_SET for buildid cache related options
> 
>  tools/build/Makefile.feature                   |   8 ++
>  tools/build/feature/test-compile.c             |   2 +
>  tools/perf/Makefile                            |  11 +-
>  tools/perf/arch/powerpc/Makefile               |   2 +
>  tools/perf/arch/powerpc/util/Build             |   1 +
>  tools/perf/arch/powerpc/util/book3s_hcalls.h   | 123 ++++++++++++++++++
>  tools/perf/arch/powerpc/util/book3s_hv_exits.h |  33 +++++
>  tools/perf/arch/powerpc/util/kvm-stat.c        | 170 +++++++++++++++++++++++++
>  tools/perf/arch/s390/util/kvm-stat.c           |  10 +-
>  tools/perf/arch/x86/util/intel-bts.c           |   4 +-
>  tools/perf/arch/x86/util/intel-pt.c            |   4 +-
>  tools/perf/arch/x86/util/kvm-stat.c            |  16 ++-
>  tools/perf/builtin-buildid-cache.c             |  14 +-
>  tools/perf/builtin-kvm.c                       |  38 ++++--
>  tools/perf/builtin-record.c                    |  12 +-
>  tools/perf/config/Makefile                     | 101 +++++++--------
>  tools/perf/tests/bp_signal.c                   | 140 ++++++++++++++++----
>  tools/perf/tests/bpf.c                         |  37 ++++++
>  tools/perf/tests/make                          |  39 +++++-
>  tools/perf/util/auxtrace.c                     |   7 +-
>  tools/perf/util/auxtrace.h                     |   6 +-
>  tools/perf/util/build-id.c                     |   6 +-
>  tools/perf/util/kvm-stat.h                     |   8 +-
>  tools/perf/util/util.c                         |  17 +++
>  tools/perf/util/util.h                         |   1 +
>  25 files changed, 688 insertions(+), 122 deletions(-)
>  create mode 100644 tools/perf/arch/powerpc/util/book3s_hcalls.h
>  create mode 100644 tools/perf/arch/powerpc/util/book3s_hv_exits.h
>  create mode 100644 tools/perf/arch/powerpc/util/kvm-stat.c

Pulled, thanks a lot Arnaldo!

	Ingo

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

* [GIT PULL 00/16] perf/core improvements and fixes
@ 2016-01-29 21:17 Arnaldo Carvalho de Melo
  2016-02-03 10:02 ` Ingo Molnar
  0 siblings, 1 reply; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2016-01-29 21:17 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Alexander Yarygin, Alexei Starovoitov, Al Grant, Brendan Gregg,
	Chunyan Zhang, Daniel Borkmann, David Ahern, He Kuang,
	Hemant Kumar, Jiri Olsa, linux-arm-kernel, linux-doc,
	linuxppc-dev, Li Zefan, Masami Hiramatsu, Mathieu Poirier,
	Michael Ellerman, Mike Leach, Namhyung Kim, Naveen N . Rao,
	Paul Mackerras, Peter Zijlstra, pi3orama, Rabin Vincent,
	Scott Wood, Srikar Dronamraju, Tor Jeremiassen, Wang Nan,
	Will Deacon, Arnaldo Carvalho de Melo

See http://www.infradead.org/rpr.html

Hi Ingo,

	This is on top of the previously submitted perf-core-for-mingo tag,
please consider applying,

- Arnaldo

The following changes since commit 5ac76283b32b116c58e362e99542182ddcfc8262:

  perf cpumap: Auto initialize cpu__max_{node,cpu} (2016-01-26 16:08:36 -0300)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo-2

for you to fetch changes up to 814568db641f6587c1e98a3a85f214cb6a30fe10:

  perf build: Align the names of the build tests: (2016-01-29 17:51:04 -0300)

----------------------------------------------------------------
New features:

- Port 'perf kvm stat' to PowerPC (Hemant Kumar)

Infrastructure:

- Use the 'feature-dump' target to do the feature checks just once and then
  add code to reuse that in the tests/make makefile, speeding up the
  'make -C tools/perf build-test' target (Wang Nan)

- Reduce the number of tests the 'build-test' target do to those that don't
  pollute the source tree (Arnaldo Carvalho de Melo)

- Improve the output of the build tests a bit by aligning the name of the
  tests, more can be done to filter out uninteresting info in the output
  (Arnaldo Carvalho de Melo)

- Add perf_evlist pointer to *info_priv_size(), more prep work for
  supporting the coresight architecture (Mathieu Poirier)

- Improve the 'perf test bp_signal' test (Wang Nan)

- Check environment before starting the BPF 'perf test', so that we can just
  'Skip' older kernels instead of 'FAIL'ing them (Wang Nan)

- Fix cpumode of synthesized buildid event (Wang Nan)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Arnaldo Carvalho de Melo (2):
      perf tools: Speed up build-tests by reducing the number of builds tested
      perf build: Align the names of the build tests:

Hemant Kumar (4):
      perf kvm/{x86,s390}: Remove dependency on uapi/kvm_perf.h
      perf kvm/{x86,s390}: Remove const from kvm_events_tp
      perf kvm/powerpc: Port perf kvm stat to powerpc
      perf kvm/powerpc: Add support for HCALL reasons

Jiri Olsa (1):
      perf build: Fix feature-dump checks, we need to test all features

Mathieu Poirier (1):
      perf auxtrace: Add perf_evlist pointer to *info_priv_size()

Wang Nan (8):
      tools build: Check basic headers for test-compile feature checker
      perf build: Remove all condition feature check {C,LD}FLAGS
      perf build: Use feature dump file for build-test
      perf buildid: Fix cpumode of buildid event
      perf test: Check environment before start real BPF test
      perf test: Improve bp_signal
      perf tools: Move timestamp creation to util
      perf record: Use OPT_BOOLEAN_SET for buildid cache related options

 tools/build/Makefile.feature                   |   8 ++
 tools/build/feature/test-compile.c             |   2 +
 tools/perf/Makefile                            |  11 +-
 tools/perf/arch/powerpc/Makefile               |   2 +
 tools/perf/arch/powerpc/util/Build             |   1 +
 tools/perf/arch/powerpc/util/book3s_hcalls.h   | 123 ++++++++++++++++++
 tools/perf/arch/powerpc/util/book3s_hv_exits.h |  33 +++++
 tools/perf/arch/powerpc/util/kvm-stat.c        | 170 +++++++++++++++++++++++++
 tools/perf/arch/s390/util/kvm-stat.c           |  10 +-
 tools/perf/arch/x86/util/intel-bts.c           |   4 +-
 tools/perf/arch/x86/util/intel-pt.c            |   4 +-
 tools/perf/arch/x86/util/kvm-stat.c            |  16 ++-
 tools/perf/builtin-buildid-cache.c             |  14 +-
 tools/perf/builtin-kvm.c                       |  38 ++++--
 tools/perf/builtin-record.c                    |  12 +-
 tools/perf/config/Makefile                     | 101 +++++++--------
 tools/perf/tests/bp_signal.c                   | 140 ++++++++++++++++----
 tools/perf/tests/bpf.c                         |  37 ++++++
 tools/perf/tests/make                          |  39 +++++-
 tools/perf/util/auxtrace.c                     |   7 +-
 tools/perf/util/auxtrace.h                     |   6 +-
 tools/perf/util/build-id.c                     |   6 +-
 tools/perf/util/kvm-stat.h                     |   8 +-
 tools/perf/util/util.c                         |  17 +++
 tools/perf/util/util.h                         |   1 +
 25 files changed, 688 insertions(+), 122 deletions(-)
 create mode 100644 tools/perf/arch/powerpc/util/book3s_hcalls.h
 create mode 100644 tools/perf/arch/powerpc/util/book3s_hv_exits.h
 create mode 100644 tools/perf/arch/powerpc/util/kvm-stat.c

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

* [GIT PULL 00/16] perf/core improvements and fixes
@ 2015-12-14 17:44 Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-12-14 17:44 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Alexei Starovoitov, Andi Kleen, David Ahern, He Kuang, Jiri Olsa,
	Josh Poimboeuf, Masami Hiramatsu, Namhyung Kim, Peter Zijlstra,
	pi3orama, Wang Nan, Zefan Li, Arnaldo Carvalho de Melo

Hi Ingo,

	Please consider pulling,

- Arnaldo

The following changes since commit 0d76ded582c178d3cca55c9112eceb5b0f12f558:

  Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-12-14 09:31:39 +0100)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo

for you to fetch changes up to 7efe0e034c713716060bc7794c7e332589980c70:

  perf record: Support custom vmlinux path (2015-12-14 13:04:12 -0300)

----------------------------------------------------------------
perf/core improvements and fixes:

User visible:

- Make command line options always available, even when they
  depend on some feature being enabled, warning the user about
  use of such options (Wang Nan)

- Support --vmlinux in perf record, useful, so far, for eBPF,
  where we will set up events that will be used in the record
  session (He Kuang)

- Automatically disable collecting branch flags and cycles with
  --call-graph lbr. This allows avoiding a bunch of extra MSR
  reads in the PMI on Skylake.  (Andi Kleen)

Infrastructure:

- Dump the stack when a 'perf test -v ' entry segfaults, so far we
  would have to run it under gdb with 'set follow-fork-mode child'
  set to get a proper backtrace (Arnaldo Carvalho de Melo)

- Initialize the refcnt in 'struct thread' to 1 and fixup its
  users accordingly, so that we try to have the same refcount
  model accross the perf codebase (Arnaldo Carvalho de Melo)

- More prep work for moving the subcmd infrastructure out of
  tools/perf/ and into tools/lib/subcmd/ to be used by other
  tools/ living utilities (Josh Poimboeuf)

- Fix 'perf test' hist testcases when kptr_restrict is on (Namhyung Kim)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Andi Kleen (1):
      perf evsel: Disable branch flags/cycles for --callgraph lbr

Arnaldo Carvalho de Melo (3):
      perf tools: Use same signal handling strategy as 'record'
      perf test: Dump the stack when test segfaults when in verbose mode
      perf thread: Fix reference count initial state

He Kuang (1):
      perf record: Support custom vmlinux path

Josh Poimboeuf (9):
      perf build: Remove unnecessary line in Makefile.feature
      perf test: Add Build file to dependencies for llvm-src-*.c
      perf test: Remove tarpkg at end of test
      perf build: Fix 'make clean'
      perf build: Rename LIB_PATH -> API_PATH
      perf tools: Create pager.h
      perf tools: Remove check for unused PERF_PAGER_IN_USE
      perf tools: Move help_unknown_cmd() to its own file
      perf tools: Convert parse-options.c internal functions to static

Namhyung Kim (1):
      perf test: Fix hist testcases when kptr_restrict is on

Wang Nan (1):
      perf tools: Make options always available, even if required libs not linked

 tools/build/Makefile.feature             |   1 -
 tools/perf/Documentation/perf-record.txt |  10 ++-
 tools/perf/Makefile.perf                 |  15 ++--
 tools/perf/builtin-probe.c               |  15 +++-
 tools/perf/builtin-record.c              |  25 +++++-
 tools/perf/tests/Build                   |   6 +-
 tools/perf/tests/builtin-test.c          |   3 +
 tools/perf/tests/hists_common.c          |   5 +-
 tools/perf/tests/make                    |   3 +-
 tools/perf/util/Build                    |   1 +
 tools/perf/util/cache.h                  |   5 +-
 tools/perf/util/evsel.c                  |  14 +++-
 tools/perf/util/help-unknown-cmd.c       | 103 +++++++++++++++++++++++
 tools/perf/util/help-unknown-cmd.h       |   0
 tools/perf/util/help.c                   | 107 +-----------------------
 tools/perf/util/help.h                   |   3 +
 tools/perf/util/intel-pt.c               |   4 +-
 tools/perf/util/machine.c                |  19 +++--
 tools/perf/util/pager.c                  |   8 +-
 tools/perf/util/pager.h                  |   7 ++
 tools/perf/util/parse-options.c          | 136 +++++++++++++++++++++++++++----
 tools/perf/util/parse-options.h          |  14 ++--
 tools/perf/util/thread.c                 |  10 ++-
 tools/perf/util/util.c                   |   3 +-
 24 files changed, 341 insertions(+), 176 deletions(-)
 create mode 100644 tools/perf/util/help-unknown-cmd.c
 create mode 100644 tools/perf/util/help-unknown-cmd.h
 create mode 100644 tools/perf/util/pager.h

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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2015-10-05 21:03 Arnaldo Carvalho de Melo
@ 2015-10-06  7:09 ` Ingo Molnar
  0 siblings, 0 replies; 58+ messages in thread
From: Ingo Molnar @ 2015-10-06  7:09 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Adrian Hunter, Andi Kleen, Borislav Petkov,
	Chandler Carruth, Daniel Bristot de Oliveira, David Ahern,
	Don Zickus, Fenghua Yu, Frederic Weisbecker, Jiri Olsa,
	Kanaka Juvva, Kan Liang, Matt Fleming, Namhyung Kim,
	Peter Zijlstra, Stephane Eranian, Vikas Shivappa, Vince Weaver,
	Wang Nan, Arnaldo Carvalho de Melo


* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Hi Ingo,
> 
> 	Please consider pulling,
> 
> - Arnaldo
> 
> The following changes since commit e3b0ac1b7a8a590440a2030e7d10d48c59ab8a2a:
> 
>   Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-10-03 08:20:14 +0200)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo
> 
> for you to fetch changes up to 27bf90bf0690f55c3679bcc4c325823cf1cfd19d:
> 
>   perf tools: Fail properly in case pattern matching fails to find tracepoint (2015-10-05 17:59:50 -0300)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes:
> 
> User visible:
> 
> - Switch the default callchain output mode to 'graph,0.5,caller', to make it
>   look like the default for other tools, reducing the learning curve for
>   people used to 'caller' based viewing (Arnaldo Carvalho de Melo)
> 
> - Implement column based horizontal scrolling in the hists browser (top, report),
>   making it possible to use the TUI for things like 'perf mem report' where
>   there are many more columns than can fit in a terminal (Arnaldo Carvalho de Melo)
> 
> - Support sorting by symbol_iaddr with perf.data files produced by
>   'perf mem record' (Don Zickus)
> 
> - Display DATA_SRC sample type bit, i.e. when running 'perf evlist -v' the
>   "DATA_SRC" wasn't appearing when set, fix it to look like: (Jiri Olsa)
> 
>   cpu/mem-loads/pp: ...SNIP... sample_type: IP|TID|TIME|ADDR|CPU|PERIOD|DATA_SRC
> 
> - Introduce 'P' event modified, meaning 'max precision level, please', i.e.:
> 
>    $ perf record -e cycles:P usleep 1
> 
>   Is now similar to:
> 
>    $ perf record usleep 1
> 
>   Useful, for instance, when specifying multiple events (Jiri Olsa)
> 
> - Make 'perf -v' and 'perf -h' work (Jiri Olsa)
> 
> - Fail properly when pattern matching fails to find a tracepoint, i.e.
>   '-e non:existent' was being correctly handled, with a proper error message
>   about that not being a valid event, but '-e non:existent*' wasn't,
>   fix it (Jiri Olsa)
> 
> Infrastructure:
> 
> - Separate arch specific entries in 'perf test' and add an 'Intel CQM' one
>   to be fun on x86 only (Matt Fleming)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Arnaldo Carvalho de Melo (3):
>       perf callchain: Switch default to 'graph,0.5,caller'
>       perf ui browser: Optional horizontal scrolling key binding
>       perf hists browser: Implement horizontal scrolling
> 
> Don Zickus (1):
>       perf tools: Add support for sorting on the iaddr
> 
> Jiri Olsa (9):
>       tools lib api fs: No need to use PATH_MAX + 1
>       perf evlist: Display DATA_SRC sample type bit
>       perf annotate: Fix sizeof_sym_hist overflow issue
>       perf tools: Export perf_event_attr__set_max_precise_ip()
>       perf tools: Introduce 'P' modifier to request max precision
>       perf tests: Add parsing test for 'P' modifier
>       perf tools: Setup proper width for symbol_iaddr field
>       perf tools: Handle -h and -v options
>       perf tools: Fail properly in case pattern matching fails to find tracepoint
> 
> Matt Fleming (3):
>       perf tests: Add arch tests
>       perf tests: Move x86 tests into arch directory
>       perf tests: Add Intel CQM test
> 
>  tools/lib/api/fs/fs.c                              |   2 +-
>  tools/lib/api/fs/tracing_path.c                    |   6 +-
>  tools/perf/Documentation/perf-list.txt             |   1 +
>  tools/perf/Documentation/perf-report.txt           |   2 +-
>  tools/perf/Documentation/perf.txt                  |   8 ++
>  tools/perf/arch/x86/Build                          |   2 +-
>  tools/perf/arch/x86/include/arch-tests.h           |  19 ++++
>  tools/perf/arch/x86/tests/Build                    |  10 +-
>  tools/perf/arch/x86/tests/arch-tests.c             |  34 ++++++
>  tools/perf/arch/x86/tests/dwarf-unwind.c           |   1 +
>  .../perf/{ => arch/x86}/tests/gen-insn-x86-dat.awk |   0
>  .../perf/{ => arch/x86}/tests/gen-insn-x86-dat.sh  |   0
>  tools/perf/{ => arch/x86}/tests/insn-x86-dat-32.c  |   0
>  tools/perf/{ => arch/x86}/tests/insn-x86-dat-64.c  |   0
>  tools/perf/{ => arch/x86}/tests/insn-x86-dat-src.c |   0
>  tools/perf/{ => arch/x86}/tests/insn-x86.c         |   3 +-
>  tools/perf/arch/x86/tests/intel-cqm.c              | 124 +++++++++++++++++++++
>  tools/perf/{ => arch/x86}/tests/perf-time-to-tsc.c |   4 +-
>  tools/perf/{ => arch/x86}/tests/rdpmc.c            |   7 +-
>  tools/perf/builtin-report.c                        |   4 +-
>  tools/perf/perf.c                                  |  14 +++
>  tools/perf/tests/Build                             |   6 -
>  tools/perf/tests/builtin-test.c                    |  56 ++++------
>  tools/perf/tests/dwarf-unwind.c                    |   4 +
>  tools/perf/tests/parse-events.c                    |  16 +++
>  tools/perf/tests/tests.h                           |  10 +-
>  tools/perf/ui/browser.c                            |  14 +++
>  tools/perf/ui/browser.h                            |   2 +-
>  tools/perf/ui/browsers/hists.c                     |  22 +++-
>  tools/perf/util/annotate.h                         |   2 +-
>  tools/perf/util/evlist.c                           |   2 +-
>  tools/perf/util/evlist.h                           |   2 +
>  tools/perf/util/evsel.c                            |   5 +-
>  tools/perf/util/evsel.h                            |   1 +
>  tools/perf/util/hist.c                             |  13 +++
>  tools/perf/util/hist.h                             |   1 +
>  tools/perf/util/parse-events.c                     |  17 ++-
>  tools/perf/util/parse-events.l                     |   2 +-
>  tools/perf/util/sort.c                             |  37 ++++++
>  tools/perf/util/sort.h                             |   1 +
>  tools/perf/util/util.c                             |   4 +-
>  41 files changed, 381 insertions(+), 77 deletions(-)
>  create mode 100644 tools/perf/arch/x86/include/arch-tests.h
>  create mode 100644 tools/perf/arch/x86/tests/arch-tests.c
>  rename tools/perf/{ => arch/x86}/tests/gen-insn-x86-dat.awk (100%)
>  rename tools/perf/{ => arch/x86}/tests/gen-insn-x86-dat.sh (100%)
>  rename tools/perf/{ => arch/x86}/tests/insn-x86-dat-32.c (100%)
>  rename tools/perf/{ => arch/x86}/tests/insn-x86-dat-64.c (100%)
>  rename tools/perf/{ => arch/x86}/tests/insn-x86-dat-src.c (100%)
>  rename tools/perf/{ => arch/x86}/tests/insn-x86.c (98%)
>  create mode 100644 tools/perf/arch/x86/tests/intel-cqm.c
>  rename tools/perf/{ => arch/x86}/tests/perf-time-to-tsc.c (98%)
>  rename tools/perf/{ => arch/x86}/tests/rdpmc.c (97%)

Pulled, thanks a lot Arnaldo!

	Ingo

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

* [GIT PULL 00/16] perf/core improvements and fixes
@ 2015-10-05 21:03 Arnaldo Carvalho de Melo
  2015-10-06  7:09 ` Ingo Molnar
  0 siblings, 1 reply; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-10-05 21:03 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Andi Kleen, Borislav Petkov, Chandler Carruth,
	Daniel Bristot de Oliveira, David Ahern, Don Zickus, Fenghua Yu,
	Frederic Weisbecker, Jiri Olsa, Kanaka Juvva, Kan Liang,
	Matt Fleming, Namhyung Kim, Peter Zijlstra, Stephane Eranian,
	Vikas Shivappa, Vince Weaver, Wang Nan, Arnaldo Carvalho de Melo

Hi Ingo,

	Please consider pulling,

- Arnaldo

The following changes since commit e3b0ac1b7a8a590440a2030e7d10d48c59ab8a2a:

  Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-10-03 08:20:14 +0200)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo

for you to fetch changes up to 27bf90bf0690f55c3679bcc4c325823cf1cfd19d:

  perf tools: Fail properly in case pattern matching fails to find tracepoint (2015-10-05 17:59:50 -0300)

----------------------------------------------------------------
perf/core improvements and fixes:

User visible:

- Switch the default callchain output mode to 'graph,0.5,caller', to make it
  look like the default for other tools, reducing the learning curve for
  people used to 'caller' based viewing (Arnaldo Carvalho de Melo)

- Implement column based horizontal scrolling in the hists browser (top, report),
  making it possible to use the TUI for things like 'perf mem report' where
  there are many more columns than can fit in a terminal (Arnaldo Carvalho de Melo)

- Support sorting by symbol_iaddr with perf.data files produced by
  'perf mem record' (Don Zickus)

- Display DATA_SRC sample type bit, i.e. when running 'perf evlist -v' the
  "DATA_SRC" wasn't appearing when set, fix it to look like: (Jiri Olsa)

  cpu/mem-loads/pp: ...SNIP... sample_type: IP|TID|TIME|ADDR|CPU|PERIOD|DATA_SRC

- Introduce 'P' event modified, meaning 'max precision level, please', i.e.:

   $ perf record -e cycles:P usleep 1

  Is now similar to:

   $ perf record usleep 1

  Useful, for instance, when specifying multiple events (Jiri Olsa)

- Make 'perf -v' and 'perf -h' work (Jiri Olsa)

- Fail properly when pattern matching fails to find a tracepoint, i.e.
  '-e non:existent' was being correctly handled, with a proper error message
  about that not being a valid event, but '-e non:existent*' wasn't,
  fix it (Jiri Olsa)

Infrastructure:

- Separate arch specific entries in 'perf test' and add an 'Intel CQM' one
  to be fun on x86 only (Matt Fleming)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Arnaldo Carvalho de Melo (3):
      perf callchain: Switch default to 'graph,0.5,caller'
      perf ui browser: Optional horizontal scrolling key binding
      perf hists browser: Implement horizontal scrolling

Don Zickus (1):
      perf tools: Add support for sorting on the iaddr

Jiri Olsa (9):
      tools lib api fs: No need to use PATH_MAX + 1
      perf evlist: Display DATA_SRC sample type bit
      perf annotate: Fix sizeof_sym_hist overflow issue
      perf tools: Export perf_event_attr__set_max_precise_ip()
      perf tools: Introduce 'P' modifier to request max precision
      perf tests: Add parsing test for 'P' modifier
      perf tools: Setup proper width for symbol_iaddr field
      perf tools: Handle -h and -v options
      perf tools: Fail properly in case pattern matching fails to find tracepoint

Matt Fleming (3):
      perf tests: Add arch tests
      perf tests: Move x86 tests into arch directory
      perf tests: Add Intel CQM test

 tools/lib/api/fs/fs.c                              |   2 +-
 tools/lib/api/fs/tracing_path.c                    |   6 +-
 tools/perf/Documentation/perf-list.txt             |   1 +
 tools/perf/Documentation/perf-report.txt           |   2 +-
 tools/perf/Documentation/perf.txt                  |   8 ++
 tools/perf/arch/x86/Build                          |   2 +-
 tools/perf/arch/x86/include/arch-tests.h           |  19 ++++
 tools/perf/arch/x86/tests/Build                    |  10 +-
 tools/perf/arch/x86/tests/arch-tests.c             |  34 ++++++
 tools/perf/arch/x86/tests/dwarf-unwind.c           |   1 +
 .../perf/{ => arch/x86}/tests/gen-insn-x86-dat.awk |   0
 .../perf/{ => arch/x86}/tests/gen-insn-x86-dat.sh  |   0
 tools/perf/{ => arch/x86}/tests/insn-x86-dat-32.c  |   0
 tools/perf/{ => arch/x86}/tests/insn-x86-dat-64.c  |   0
 tools/perf/{ => arch/x86}/tests/insn-x86-dat-src.c |   0
 tools/perf/{ => arch/x86}/tests/insn-x86.c         |   3 +-
 tools/perf/arch/x86/tests/intel-cqm.c              | 124 +++++++++++++++++++++
 tools/perf/{ => arch/x86}/tests/perf-time-to-tsc.c |   4 +-
 tools/perf/{ => arch/x86}/tests/rdpmc.c            |   7 +-
 tools/perf/builtin-report.c                        |   4 +-
 tools/perf/perf.c                                  |  14 +++
 tools/perf/tests/Build                             |   6 -
 tools/perf/tests/builtin-test.c                    |  56 ++++------
 tools/perf/tests/dwarf-unwind.c                    |   4 +
 tools/perf/tests/parse-events.c                    |  16 +++
 tools/perf/tests/tests.h                           |  10 +-
 tools/perf/ui/browser.c                            |  14 +++
 tools/perf/ui/browser.h                            |   2 +-
 tools/perf/ui/browsers/hists.c                     |  22 +++-
 tools/perf/util/annotate.h                         |   2 +-
 tools/perf/util/evlist.c                           |   2 +-
 tools/perf/util/evlist.h                           |   2 +
 tools/perf/util/evsel.c                            |   5 +-
 tools/perf/util/evsel.h                            |   1 +
 tools/perf/util/hist.c                             |  13 +++
 tools/perf/util/hist.h                             |   1 +
 tools/perf/util/parse-events.c                     |  17 ++-
 tools/perf/util/parse-events.l                     |   2 +-
 tools/perf/util/sort.c                             |  37 ++++++
 tools/perf/util/sort.h                             |   1 +
 tools/perf/util/util.c                             |   4 +-
 41 files changed, 381 insertions(+), 77 deletions(-)
 create mode 100644 tools/perf/arch/x86/include/arch-tests.h
 create mode 100644 tools/perf/arch/x86/tests/arch-tests.c
 rename tools/perf/{ => arch/x86}/tests/gen-insn-x86-dat.awk (100%)
 rename tools/perf/{ => arch/x86}/tests/gen-insn-x86-dat.sh (100%)
 rename tools/perf/{ => arch/x86}/tests/insn-x86-dat-32.c (100%)
 rename tools/perf/{ => arch/x86}/tests/insn-x86-dat-64.c (100%)
 rename tools/perf/{ => arch/x86}/tests/insn-x86-dat-src.c (100%)
 rename tools/perf/{ => arch/x86}/tests/insn-x86.c (98%)
 create mode 100644 tools/perf/arch/x86/tests/intel-cqm.c
 rename tools/perf/{ => arch/x86}/tests/perf-time-to-tsc.c (98%)
 rename tools/perf/{ => arch/x86}/tests/rdpmc.c (97%)

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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2015-09-30 21:54 Arnaldo Carvalho de Melo
@ 2015-10-01  7:05 ` Ingo Molnar
  0 siblings, 0 replies; 58+ messages in thread
From: Ingo Molnar @ 2015-10-01  7:05 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Adrian Hunter, Borislav Petkov, Chandler Carruth,
	David Ahern, Dominik Dingel, Frederic Weisbecker, He Kuang,
	H . Peter Anvin, Jiri Olsa, linuxppc-dev, linux-tip-commits,
	Masami Hiramatsu, Matt Fleming, Namhyung Kim, Naveen N . Rao,
	Peter Zijlstra, Raphael Beamonte, Stephane Eranian,
	Sukadev Bhattiprolu, Thomas Gleixner, Vinson Lee, Wang Nan,
	Arnaldo Carvalho de Melo


* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Hi Ingo,
> 
> 	Please consider pulling,
> 
> - Arnaldo
> 
> The following changes since commit 9c17dbc6eb73bdd8a6aaea1baefd37ff78d86148:
> 
>   Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-09-29 09:43:46 +0200)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo
> 
> for you to fetch changes up to 7f8d1ade1b19f684ed3a7c4fb1dc5d347127b438:
> 
>   perf tools: By default use the most precise "cycles" hw counter available (2015-09-30 18:34:39 -0300)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes:
> 
> User visible:
> 
> - By default use the most precise "cycles" hw counter available, i.e.
>   when the user doesn't specify any event, it will try using cycles:ppp,
>   cycles:pp, etc (Arnaldo Carvalho de Melo)

That looks really useful!

> - Remove blank lines, headers when piping output in 'perf list', so that it can
>   be sanely used with 'wc -l', etc (Arnaldo Carvalho de Melo)
> 
> - Amend documentation about max_stack and synthesized callchains (Adrian Hunter)
> 
> - Fix 'perf probe -l' for probes added to kernel module functions (Masami Hiramatsu)
> 
> Build fixes:
> 
> - Fix shadowed declarations that break the build on older distros (Jiri Olsa)
> 
> - Fix build break on powerpc due to sample_reg_masks (Sukadev Bhattiprolu)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Adrian Hunter (1):
>       perf report: Amend documentation about max_stack and synthesized callchains
> 
> Arnaldo Carvalho de Melo (7):
>       perf maps: Introduce maps__find_symbol_by_name()
>       perf machine: Use machine__kernel_map() thoroughly
>       perf machine: Add method for common kernel_map(FUNCTION) operation
>       tools lib symbol: Rename kallsyms2elf_type to kallsyms2elf_binding
>       tools lib symbol: Introduce kallsyms2elf_type
>       perf list: Remove blank lines, headers when piping output
>       perf tools: By default use the most precise "cycles" hw counter available
> 
> Jiri Olsa (2):
>       tools: Fix shadowed declaration in err.h
>       perf tools: Fix shadowed declaration in parse-events.c
> 
> Masami Hiramatsu (5):
>       perf probe: Fix to remove dot suffix from second or latter events
>       perf probe: Begin and end libdwfl report session correctly
>       perf probe: Show correct source lines of probes on kmodules
>       perf probe: Fix a segfault bug in debuginfo_cache
>       perf probe: Improve error message when %return is on inlined function
> 
> Sukadev Bhattiprolu (1):
>       perf tools: Fix build break on powerpc due to sample_reg_masks
> 
>  tools/include/linux/err.h                |  4 +-
>  tools/lib/symbol/kallsyms.c              |  6 ++
>  tools/lib/symbol/kallsyms.h              |  4 +-
>  tools/perf/Documentation/perf-report.txt |  2 +
>  tools/perf/builtin-kmem.c                |  2 +-
>  tools/perf/builtin-list.c                |  2 +-
>  tools/perf/builtin-report.c              |  2 +-
>  tools/perf/tests/code-reading.c          |  2 +-
>  tools/perf/tests/vmlinux-kallsyms.c      |  4 +-
>  tools/perf/util/Build                    |  2 +-
>  tools/perf/util/event.c                  |  7 +--
>  tools/perf/util/evlist.c                 | 22 +++++++-
>  tools/perf/util/intel-pt.c               |  2 +-
>  tools/perf/util/machine.c                | 26 ++++-----
>  tools/perf/util/machine.h                |  8 ++-
>  tools/perf/util/map.c                    | 21 ++++---
>  tools/perf/util/map.h                    |  2 +
>  tools/perf/util/parse-events.c           | 53 +++++++++---------
>  tools/perf/util/perf_regs.c              |  2 +
>  tools/perf/util/perf_regs.h              |  1 +
>  tools/perf/util/pmu.c                    |  2 +-
>  tools/perf/util/probe-event.c            | 96 ++++++++++++++++++++------------
>  tools/perf/util/probe-finder.c           | 58 +++++++++++++++++--
>  tools/perf/util/symbol.c                 |  2 +-
>  24 files changed, 224 insertions(+), 108 deletions(-)

Pulled, thanks a lot Arnaldo!

	Ingo

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

* [GIT PULL 00/16] perf/core improvements and fixes
@ 2015-09-30 21:54 Arnaldo Carvalho de Melo
  2015-10-01  7:05 ` Ingo Molnar
  0 siblings, 1 reply; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-09-30 21:54 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Borislav Petkov, Chandler Carruth, David Ahern, Dominik Dingel,
	Frederic Weisbecker, He Kuang, H . Peter Anvin, Jiri Olsa,
	linuxppc-dev, linux-tip-commits, Masami Hiramatsu, Matt Fleming,
	Namhyung Kim, Naveen N . Rao, Peter Zijlstra, Raphael Beamonte,
	Stephane Eranian, Sukadev Bhattiprolu, Thomas Gleixner,
	Vinson Lee, Wang Nan, Arnaldo Carvalho de Melo

Hi Ingo,

	Please consider pulling,

- Arnaldo

The following changes since commit 9c17dbc6eb73bdd8a6aaea1baefd37ff78d86148:

  Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-09-29 09:43:46 +0200)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo

for you to fetch changes up to 7f8d1ade1b19f684ed3a7c4fb1dc5d347127b438:

  perf tools: By default use the most precise "cycles" hw counter available (2015-09-30 18:34:39 -0300)

----------------------------------------------------------------
perf/core improvements and fixes:

User visible:

- By default use the most precise "cycles" hw counter available, i.e.
  when the user doesn't specify any event, it will try using cycles:ppp,
  cycles:pp, etc (Arnaldo Carvalho de Melo)

- Remove blank lines, headers when piping output in 'perf list', so that it can
  be sanely used with 'wc -l', etc (Arnaldo Carvalho de Melo)

- Amend documentation about max_stack and synthesized callchains (Adrian Hunter)

- Fix 'perf probe -l' for probes added to kernel module functions (Masami Hiramatsu)

Build fixes:

- Fix shadowed declarations that break the build on older distros (Jiri Olsa)

- Fix build break on powerpc due to sample_reg_masks (Sukadev Bhattiprolu)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Adrian Hunter (1):
      perf report: Amend documentation about max_stack and synthesized callchains

Arnaldo Carvalho de Melo (7):
      perf maps: Introduce maps__find_symbol_by_name()
      perf machine: Use machine__kernel_map() thoroughly
      perf machine: Add method for common kernel_map(FUNCTION) operation
      tools lib symbol: Rename kallsyms2elf_type to kallsyms2elf_binding
      tools lib symbol: Introduce kallsyms2elf_type
      perf list: Remove blank lines, headers when piping output
      perf tools: By default use the most precise "cycles" hw counter available

Jiri Olsa (2):
      tools: Fix shadowed declaration in err.h
      perf tools: Fix shadowed declaration in parse-events.c

Masami Hiramatsu (5):
      perf probe: Fix to remove dot suffix from second or latter events
      perf probe: Begin and end libdwfl report session correctly
      perf probe: Show correct source lines of probes on kmodules
      perf probe: Fix a segfault bug in debuginfo_cache
      perf probe: Improve error message when %return is on inlined function

Sukadev Bhattiprolu (1):
      perf tools: Fix build break on powerpc due to sample_reg_masks

 tools/include/linux/err.h                |  4 +-
 tools/lib/symbol/kallsyms.c              |  6 ++
 tools/lib/symbol/kallsyms.h              |  4 +-
 tools/perf/Documentation/perf-report.txt |  2 +
 tools/perf/builtin-kmem.c                |  2 +-
 tools/perf/builtin-list.c                |  2 +-
 tools/perf/builtin-report.c              |  2 +-
 tools/perf/tests/code-reading.c          |  2 +-
 tools/perf/tests/vmlinux-kallsyms.c      |  4 +-
 tools/perf/util/Build                    |  2 +-
 tools/perf/util/event.c                  |  7 +--
 tools/perf/util/evlist.c                 | 22 +++++++-
 tools/perf/util/intel-pt.c               |  2 +-
 tools/perf/util/machine.c                | 26 ++++-----
 tools/perf/util/machine.h                |  8 ++-
 tools/perf/util/map.c                    | 21 ++++---
 tools/perf/util/map.h                    |  2 +
 tools/perf/util/parse-events.c           | 53 +++++++++---------
 tools/perf/util/perf_regs.c              |  2 +
 tools/perf/util/perf_regs.h              |  1 +
 tools/perf/util/pmu.c                    |  2 +-
 tools/perf/util/probe-event.c            | 96 ++++++++++++++++++++------------
 tools/perf/util/probe-finder.c           | 58 +++++++++++++++++--
 tools/perf/util/symbol.c                 |  2 +-
 24 files changed, 224 insertions(+), 108 deletions(-)

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

* [GIT PULL 00/16] perf/core improvements and fixes
@ 2015-04-07 16:40 Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-07 16:40 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Andrew Morton, Borislav Petkov, David Ahern, Don Zickus,
	Frederic Weisbecker, He Kuang, H. Peter Anvin, Jiri Olsa,
	John Stultz, Joonsoo Kim, Linus Torvalds, linux-mm, Minchan Kim,
	Namhyung Kim, Paul Mackerras, Peter Zijlstra, pi3orama,
	Stephane Eranian, Steven Rostedt, Thomas Gleixner, Wang Nan,
	Yunlong Song, Zefan Li, Arnaldo Carvalho de Melo

Hi Ingo,

	Please consider pulling,

- Arnaldo

The following changes since commit 6645f3187f5beb64f7a40515cfa18f3889264ece:

  Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-04-03 07:00:02 +0200)

are available in the git repository at:


  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo

for you to fetch changes up to d083e5ff09eccc0afd44e02ec85f10c06271e93b:

  perf tools: Merge all perf_event_attr print functions (2015-04-07 13:25:05 -0300)

----------------------------------------------------------------
perf/core improvements and fixes:

- Teach about perf_event_attr.clockid to 'perf record' (Peter Zijlstra)

- perf sched replay improvements for high CPU core count machines (Yunlong Song)

- Consider PERF_RECORD_ events with cpumode == 0 in 'perf top', removing one
  cause of long term memory usage buildup, i.e. not processing PERF_RECORD_EXIT
  events (Arnaldo Carvalho de Melo)

- Respect -i option 'in perf kmem' (Jiri Olsa)

Infrastructure:

- Honor operator priority in libtraceevent (Namhyung Kim)

- Merge all perf_event_attr print functions (Peter Zijlstra)

- Check kmaps access to make code more robust (Wang Nan)

- Fix inverted logic in perf_mmap__empty() (He Kuang)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Arnaldo Carvalho de Melo (1):
      perf top: Consider PERF_RECORD_ events with cpumode == 0

He Kuang (1):
      perf evlist: Fix inverted logic in perf_mmap__empty

Jiri Olsa (1):
      perf kmem: Respect -i option

Namhyung Kim (1):
      tools lib traceevent: Honor operator priority

Peter Zijlstra (2):
      perf record: Add clockid parameter
      perf tools: Merge all perf_event_attr print functions

Wang Nan (1):
      perf kmaps: Check kmaps to make code more robust

Yunlong Song (9):
      perf sched replay: Use struct task_desc instead of struct task_task for correct meaning
      perf sched replay: Increase the MAX_PID value to fix assertion failure problem
      perf sched replay: Alloc the memory of pid_to_task dynamically to adapt to the unexpected change of pid_max
      perf sched replay: Realloc the memory of pid_to_task stepwise to adapt to the different pid_max configurations
      perf sched replay: Fix the segmentation fault problem caused by pr_err in threads
      perf sched replay: Handle the dead halt of sem_wait when create_tasks() fails for any task
      perf sched replay: Fix the EMFILE error caused by the limitation of the maximum open files
      perf sched replay: Support using -f to override perf.data file ownership
      perf sched replay: Use replay_repeat to calculate the runavg of cpu usage instead of the default value 10

 tools/lib/traceevent/event-parse.c       |  17 +-
 tools/perf/Documentation/perf-record.txt |   7 +
 tools/perf/builtin-kmem.c                |   3 +-
 tools/perf/builtin-record.c              |  80 ++++++++
 tools/perf/builtin-sched.c               |  67 +++++--
 tools/perf/builtin-top.c                 |   8 +-
 tools/perf/perf.h                        |   2 +
 tools/perf/util/evlist.c                 |   2 +-
 tools/perf/util/evsel.c                  | 325 ++++++++++++++++---------------
 tools/perf/util/evsel.h                  |   6 +
 tools/perf/util/header.c                 |  28 +--
 tools/perf/util/machine.c                |   5 +-
 tools/perf/util/map.c                    |  20 ++
 tools/perf/util/map.h                    |   6 +-
 tools/perf/util/probe-event.c            |   2 +
 tools/perf/util/session.c                |   3 +
 tools/perf/util/symbol-elf.c             |  16 +-
 tools/perf/util/symbol.c                 |  34 +++-
 18 files changed, 422 insertions(+), 209 deletions(-)

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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2014-11-19 16:03 Arnaldo Carvalho de Melo
@ 2014-11-20  7:33 ` Ingo Molnar
  0 siblings, 0 replies; 58+ messages in thread
From: Ingo Molnar @ 2014-11-20  7:33 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Adrian Hunter, Andi Kleen, Aravinda Prasad,
	Borislav Petkov, Brendan Gregg, Corey Ashford, David Ahern,
	Don Zickus, Frederic Weisbecker, Hemant Kumar, Jean Pihet,
	Jiri Olsa, Kan Liang, Masami Hiramatsu, Mike Galbraith,
	Namhyung Kim, Oleg Nesterov, Paul Mackerras, Pekka Enberg,
	Peter Zijlstra, Srikar Dronamraju, Stephane Eranian,
	Steven Rostedt, systemtap, Vasant Hegde, WANG Chao,
	Arnaldo Carvalho de Melo


* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Hi Ingo,
> 
> 	Please consider pulling,
> 
> - Arnaldo
> 
> The following changes since commit 2565711fb7d7c28e0cd93c8971b520d1b10b857c:
> 
>   perf: Improve the perf_sample_data struct layout (2014-11-16 11:42:04 +0100)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo
> 
> for you to fetch changes up to a84808083688d82d7f1e5786ccf5df0ff7d448cb:
> 
>   perf tools: Only override the default :tid comm entry (2014-11-19 12:37:26 -0300)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes:
> 
> User visible fixes:
> 
> - Fallback to kallsyms when using the minimal 'ELF' loader (Arnaldo Carvalho de Melo)
> 
> - Fix annotation with kcore (Adrian Hunter)
> 
> - Fix up srcline histogram key formatting (Arnaldo Carvalho de Melo)
> 
> - Add missing handler for PERF_RECORD_MMAP2 events in 'perf diff' (Kan Liang)
> 
> User visible changes/new features:
> 
> - Only print base source file for srcline histogram sort key (Andi Kleen)
> 
> - Support source line numbers in annotate using a hotkey (Andi Kleen)
> 
> Infrastructure:
> 
> - Do not poll events that use the system_wide flag (Adrian Hunter)
> 
> - Add perf-read-vdso32 and perf-read-vdsox32 to .gitignore (Adrian Hunter)
> 
>   perf tools: Only override the default :tid comm entry (Adrian Hunter)
> 
> - Factor out adding new call chain entries (Andi Kleen)
> 
> - Use al.addr to set up call chain (Andi Kleen)
> 
> - Use a common function to resolve symbol or name (Andi Kleen)
> 
> - Fix ftrace:function event recording (Jiri Olsa)
> 
> - Move disable_buildid_cache() to util/build-id.c (Namhyung Kim)
> 
> - Clean up libelf feature support code (Namhyung Kim)
> 
> - fix typo in python 'perf test' (WANG Chao)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Adrian Hunter (4):
>       perf tools: Fix annotation with kcore
>       perf evlist: Do not poll events that use the system_wide flag
>       perf tools: Add perf-read-vdso32 and perf-read-vdsox32 to .gitignore
>       perf tools: Only override the default :tid comm entry
> 
> Andi Kleen (5):
>       perf callchain: Factor out adding new call chain entries
>       perf callchain: Use al.addr to set up call chain
>       perf callchain: Use a common function to resolve symbol or name
>       perf tools: Only print base source file for srcline
>       perf annotate: Support source line numbers in annotate
> 
> Arnaldo Carvalho de Melo (2):
>       perf symbols: Fallback to kallsyms when using the minimal 'ELF' loader
>       perf hists: Fix up srcline histogram key formatting
> 
> Jiri Olsa (1):
>       perf evsel: Fix ftrace:function event recording
> 
> Kan Liang (1):
>       perf diff: Add missing handler for PERF_RECORD_MMAP2 events
> 
> Namhyung Kim (2):
>       perf build-id: Move disable_buildid_cache() to util/build-id.c
>       perf tools: Clean up libelf feature support code
> 
> WANG Chao (1):
>       perf test: fix typo in python test
> 
>  tools/perf/.gitignore             |  2 ++
>  tools/perf/Makefile.perf          |  2 --
>  tools/perf/builtin-diff.c         |  1 +
>  tools/perf/config/Makefile        |  5 ++--
>  tools/perf/tests/builtin-test.c   |  2 +-
>  tools/perf/ui/browsers/annotate.c | 13 +++++++++-
>  tools/perf/ui/browsers/hists.c    | 17 -------------
>  tools/perf/ui/gtk/hists.c         | 11 +--------
>  tools/perf/ui/stdio/hist.c        | 23 +++++++-----------
>  tools/perf/util/annotate.c        | 32 ++++++++++++++++++++----
>  tools/perf/util/annotate.h        |  1 +
>  tools/perf/util/build-id.c        | 11 +++++++++
>  tools/perf/util/build-id.h        |  1 +
>  tools/perf/util/callchain.c       | 19 +++++++++++++++
>  tools/perf/util/callchain.h       |  3 +++
>  tools/perf/util/evlist.c          | 10 +++++++-
>  tools/perf/util/evsel.c           |  8 ++++++
>  tools/perf/util/header.c          | 10 +-------
>  tools/perf/util/machine.c         | 51 ++++++++++++++++++++++++---------------
>  tools/perf/util/sort.c            |  2 +-
>  tools/perf/util/srcline.c         |  2 +-
>  tools/perf/util/symbol-minimal.c  |  1 -
>  tools/perf/util/thread.c          |  5 ++--
>  tools/perf/util/util.h            |  1 -
>  24 files changed, 145 insertions(+), 88 deletions(-)

Pulled into tip:perf/core, thanks a lot Arnaldo!

	Ingo

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

* [GIT PULL 00/16] perf/core improvements and fixes
@ 2014-11-19 16:03 Arnaldo Carvalho de Melo
  2014-11-20  7:33 ` Ingo Molnar
  0 siblings, 1 reply; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2014-11-19 16:03 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Andi Kleen, Aravinda Prasad, Borislav Petkov, Brendan Gregg,
	Corey Ashford, David Ahern, Don Zickus, Frederic Weisbecker,
	Hemant Kumar, Jean Pihet, Jiri Olsa, Kan Liang, Masami Hiramatsu,
	Mike Galbraith, Namhyung Kim, Oleg Nesterov, Paul Mackerras,
	Pekka Enberg, Peter Zijlstra, Srikar Dronamraju,
	Stephane Eranian, Steven Rostedt, systemtap, Vasant Hegde,
	WANG Chao, Arnaldo Carvalho de Melo

Hi Ingo,

	Please consider pulling,

- Arnaldo

The following changes since commit 2565711fb7d7c28e0cd93c8971b520d1b10b857c:

  perf: Improve the perf_sample_data struct layout (2014-11-16 11:42:04 +0100)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo

for you to fetch changes up to a84808083688d82d7f1e5786ccf5df0ff7d448cb:

  perf tools: Only override the default :tid comm entry (2014-11-19 12:37:26 -0300)

----------------------------------------------------------------
perf/core improvements and fixes:

User visible fixes:

- Fallback to kallsyms when using the minimal 'ELF' loader (Arnaldo Carvalho de Melo)

- Fix annotation with kcore (Adrian Hunter)

- Fix up srcline histogram key formatting (Arnaldo Carvalho de Melo)

- Add missing handler for PERF_RECORD_MMAP2 events in 'perf diff' (Kan Liang)

User visible changes/new features:

- Only print base source file for srcline histogram sort key (Andi Kleen)

- Support source line numbers in annotate using a hotkey (Andi Kleen)

Infrastructure:

- Do not poll events that use the system_wide flag (Adrian Hunter)

- Add perf-read-vdso32 and perf-read-vdsox32 to .gitignore (Adrian Hunter)

  perf tools: Only override the default :tid comm entry (Adrian Hunter)

- Factor out adding new call chain entries (Andi Kleen)

- Use al.addr to set up call chain (Andi Kleen)

- Use a common function to resolve symbol or name (Andi Kleen)

- Fix ftrace:function event recording (Jiri Olsa)

- Move disable_buildid_cache() to util/build-id.c (Namhyung Kim)

- Clean up libelf feature support code (Namhyung Kim)

- fix typo in python 'perf test' (WANG Chao)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Adrian Hunter (4):
      perf tools: Fix annotation with kcore
      perf evlist: Do not poll events that use the system_wide flag
      perf tools: Add perf-read-vdso32 and perf-read-vdsox32 to .gitignore
      perf tools: Only override the default :tid comm entry

Andi Kleen (5):
      perf callchain: Factor out adding new call chain entries
      perf callchain: Use al.addr to set up call chain
      perf callchain: Use a common function to resolve symbol or name
      perf tools: Only print base source file for srcline
      perf annotate: Support source line numbers in annotate

Arnaldo Carvalho de Melo (2):
      perf symbols: Fallback to kallsyms when using the minimal 'ELF' loader
      perf hists: Fix up srcline histogram key formatting

Jiri Olsa (1):
      perf evsel: Fix ftrace:function event recording

Kan Liang (1):
      perf diff: Add missing handler for PERF_RECORD_MMAP2 events

Namhyung Kim (2):
      perf build-id: Move disable_buildid_cache() to util/build-id.c
      perf tools: Clean up libelf feature support code

WANG Chao (1):
      perf test: fix typo in python test

 tools/perf/.gitignore             |  2 ++
 tools/perf/Makefile.perf          |  2 --
 tools/perf/builtin-diff.c         |  1 +
 tools/perf/config/Makefile        |  5 ++--
 tools/perf/tests/builtin-test.c   |  2 +-
 tools/perf/ui/browsers/annotate.c | 13 +++++++++-
 tools/perf/ui/browsers/hists.c    | 17 -------------
 tools/perf/ui/gtk/hists.c         | 11 +--------
 tools/perf/ui/stdio/hist.c        | 23 +++++++-----------
 tools/perf/util/annotate.c        | 32 ++++++++++++++++++++----
 tools/perf/util/annotate.h        |  1 +
 tools/perf/util/build-id.c        | 11 +++++++++
 tools/perf/util/build-id.h        |  1 +
 tools/perf/util/callchain.c       | 19 +++++++++++++++
 tools/perf/util/callchain.h       |  3 +++
 tools/perf/util/evlist.c          | 10 +++++++-
 tools/perf/util/evsel.c           |  8 ++++++
 tools/perf/util/header.c          | 10 +-------
 tools/perf/util/machine.c         | 51 ++++++++++++++++++++++++---------------
 tools/perf/util/sort.c            |  2 +-
 tools/perf/util/srcline.c         |  2 +-
 tools/perf/util/symbol-minimal.c  |  1 -
 tools/perf/util/thread.c          |  5 ++--
 tools/perf/util/util.h            |  1 -
 24 files changed, 145 insertions(+), 88 deletions(-)

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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2014-08-24 11:16   ` Arnaldo Carvalho de Melo
@ 2014-08-24 14:47     ` Ingo Molnar
  0 siblings, 0 replies; 58+ messages in thread
From: Ingo Molnar @ 2014-08-24 14:47 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Adrian Hunter, Andi Kleen, Corey Ashford,
	David Ahern, Don Zickus, Frederic Weisbecker, Jean Pihet,
	Jiri Olsa, Joe Mario, Michael Ellerman, Namhyung Kim,
	Paul Mackerras, Peter Zijlstra, Stephane Eranian,
	Sukadev Bhattiprolu


* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Em Sun, Aug 24, 2014 at 12:11:24PM +0200, Ingo Molnar escreveu:
> > * Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
> > > o Kernel fix to properly handle exited tasks, by returning POLLHUP values
> > >   on perf event file descriptors. Tooling changes will come next, but were
> > >   tested with this kernel fix. (Jiri Olsa)
>  
> > So the signoffs are really weird (and invalid) here:
>  
> > commit ce1d77c667e40631d6673717e65e72f72265bf10
> > Author: Jiri Olsa <jolsa@kernel.org>
> > Date:   Fri Aug 15 16:24:45 2014 -0300
>  
> >     perf top: Use set_term_quiet() instead of open coded equivalent
>  
> > ...    
> >     Cc: Jiri Olsa <jolsa@kernel.org>
> >     Cc: Namhyung Kim <namhyung@kernel.org>
> >     Cc: Paul Mackerras <paulus@samba.org>
> >     Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
> >     Link: http://lkml.kernel.org/n/tip-h7n9te70flmaqfnj6l06ay6r@git.kernel.org
> >     [ Yanked this out of a patch containing this and some other change ]
> >     Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
>  
> > and in 7713886adc15 and f017bf0a8d92 - results of a rebase gone wrong?
> 
> Should be ok now, I recreated the perf-core-for-mingo signed tag, please
> let me know if there are still any problems,

Looks good now. Pulled, thanks a lot Arnaldo!

	Ingo

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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2014-08-24 10:11 ` Ingo Molnar
@ 2014-08-24 11:16   ` Arnaldo Carvalho de Melo
  2014-08-24 14:47     ` Ingo Molnar
  0 siblings, 1 reply; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2014-08-24 11:16 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Adrian Hunter, Andi Kleen, Corey Ashford,
	David Ahern, Don Zickus, Frederic Weisbecker, Jean Pihet,
	Jiri Olsa, Joe Mario, Michael Ellerman, Namhyung Kim,
	Paul Mackerras, Peter Zijlstra, Stephane Eranian,
	Sukadev Bhattiprolu

Em Sun, Aug 24, 2014 at 12:11:24PM +0200, Ingo Molnar escreveu:
> * Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
> > o Kernel fix to properly handle exited tasks, by returning POLLHUP values
> >   on perf event file descriptors. Tooling changes will come next, but were
> >   tested with this kernel fix. (Jiri Olsa)
 
> So the signoffs are really weird (and invalid) here:
 
> commit ce1d77c667e40631d6673717e65e72f72265bf10
> Author: Jiri Olsa <jolsa@kernel.org>
> Date:   Fri Aug 15 16:24:45 2014 -0300
 
>     perf top: Use set_term_quiet() instead of open coded equivalent
 
> ...    
>     Cc: Jiri Olsa <jolsa@kernel.org>
>     Cc: Namhyung Kim <namhyung@kernel.org>
>     Cc: Paul Mackerras <paulus@samba.org>
>     Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
>     Link: http://lkml.kernel.org/n/tip-h7n9te70flmaqfnj6l06ay6r@git.kernel.org
>     [ Yanked this out of a patch containing this and some other change ]
>     Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
 
> and in 7713886adc15 and f017bf0a8d92 - results of a rebase gone wrong?

Should be ok now, I recreated the perf-core-for-mingo signed tag, please
let me know if there are still any problems,

Thanks!

- Arnaldo

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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2014-08-22 16:29 Arnaldo Carvalho de Melo
@ 2014-08-24 10:11 ` Ingo Molnar
  2014-08-24 11:16   ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 58+ messages in thread
From: Ingo Molnar @ 2014-08-24 10:11 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Adrian Hunter, Andi Kleen, Corey Ashford,
	David Ahern, Don Zickus, Frederic Weisbecker, Jean Pihet,
	Jiri Olsa, Joe Mario, Michael Ellerman, Namhyung Kim,
	Paul Mackerras, Peter Zijlstra, Stephane Eranian,
	Sukadev Bhattiprolu, Arnaldo Carvalho de Melo


* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Hi Ingo,
> 
> 	Please consider pulling,
> 
> - Arnaldo
> 
> The following changes since commit af924aa35129edf338ebc8da6a4eae08cf7cb297:
> 
>   Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2014-08-18 10:14:43 +0200)
> 
> are available in the git repository at:
> 
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo
> 
> for you to fetch changes up to 141da74d2eff8de134c5a5ffaf2800a8a1b27517:
> 
>   perf hists browser: Consolidate callchain print functions in TUI (2014-08-22 13:12:15 -0300)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes:
> 
> User visible:
> 
> o Don't try to find DSOs in SYSV maps (Don Zickus)
> 
> o Fallback to MAP__FUNCTION if daddr maps are NULL,
>   i.e. addresses get looked upon more maps (Don Zickus)
> 
> o Kernel fix to properly handle exited tasks, by returning POLLHUP values
>   on perf event file descriptors. Tooling changes will come next, but were
>   tested with this kernel fix. (Jiri Olsa)

So the signoffs are really weird (and invalid) here:

commit ce1d77c667e40631d6673717e65e72f72265bf10
Author: Jiri Olsa <jolsa@kernel.org>
Date:   Fri Aug 15 16:24:45 2014 -0300

    perf top: Use set_term_quiet() instead of open coded equivalent

...    
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Link: http://lkml.kernel.org/n/tip-h7n9te70flmaqfnj6l06ay6r@git.kernel.org
    [ Yanked this out of a patch containing this and some other change ]
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>


and in 7713886adc15 and f017bf0a8d92 - results of a rebase gone wrong?

Thanks,

	Ingo

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

* [GIT PULL 00/16] perf/core improvements and fixes
@ 2014-08-22 16:29 Arnaldo Carvalho de Melo
  2014-08-24 10:11 ` Ingo Molnar
  0 siblings, 1 reply; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2014-08-22 16:29 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Andi Kleen, Corey Ashford, David Ahern, Don Zickus,
	Frederic Weisbecker, Jean Pihet, Jiri Olsa, Joe Mario,
	Michael Ellerman, Namhyung Kim, Paul Mackerras, Peter Zijlstra,
	Stephane Eranian, Sukadev Bhattiprolu, Arnaldo Carvalho de Melo

Hi Ingo,

	Please consider pulling,

- Arnaldo

The following changes since commit af924aa35129edf338ebc8da6a4eae08cf7cb297:

  Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2014-08-18 10:14:43 +0200)

are available in the git repository at:


  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo

for you to fetch changes up to 141da74d2eff8de134c5a5ffaf2800a8a1b27517:

  perf hists browser: Consolidate callchain print functions in TUI (2014-08-22 13:12:15 -0300)

----------------------------------------------------------------
perf/core improvements and fixes:

User visible:

o Don't try to find DSOs in SYSV maps (Don Zickus)

o Fallback to MAP__FUNCTION if daddr maps are NULL,
  i.e. addresses get looked upon more maps (Don Zickus)

o Kernel fix to properly handle exited tasks, by returning POLLHUP values
  on perf event file descriptors. Tooling changes will come next, but were
  tested with this kernel fix. (Jiri Olsa)

o Add +field argument support for --field option, so that one can add
  fields to the default list of fields to show, i.e. now one can just do:

   perf report --fields +pid

  And the pid will appear in addition to the default fields. (Jiri Olsa)

Developer stuff:

o More Intel PT prep stuff, including:
  - Add a 'perf test' for tracking with sched_switch
  - Add 'flush' callback to scripting API

o hists browser (used in top and report) refactorings, getting rid of unused
  variables and reducing source code size by handling similar cases in a
  fewer functions (Namhyung Kim).

o Explicitly include util/debug.h for powerpc, was being indirectly included,
  broke the build when some change made it stop being included. (Sukadev
  Bhattiprolu)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Adrian Hunter (4):
      perf tests: Add a test for tracking with sched_switch
      perf scripting: Add 'flush' callback to scripting API
      perf machine: Rename machine__get_kernel_start_addr() method
      perf tools: Add machine__kernel_ip()

Don Zickus (2):
      perf symbols: Don't try to find DSOs in SYSV maps
      perf machine: Fallback to MAP__FUNCTION if daddr maps are NULL

Jiri Olsa (4):
      perf: Fix perf_poll to return proper POLLHUP value
      perf: Add PERF_EVENT_STATE_EXIT state for events with exited task
      perf top: Use set_term_quiet() instead of open coded equivalent
      perf tools: Add +field argument support for --field option

Namhyung Kim (5):
      perf hists browser: Get rid of unused 'remaining' variable
      perf hists browser: Fix children overhead dump
      perf hists browser: Factor out hist_browser__show_callchain_entry()
      perf hists browser: Cleanup callchain print functions
      perf hists browser: Consolidate callchain print functions in TUI

Sukadev Bhattiprolu (1):
      perf tools powerpc: Explicitly include util/debug.h

 include/linux/perf_event.h                         |   1 +
 kernel/events/core.c                               |  12 +-
 tools/perf/Makefile.perf                           |   1 +
 tools/perf/arch/powerpc/util/skip-callchain-idx.c  |   1 +
 tools/perf/builtin-script.c                        |  13 +
 tools/perf/builtin-top.c                           |   9 +-
 tools/perf/tests/builtin-test.c                    |   4 +
 tools/perf/tests/switch-tracking.c                 | 572 +++++++++++++++++++++
 tools/perf/tests/tests.h                           |   1 +
 tools/perf/ui/browsers/hists.c                     | 343 +++++-------
 tools/perf/ui/hist.c                               |   6 +-
 tools/perf/util/event.c                            |   6 +-
 tools/perf/util/machine.c                          |  41 +-
 tools/perf/util/machine.h                          |  17 +
 tools/perf/util/map.c                              |   1 +
 .../perf/util/scripting-engines/trace-event-perl.c |   6 +
 .../util/scripting-engines/trace-event-python.c    |   6 +
 tools/perf/util/sort.c                             |  24 +-
 tools/perf/util/sort.h                             |   1 +
 tools/perf/util/trace-event-scripting.c            |   7 +
 tools/perf/util/trace-event.h                      |   1 +
 21 files changed, 827 insertions(+), 246 deletions(-)
 create mode 100644 tools/perf/tests/switch-tracking.c

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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2014-03-14 21:29 Arnaldo Carvalho de Melo
@ 2014-03-18  8:24 ` Ingo Molnar
  0 siblings, 0 replies; 58+ messages in thread
From: Ingo Molnar @ 2014-03-18  8:24 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Andi Kleen, Aswin Chandramouleeswaran, Corey Ashford,
	Darren Hart, David Ahern, Davidlohr Bueso, Don Zickus,
	Frederic Weisbecker, Jason Low, Jiri Olsa, Joe Mario,
	Masami Hiramatsu, Mike Galbraith, Namhyung Kim, Paul Mackerras,
	Pekka Enberg, Peter Zijlstra, Ramkumar Ramachandra,
	Scott J Norton, Stephane Eranian, Thomas Gleixner, Waiman Long,
	Arnaldo Carvalho de Melo


* Arnaldo Carvalho de Melo <acme@infradead.org> wrote:

> From: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
> 
> Hi Ingo,
> 
> 	Please consider pulling,
> 
> - Arnaldo
> 
> The following changes since commit 81827ed8d85e892311965dc9ec4120b2b2e745bd:
> 
>   perf/x86/uncore: Fix missing end markers for SNB/IVB/HSW IMC PMU (2014-03-14 09:25:25 +0100)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux tags/perf-core-for-mingo
> 
> for you to fetch changes up to d75e6097ef1f7669deb500fbbdf53cfe524f1b53:
> 
>   perf machine: Factor machine__find_thread to take tid argument (2014-03-14 18:08:42 -0300)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes:
> 
> User visible:
> 
> . Add several futex 'perf bench' microbenchmarks (Davidlohr Bueso)
> 
> . Speed up thread map generation (Don Zickus)
> 
> . Fix synthesizing mmaps for threads (Don Zickus)
> 
> . Fix invalid output on event group stdio report  (Namhyung Kim)
> 
> . Introduce 'perf kvm --list-cmds' command line option for use by
>   scripts (Ramkumar Ramachandra)
> 
> Documentation:
> 
> . Clarify load-latency information in the 'perf mem' docs (Andi Kleen)
> 
> . Clarify x86 register naming in 'perf probe' docs (Andi Kleen)
> 
> Refactorigns:
> 
> . hists browser refactorings to reuse code accross UIs (Namhyung Kim)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Andi Kleen (2):
>       perf mem: Clarify load-latency in documentation
>       perf probe: Clarify x86 register naming for perf probe
> 
> Arnaldo Carvalho de Melo (1):
>       perf symbols: Introduce thread__find_cpumode_addr_location
> 
> Davidlohr Bueso (3):
>       perf bench: Add futex-hash microbenchmark
>       perf bench: Add futex-wake microbenchmark
>       perf bench: Add futex-requeue microbenchmark
> 
> Don Zickus (3):
>       perf tools: Fix synthesizing mmaps for threads
>       perf session: Change header.misc dump from decimal to hex
>       perf tools: Speed up thread map generation
> 
> Jiri Olsa (1):
>       perf machine: Factor machine__find_thread to take tid argument
> 
> Namhyung Kim (5):
>       perf ui/stdio: Fix invalid output on event group report
>       perf ui/gtk: Reuse generic __hpp__fmt() code
>       perf ui/hists: Pass struct hpp to print functions
>       perf ui/tui: Reuse generic __hpp__fmt() code
>       perf ui hists: Pass evsel to hpp->header/width functions explicitly
> 
> Ramkumar Ramachandra (1):
>       perf kvm: introduce --list-cmds for use by scripts
> 
>  tools/perf/Documentation/perf-mem.txt   |   4 +
>  tools/perf/Documentation/perf-probe.txt |   2 +
>  tools/perf/Makefile.perf                |   3 +
>  tools/perf/bench/bench.h                |   3 +
>  tools/perf/bench/futex-hash.c           | 212 ++++++++++++++++++++++++++++++++
>  tools/perf/bench/futex-requeue.c        | 211 +++++++++++++++++++++++++++++++
>  tools/perf/bench/futex-wake.c           | 201 ++++++++++++++++++++++++++++++
>  tools/perf/bench/futex.h                |  71 +++++++++++
>  tools/perf/builtin-bench.c              |  12 +-
>  tools/perf/builtin-diff.c               |   7 +-
>  tools/perf/builtin-kvm.c                |  12 +-
>  tools/perf/perf-completion.sh           |   2 +-
>  tools/perf/perf.h                       |   6 +
>  tools/perf/tests/dwarf-unwind.c         |   2 +-
>  tools/perf/ui/browsers/hists.c          | 122 ++++++------------
>  tools/perf/ui/gtk/hists.c               |  78 ++----------
>  tools/perf/ui/hist.c                    | 138 +++++++++++++++------
>  tools/perf/ui/stdio/hist.c              |  11 +-
>  tools/perf/util/event.c                 | 156 ++++++++++++++---------
>  tools/perf/util/hist.h                  |  20 ++-
>  tools/perf/util/machine.c               |  46 +++----
>  tools/perf/util/machine.h               |   3 +-
>  tools/perf/util/parse-options.c         |  37 +++++-
>  tools/perf/util/parse-options.h         |   8 +-
>  tools/perf/util/session.c               |   2 +-
>  tools/perf/util/thread.c                |  21 ++++
>  tools/perf/util/thread.h                |   5 +
>  27 files changed, 1094 insertions(+), 301 deletions(-)
>  create mode 100644 tools/perf/bench/futex-hash.c
>  create mode 100644 tools/perf/bench/futex-requeue.c
>  create mode 100644 tools/perf/bench/futex-wake.c
>  create mode 100644 tools/perf/bench/futex.h

Pulled, thanks a lot Arnaldo!

	Ingo

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

* [GIT PULL 00/16] perf/core improvements and fixes
@ 2014-03-14 21:29 Arnaldo Carvalho de Melo
  2014-03-18  8:24 ` Ingo Molnar
  0 siblings, 1 reply; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2014-03-14 21:29 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Andi Kleen, Aswin Chandramouleeswaran, Corey Ashford,
	Darren Hart, David Ahern, Davidlohr Bueso, Don Zickus,
	Frederic Weisbecker, Jason Low, Jiri Olsa, Joe Mario,
	Masami Hiramatsu, Mike Galbraith, Namhyung Kim, Paul Mackerras,
	Pekka Enberg, Peter Zijlstra, Ramkumar Ramachandra,
	Scott J Norton, Stephane Eranian, Thomas Gleixner, Waiman Long,
	Arnaldo Carvalho de Melo

From: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>

Hi Ingo,

	Please consider pulling,

- Arnaldo

The following changes since commit 81827ed8d85e892311965dc9ec4120b2b2e745bd:

  perf/x86/uncore: Fix missing end markers for SNB/IVB/HSW IMC PMU (2014-03-14 09:25:25 +0100)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux tags/perf-core-for-mingo

for you to fetch changes up to d75e6097ef1f7669deb500fbbdf53cfe524f1b53:

  perf machine: Factor machine__find_thread to take tid argument (2014-03-14 18:08:42 -0300)

----------------------------------------------------------------
perf/core improvements and fixes:

User visible:

. Add several futex 'perf bench' microbenchmarks (Davidlohr Bueso)

. Speed up thread map generation (Don Zickus)

. Fix synthesizing mmaps for threads (Don Zickus)

. Fix invalid output on event group stdio report  (Namhyung Kim)

. Introduce 'perf kvm --list-cmds' command line option for use by
  scripts (Ramkumar Ramachandra)

Documentation:

. Clarify load-latency information in the 'perf mem' docs (Andi Kleen)

. Clarify x86 register naming in 'perf probe' docs (Andi Kleen)

Refactorigns:

. hists browser refactorings to reuse code accross UIs (Namhyung Kim)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Andi Kleen (2):
      perf mem: Clarify load-latency in documentation
      perf probe: Clarify x86 register naming for perf probe

Arnaldo Carvalho de Melo (1):
      perf symbols: Introduce thread__find_cpumode_addr_location

Davidlohr Bueso (3):
      perf bench: Add futex-hash microbenchmark
      perf bench: Add futex-wake microbenchmark
      perf bench: Add futex-requeue microbenchmark

Don Zickus (3):
      perf tools: Fix synthesizing mmaps for threads
      perf session: Change header.misc dump from decimal to hex
      perf tools: Speed up thread map generation

Jiri Olsa (1):
      perf machine: Factor machine__find_thread to take tid argument

Namhyung Kim (5):
      perf ui/stdio: Fix invalid output on event group report
      perf ui/gtk: Reuse generic __hpp__fmt() code
      perf ui/hists: Pass struct hpp to print functions
      perf ui/tui: Reuse generic __hpp__fmt() code
      perf ui hists: Pass evsel to hpp->header/width functions explicitly

Ramkumar Ramachandra (1):
      perf kvm: introduce --list-cmds for use by scripts

 tools/perf/Documentation/perf-mem.txt   |   4 +
 tools/perf/Documentation/perf-probe.txt |   2 +
 tools/perf/Makefile.perf                |   3 +
 tools/perf/bench/bench.h                |   3 +
 tools/perf/bench/futex-hash.c           | 212 ++++++++++++++++++++++++++++++++
 tools/perf/bench/futex-requeue.c        | 211 +++++++++++++++++++++++++++++++
 tools/perf/bench/futex-wake.c           | 201 ++++++++++++++++++++++++++++++
 tools/perf/bench/futex.h                |  71 +++++++++++
 tools/perf/builtin-bench.c              |  12 +-
 tools/perf/builtin-diff.c               |   7 +-
 tools/perf/builtin-kvm.c                |  12 +-
 tools/perf/perf-completion.sh           |   2 +-
 tools/perf/perf.h                       |   6 +
 tools/perf/tests/dwarf-unwind.c         |   2 +-
 tools/perf/ui/browsers/hists.c          | 122 ++++++------------
 tools/perf/ui/gtk/hists.c               |  78 ++----------
 tools/perf/ui/hist.c                    | 138 +++++++++++++++------
 tools/perf/ui/stdio/hist.c              |  11 +-
 tools/perf/util/event.c                 | 156 ++++++++++++++---------
 tools/perf/util/hist.h                  |  20 ++-
 tools/perf/util/machine.c               |  46 +++----
 tools/perf/util/machine.h               |   3 +-
 tools/perf/util/parse-options.c         |  37 +++++-
 tools/perf/util/parse-options.h         |   8 +-
 tools/perf/util/session.c               |   2 +-
 tools/perf/util/thread.c                |  21 ++++
 tools/perf/util/thread.h                |   5 +
 27 files changed, 1094 insertions(+), 301 deletions(-)
 create mode 100644 tools/perf/bench/futex-hash.c
 create mode 100644 tools/perf/bench/futex-requeue.c
 create mode 100644 tools/perf/bench/futex-wake.c
 create mode 100644 tools/perf/bench/futex.h

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

* [GIT PULL 00/16] perf/core improvements and fixes
@ 2013-11-18 20:27 Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2013-11-18 20:27 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	David Ahern, Frederic Weisbecker, Jiri Olsa, Mike Galbraith,
	Namhyung Kim, Paul Mackerras, Pekka Enberg, Peter Zijlstra,
	Ramkumar Ramachandra, Stephane Eranian, Steven Rostedt,
	Arnaldo Carvalho de Melo

From: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>

Hi Ingo,

	Please consider pulling,

- Arnaldo

The following changes since commit 89b4be142bf2491a94af325f5206fc2f2aa18960:

  Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent (2013-11-15 07:35:50 +0100)

are available in the git repository at:


  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux tags/perf-core-for-mingo

for you to fetch changes up to b4070e339cd39e4b56604eddc3e93ee355027d45:

  tools lib traceevent: Fix use of multiple options in processing field (2013-11-18 17:09:51 -0300)

----------------------------------------------------------------
perf/core improvements and fixes:

. Make per-cpu mmaps the default, having inheritance turned on for
  all targets but --tid/-t. From Adrian Hunter.

. Make 'perf top -g' refer to callchains, not --groups, to be consistent
  with 'perf record -g'. From David Ahern.

. Tag thread comm as overriden, fix from Frederic Weisbecker.

. Fix bogus group name when processing the perf.data file header, from Namhyung Kim.

. Fix possible memory leaks in process_group_desc(), from Namhyung Kim.

. Remove 'perf trace' thread summary coloring, from Pekka Enberg.

. Generalize the bash completion scripts and make it work with zsh too, from
  Ramkumar Ramachandra.

. Fix use of multiple options in processing field in libtraceevent, from Steven Rostedt.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Adrian Hunter (4):
      perf record: Make per-cpu mmaps the default.
      perf tools: Allow '--inherit' as the negation of '--no-inherit'
      perf tools: Add option macro OPT_BOOLEAN_SET
      perf record: Default -t option to no inheritance

David Ahern (1):
      perf top: Make -g refer to callchains

Frederic Weisbecker (1):
      perf tools: Tag thread comm as overriden

Namhyung Kim (3):
      perf header: Fix bogus group name
      perf header: Fix possible memory leaks in process_group_desc()
      perf script: Move evname print code to process_event()

Pekka Enberg (1):
      perf trace: Remove thread summary coloring

Ramkumar Ramachandra (5):
      perf completion: introduce a layer of indirection
      perf completion: factor out compgen stuff
      perf completion: factor out call to __ltrim_colon_completions
      perf completion: introduce zsh support
      perf completion: rename file to reflect zsh support

Steven Rostedt (1):
      tools lib traceevent: Fix use of multiple options in processing field

 tools/lib/traceevent/event-parse.c                 |  23 ++++-
 tools/perf/Documentation/perf-record.txt           |  12 +--
 tools/perf/Documentation/perf-top.txt              |   5 +-
 tools/perf/Makefile.perf                           |   4 +-
 tools/perf/builtin-record.c                        |  13 ++-
 tools/perf/builtin-script.c                        |  11 ++-
 tools/perf/builtin-top.c                           |   4 +-
 tools/perf/builtin-trace.c                         |  13 +--
 tools/perf/{bash_completion => perf-completion.sh} | 100 ++++++++++++++++++---
 tools/perf/perf.h                                  |   1 +
 tools/perf/tests/attr/test-record-no-inherit       |   2 +-
 tools/perf/util/evlist.c                           |   6 +-
 tools/perf/util/evsel.c                            |   5 +-
 tools/perf/util/header.c                           |   6 +-
 tools/perf/util/parse-options.c                    |  21 +++++
 tools/perf/util/parse-options.h                    |   8 ++
 tools/perf/util/target.c                           |  11 ++-
 tools/perf/util/target.h                           |   4 +-
 tools/perf/util/thread.c                           |  11 ++-
 19 files changed, 198 insertions(+), 62 deletions(-)
 rename tools/perf/{bash_completion => perf-completion.sh} (65%)

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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2013-10-23 20:57 Arnaldo Carvalho de Melo
@ 2013-10-24  6:52 ` Ingo Molnar
  0 siblings, 0 replies; 58+ messages in thread
From: Ingo Molnar @ 2013-10-24  6:52 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Andi Kleen, David Ahern, Frederic Weisbecker, Hitoshi Mitake,
	Jiri Olsa, Linus Torvalds, Masami Hiramatsu, Mike Galbraith,
	Namhyung Kim, Paul Mackerras, Peter Zijlstra, Stephane Eranian,
	Arnaldo Carvalho de Melo


* Arnaldo Carvalho de Melo <acme@infradead.org> wrote:

> From: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
> 
> Hi Ingo,
> 
> 	Please consider pulling,
> 
> - Arnaldo
> 
> The following changes since commit aa30a2e03a453aad9fd96c3f2d4a82c3497674e5:
> 
>   Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2013-10-23 09:45:50 +0200)
> 
> are available in the git repository at:
> 
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux tags/perf-core-for-mingo
> 
> for you to fetch changes up to c1fb5651bb40f9efaf32d280f39e06df7e352673:
> 
>   perf tools: Show progress on histogram collapsing (2013-10-23 15:48:24 -0300)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes:
> 
> . Show progress on histogram collapsing, that can take a long time, from
>   Namhyung Kim.
> 
> . Support "$vars" meta argument syntax for local variables, allowing
>   asking for all possible variables at a given probe point to be
>   collected when it hits, from Masami Hiramatsu.
> 
> . Address the root cause of that 'perf sched' stack initialization build
>   slowdown, by programmatically setting a big array after moving the
>   global variable back to the stack. Fix from Adrian Hunter.
> 
> . Do not repipe attributes to a perf.data file in 'perf inject',
>   fix from Adrian Hunter
> 
> . Change the procps visible command-name of invididual benchmark tests
>   plus cleanups, from Ingo Molnar.
> 
> . Do not accept parse_tag_value() overflow, fix from Adrian Hunter.
> 
> . Validate that mmap_pages is not too big. From Adrian Hunter.
> 
> . Fix non-debug build, from Adrian Hunter
> 
> . Clarify the "sample parsing" test entry.
> 
> . Consider PERF_SAMPLE_TRANSACTION in the "sample parsing" test.
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Adrian Hunter (7):
>       perf sched: Make struct perf_sched sched a local variable
>       perf sched: Optimize build time
>       perf script: Make perf_script a local variable
>       perf inject: Do not repipe attributes to a perf.data file
>       perf tools: Do not accept parse_tag_value() overflow
>       perf evlist: Validate that mmap_pages is not too big
>       perf tools: Fix non-debug build
> 
> Arnaldo Carvalho de Melo (5):
>       perf test: Clarify the "sample parsing" test entry
>       perf test: Consider PERF_SAMPLE_TRANSACTION in the "sample parsing" test
>       perf tools: Stop using 'self' in some more places
>       perf ui: Rename ui_progress to ui_progress_ops
>       perf ui progress: Per progress bar state
> 
> Ingo Molnar (1):
>       perf bench: Change the procps visible command-name of invididual benchmark tests plus cleanups
> 
> Masami Hiramatsu (2):
>       perf probe: Support "$vars" meta argument syntax for local variables
>       perf probe: Find fentry mcount fuzzed parameter location
> 
> Namhyung Kim (1):
>       perf tools: Show progress on histogram collapsing
> 
>  tools/perf/Makefile.perf          |   1 +
>  tools/perf/builtin-annotate.c     |   6 +-
>  tools/perf/builtin-bench.c        | 239 +++++++++++++++++++-------------------
>  tools/perf/builtin-diff.c         |   7 +-
>  tools/perf/builtin-inject.c       |  27 +++--
>  tools/perf/builtin-report.c       |  24 ++--
>  tools/perf/builtin-sched.c        |  44 +++----
>  tools/perf/builtin-script.c       |  40 ++++---
>  tools/perf/builtin-top.c          |   4 +-
>  tools/perf/config/Makefile        |   4 +
>  tools/perf/tests/hists_link.c     |   2 +-
>  tools/perf/tests/sample-parsing.c |   4 +-
>  tools/perf/ui/gtk/gtk.h           |   2 +-
>  tools/perf/ui/gtk/progress.c      |  20 ++--
>  tools/perf/ui/gtk/setup.c         |   2 +-
>  tools/perf/ui/progress.c          |  32 +++--
>  tools/perf/ui/progress.h          |  19 +--
>  tools/perf/ui/tui/progress.c      |  15 +--
>  tools/perf/ui/tui/setup.c         |   3 +-
>  tools/perf/ui/tui/tui.h           |   6 +
>  tools/perf/util/build-id.c        |   6 +-
>  tools/perf/util/evlist.c          |  14 ++-
>  tools/perf/util/hist.c            |  23 ++--
>  tools/perf/util/hist.h            |   3 +-
>  tools/perf/util/probe-event.c     |   1 -
>  tools/perf/util/probe-finder.c    | 133 ++++++++++++++++++---
>  tools/perf/util/probe-finder.h    |   1 +
>  tools/perf/util/session.c         |  24 ++--
>  tools/perf/util/sort.c            | 124 ++++++++++----------
>  tools/perf/util/strfilter.c       |  46 ++++----
>  tools/perf/util/thread.c          |  72 ++++++------
>  tools/perf/util/util.c            |   2 +
>  32 files changed, 560 insertions(+), 390 deletions(-)
>  create mode 100644 tools/perf/ui/tui/tui.h

Pulled, thanks Arnaldo!

	Ingo

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

* [GIT PULL 00/16] perf/core improvements and fixes
@ 2013-10-23 20:57 Arnaldo Carvalho de Melo
  2013-10-24  6:52 ` Ingo Molnar
  0 siblings, 1 reply; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2013-10-23 20:57 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Andi Kleen, David Ahern, Frederic Weisbecker, Hitoshi Mitake,
	Jiri Olsa, Linus Torvalds, Masami Hiramatsu, Mike Galbraith,
	Namhyung Kim, Paul Mackerras, Peter Zijlstra, Stephane Eranian,
	Arnaldo Carvalho de Melo

From: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>

Hi Ingo,

	Please consider pulling,

- Arnaldo

The following changes since commit aa30a2e03a453aad9fd96c3f2d4a82c3497674e5:

  Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2013-10-23 09:45:50 +0200)

are available in the git repository at:


  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux tags/perf-core-for-mingo

for you to fetch changes up to c1fb5651bb40f9efaf32d280f39e06df7e352673:

  perf tools: Show progress on histogram collapsing (2013-10-23 15:48:24 -0300)

----------------------------------------------------------------
perf/core improvements and fixes:

. Show progress on histogram collapsing, that can take a long time, from
  Namhyung Kim.

. Support "$vars" meta argument syntax for local variables, allowing
  asking for all possible variables at a given probe point to be
  collected when it hits, from Masami Hiramatsu.

. Address the root cause of that 'perf sched' stack initialization build
  slowdown, by programmatically setting a big array after moving the
  global variable back to the stack. Fix from Adrian Hunter.

. Do not repipe attributes to a perf.data file in 'perf inject',
  fix from Adrian Hunter

. Change the procps visible command-name of invididual benchmark tests
  plus cleanups, from Ingo Molnar.

. Do not accept parse_tag_value() overflow, fix from Adrian Hunter.

. Validate that mmap_pages is not too big. From Adrian Hunter.

. Fix non-debug build, from Adrian Hunter

. Clarify the "sample parsing" test entry.

. Consider PERF_SAMPLE_TRANSACTION in the "sample parsing" test.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Adrian Hunter (7):
      perf sched: Make struct perf_sched sched a local variable
      perf sched: Optimize build time
      perf script: Make perf_script a local variable
      perf inject: Do not repipe attributes to a perf.data file
      perf tools: Do not accept parse_tag_value() overflow
      perf evlist: Validate that mmap_pages is not too big
      perf tools: Fix non-debug build

Arnaldo Carvalho de Melo (5):
      perf test: Clarify the "sample parsing" test entry
      perf test: Consider PERF_SAMPLE_TRANSACTION in the "sample parsing" test
      perf tools: Stop using 'self' in some more places
      perf ui: Rename ui_progress to ui_progress_ops
      perf ui progress: Per progress bar state

Ingo Molnar (1):
      perf bench: Change the procps visible command-name of invididual benchmark tests plus cleanups

Masami Hiramatsu (2):
      perf probe: Support "$vars" meta argument syntax for local variables
      perf probe: Find fentry mcount fuzzed parameter location

Namhyung Kim (1):
      perf tools: Show progress on histogram collapsing

 tools/perf/Makefile.perf          |   1 +
 tools/perf/builtin-annotate.c     |   6 +-
 tools/perf/builtin-bench.c        | 239 +++++++++++++++++++-------------------
 tools/perf/builtin-diff.c         |   7 +-
 tools/perf/builtin-inject.c       |  27 +++--
 tools/perf/builtin-report.c       |  24 ++--
 tools/perf/builtin-sched.c        |  44 +++----
 tools/perf/builtin-script.c       |  40 ++++---
 tools/perf/builtin-top.c          |   4 +-
 tools/perf/config/Makefile        |   4 +
 tools/perf/tests/hists_link.c     |   2 +-
 tools/perf/tests/sample-parsing.c |   4 +-
 tools/perf/ui/gtk/gtk.h           |   2 +-
 tools/perf/ui/gtk/progress.c      |  20 ++--
 tools/perf/ui/gtk/setup.c         |   2 +-
 tools/perf/ui/progress.c          |  32 +++--
 tools/perf/ui/progress.h          |  19 +--
 tools/perf/ui/tui/progress.c      |  15 +--
 tools/perf/ui/tui/setup.c         |   3 +-
 tools/perf/ui/tui/tui.h           |   6 +
 tools/perf/util/build-id.c        |   6 +-
 tools/perf/util/evlist.c          |  14 ++-
 tools/perf/util/hist.c            |  23 ++--
 tools/perf/util/hist.h            |   3 +-
 tools/perf/util/probe-event.c     |   1 -
 tools/perf/util/probe-finder.c    | 133 ++++++++++++++++++---
 tools/perf/util/probe-finder.h    |   1 +
 tools/perf/util/session.c         |  24 ++--
 tools/perf/util/sort.c            | 124 ++++++++++----------
 tools/perf/util/strfilter.c       |  46 ++++----
 tools/perf/util/thread.c          |  72 ++++++------
 tools/perf/util/util.c            |   2 +
 32 files changed, 560 insertions(+), 390 deletions(-)
 create mode 100644 tools/perf/ui/tui/tui.h

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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2012-02-14 15:10               ` Joerg Roedel
@ 2012-02-14 16:11                 ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2012-02-14 16:11 UTC (permalink / raw)
  To: Joerg Roedel
  Cc: David Ahern, Namhyung Kim, Namhyung Kim, linux-kernel,
	Ingo Molnar, Andi Kleen, Anshuman Khandual, Arun Sharma,
	Corey Ashford, Frederic Weisbecker, Jason Wang, Jiri Olsa,
	Lin Ming, Paul Mackerras, Peter Zijlstra,
	Roberto Agostino Vitillo, Robert Richter, Stephane Eranian,
	Thomas Gleixner, Vince Weaver

Em Tue, Feb 14, 2012 at 04:10:39PM +0100, Joerg Roedel escreveu:
> On Tue, Feb 14, 2012 at 12:38:53PM -0200, Arnaldo Carvalho de Melo wrote:
> >  	bool		   sample_id_all_avail;
> > +	bool		   exclude_guest_missing;
> >  	bool		   dump_symtab;
> >  	const char	   *cpu_list;
> >  	struct hist_entry  *sym_filter_entry;
> 
> I was about to prepare a similar patch :) But anyway, this one works
> too.
> 
> Tested-by: Joerg Roedel <joerg.roedel@amd.com>
> 
> (on 2.6.32)

thanks, I'm commiting it now after testing it on a 3.0-rt kernel,

- Arnaldo

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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2012-02-14 14:38             ` Arnaldo Carvalho de Melo
@ 2012-02-14 15:10               ` Joerg Roedel
  2012-02-14 16:11                 ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 58+ messages in thread
From: Joerg Roedel @ 2012-02-14 15:10 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: David Ahern, Namhyung Kim, Namhyung Kim, linux-kernel,
	Ingo Molnar, Andi Kleen, Anshuman Khandual, Arun Sharma,
	Corey Ashford, Frederic Weisbecker, Jason Wang, Jiri Olsa,
	Lin Ming, Paul Mackerras, Peter Zijlstra,
	Roberto Agostino Vitillo, Robert Richter, Stephane Eranian,
	Thomas Gleixner, Vince Weaver

On Tue, Feb 14, 2012 at 12:38:53PM -0200, Arnaldo Carvalho de Melo wrote:
> diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
> index 08ed24b..d6c10e8 100644
> --- a/tools/perf/builtin-record.c
> +++ b/tools/perf/builtin-record.c
> @@ -205,6 +205,9 @@ static void perf_record__open(struct perf_record *rec)
>  
>  		if (opts->group && pos != first)
>  			group_fd = first->fd;
> +fallback_missing_features:
> +		if (opts->exclude_guest_missing)
> +			attr->exclude_guest = attr->exclude_host = 0;
>  retry_sample_id:
>  		attr->sample_id_all = opts->sample_id_all_avail ? 1 : 0;
>  try_again:
> @@ -218,15 +221,23 @@ try_again:
>  			} else if (err ==  ENODEV && opts->cpu_list) {
>  				die("No such device - did you specify"
>  					" an out-of-range profile CPU?\n");
> -			} else if (err == EINVAL && opts->sample_id_all_avail) {
> -				/*
> -				 * Old kernel, no attr->sample_id_type_all field
> -				 */
> -				opts->sample_id_all_avail = false;
> -				if (!opts->sample_time && !opts->raw_samples && !time_needed)
> -					attr->sample_type &= ~PERF_SAMPLE_TIME;
> -
> -				goto retry_sample_id;
> +			} else if (err == EINVAL) {
> +				if (!opts->exclude_guest_missing &&
> +				    (attr->exclude_guest || attr->exclude_host)) {
> +					pr_debug("Old kernel, cannot exclude "
> +						 "guest or host samples.\n");
> +					opts->exclude_guest_missing = true;
> +					goto fallback_missing_features;
> +				} else if (opts->sample_id_all_avail) {
> +					/*
> +					 * Old kernel, no attr->sample_id_type_all field
> +					 */
> +					opts->sample_id_all_avail = false;
> +					if (!opts->sample_time && !opts->raw_samples && !time_needed)
> +						attr->sample_type &= ~PERF_SAMPLE_TIME;
> +
> +					goto retry_sample_id;
> +				}
>  			}
>  
>  			/*
> diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
> index 5a88c0d..02e11ff 100644
> --- a/tools/perf/builtin-top.c
> +++ b/tools/perf/builtin-top.c
> @@ -872,6 +872,9 @@ static void perf_top__start_counters(struct perf_top *top)
>  		attr->mmap = 1;
>  		attr->comm = 1;
>  		attr->inherit = top->inherit;
> +fallback_missing_features:
> +		if (top->exclude_guest_missing)
> +			attr->exclude_guest = attr->exclude_host = 0;
>  retry_sample_id:
>  		attr->sample_id_all = top->sample_id_all_avail ? 1 : 0;
>  try_again:
> @@ -883,12 +886,20 @@ try_again:
>  			if (err == EPERM || err == EACCES) {
>  				ui__error_paranoid();
>  				goto out_err;
> -			} else if (err == EINVAL && top->sample_id_all_avail) {
> -				/*
> -				 * Old kernel, no attr->sample_id_type_all field
> -				 */
> -				top->sample_id_all_avail = false;
> -				goto retry_sample_id;
> +			} else if (err == EINVAL) {
> +				if (!top->exclude_guest_missing &&
> +				    (attr->exclude_guest || attr->exclude_host)) {
> +					pr_debug("Old kernel, cannot exclude "
> +						 "guest or host samples.\n");
> +					top->exclude_guest_missing = true;
> +					goto fallback_missing_features;
> +				} else if (top->sample_id_all_avail) {
> +					/*
> +					 * Old kernel, no attr->sample_id_type_all field
> +					 */
> +					top->sample_id_all_avail = false;
> +					goto retry_sample_id;
> +				}
>  			}
>  			/*
>  			 * If it's cycles then fall back to hrtimer
> diff --git a/tools/perf/perf.h b/tools/perf/perf.h
> index 03a0456..8b9c436 100644
> --- a/tools/perf/perf.h
> +++ b/tools/perf/perf.h
> @@ -199,6 +199,7 @@ struct perf_record_opts {
>  	bool	     sample_address;
>  	bool	     sample_time;
>  	bool	     sample_id_all_avail;
> +	bool	     exclude_guest_missing;
>  	bool	     system_wide;
>  	bool	     period;
>  	unsigned int freq;
> diff --git a/tools/perf/util/top.h b/tools/perf/util/top.h
> index 49eb848..7dea891 100644
> --- a/tools/perf/util/top.h
> +++ b/tools/perf/util/top.h
> @@ -35,6 +35,7 @@ struct perf_top {
>  	bool		   inherit;
>  	bool		   group;
>  	bool		   sample_id_all_avail;
> +	bool		   exclude_guest_missing;
>  	bool		   dump_symtab;
>  	const char	   *cpu_list;
>  	struct hist_entry  *sym_filter_entry;

I was about to prepare a similar patch :) But anyway, this one works
too.

Tested-by: Joerg Roedel <joerg.roedel@amd.com>

(on 2.6.32)

-- 
AMD Operating System Research Center

Advanced Micro Devices GmbH Einsteinring 24 85609 Dornach
General Managers: Alberto Bozzo
Registration: Dornach, Landkr. Muenchen; Registerger. Muenchen, HRB Nr. 43632


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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2012-02-14 13:10           ` Arnaldo Carvalho de Melo
@ 2012-02-14 14:38             ` Arnaldo Carvalho de Melo
  2012-02-14 15:10               ` Joerg Roedel
  0 siblings, 1 reply; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2012-02-14 14:38 UTC (permalink / raw)
  To: Joerg Roedel
  Cc: David Ahern, Namhyung Kim, Namhyung Kim, linux-kernel,
	Ingo Molnar, Andi Kleen, Anshuman Khandual, Arun Sharma,
	Corey Ashford, Frederic Weisbecker, Jason Wang, Jiri Olsa,
	Lin Ming, Paul Mackerras, Peter Zijlstra,
	Roberto Agostino Vitillo, Robert Richter, Stephane Eranian,
	Thomas Gleixner, Vince Weaver

Em Tue, Feb 14, 2012 at 11:10:46AM -0200, Arnaldo Carvalho de Melo escreveu:
> Em Tue, Feb 14, 2012 at 11:50:18AM +0100, Joerg Roedel escreveu:
> > On Mon, Feb 13, 2012 at 10:23:07PM -0700, David Ahern wrote:
> > > On 2/13/12 10:10 PM, Namhyung Kim wrote:
> > > >It happened because I used old kernel version that isn't aware of the
> > > >exclude_guest bit. So the check on attr->__reserved_1 in
> > > >core.c::perf_copy_attr() failed and then ended up seeing EINVAL at
> > > >perf_evsel__open().
> 
> > > comes back to 1aed2671738785e8f5aea663a6fda91aa7ef59b5 again. See
> 
> > > https://lkml.org/lkml/2012/2/8/234
> 
> > Grr. I totally forgot that issue. Is there some way to detect the perf
> > kernel-features? Otherwise the only fix seems to be to drop the patch
> > changing the default. The crashes should be fixed by the other patch
> > already.
> 
> Well, we need to detect it like we do with sample_id_all. In this case
> we would try with exclude_guest, if it fails with EINVAL, we realise it
> is not available, clean that bit and try again.

The following patch should fix it, still untested tho, booting a machine
with an < 3.1 kernel to check...

- Arnaldo

diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index 08ed24b..d6c10e8 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -205,6 +205,9 @@ static void perf_record__open(struct perf_record *rec)
 
 		if (opts->group && pos != first)
 			group_fd = first->fd;
+fallback_missing_features:
+		if (opts->exclude_guest_missing)
+			attr->exclude_guest = attr->exclude_host = 0;
 retry_sample_id:
 		attr->sample_id_all = opts->sample_id_all_avail ? 1 : 0;
 try_again:
@@ -218,15 +221,23 @@ try_again:
 			} else if (err ==  ENODEV && opts->cpu_list) {
 				die("No such device - did you specify"
 					" an out-of-range profile CPU?\n");
-			} else if (err == EINVAL && opts->sample_id_all_avail) {
-				/*
-				 * Old kernel, no attr->sample_id_type_all field
-				 */
-				opts->sample_id_all_avail = false;
-				if (!opts->sample_time && !opts->raw_samples && !time_needed)
-					attr->sample_type &= ~PERF_SAMPLE_TIME;
-
-				goto retry_sample_id;
+			} else if (err == EINVAL) {
+				if (!opts->exclude_guest_missing &&
+				    (attr->exclude_guest || attr->exclude_host)) {
+					pr_debug("Old kernel, cannot exclude "
+						 "guest or host samples.\n");
+					opts->exclude_guest_missing = true;
+					goto fallback_missing_features;
+				} else if (opts->sample_id_all_avail) {
+					/*
+					 * Old kernel, no attr->sample_id_type_all field
+					 */
+					opts->sample_id_all_avail = false;
+					if (!opts->sample_time && !opts->raw_samples && !time_needed)
+						attr->sample_type &= ~PERF_SAMPLE_TIME;
+
+					goto retry_sample_id;
+				}
 			}
 
 			/*
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
index 5a88c0d..02e11ff 100644
--- a/tools/perf/builtin-top.c
+++ b/tools/perf/builtin-top.c
@@ -872,6 +872,9 @@ static void perf_top__start_counters(struct perf_top *top)
 		attr->mmap = 1;
 		attr->comm = 1;
 		attr->inherit = top->inherit;
+fallback_missing_features:
+		if (top->exclude_guest_missing)
+			attr->exclude_guest = attr->exclude_host = 0;
 retry_sample_id:
 		attr->sample_id_all = top->sample_id_all_avail ? 1 : 0;
 try_again:
@@ -883,12 +886,20 @@ try_again:
 			if (err == EPERM || err == EACCES) {
 				ui__error_paranoid();
 				goto out_err;
-			} else if (err == EINVAL && top->sample_id_all_avail) {
-				/*
-				 * Old kernel, no attr->sample_id_type_all field
-				 */
-				top->sample_id_all_avail = false;
-				goto retry_sample_id;
+			} else if (err == EINVAL) {
+				if (!top->exclude_guest_missing &&
+				    (attr->exclude_guest || attr->exclude_host)) {
+					pr_debug("Old kernel, cannot exclude "
+						 "guest or host samples.\n");
+					top->exclude_guest_missing = true;
+					goto fallback_missing_features;
+				} else if (top->sample_id_all_avail) {
+					/*
+					 * Old kernel, no attr->sample_id_type_all field
+					 */
+					top->sample_id_all_avail = false;
+					goto retry_sample_id;
+				}
 			}
 			/*
 			 * If it's cycles then fall back to hrtimer
diff --git a/tools/perf/perf.h b/tools/perf/perf.h
index 03a0456..8b9c436 100644
--- a/tools/perf/perf.h
+++ b/tools/perf/perf.h
@@ -199,6 +199,7 @@ struct perf_record_opts {
 	bool	     sample_address;
 	bool	     sample_time;
 	bool	     sample_id_all_avail;
+	bool	     exclude_guest_missing;
 	bool	     system_wide;
 	bool	     period;
 	unsigned int freq;
diff --git a/tools/perf/util/top.h b/tools/perf/util/top.h
index 49eb848..7dea891 100644
--- a/tools/perf/util/top.h
+++ b/tools/perf/util/top.h
@@ -35,6 +35,7 @@ struct perf_top {
 	bool		   inherit;
 	bool		   group;
 	bool		   sample_id_all_avail;
+	bool		   exclude_guest_missing;
 	bool		   dump_symtab;
 	const char	   *cpu_list;
 	struct hist_entry  *sym_filter_entry;

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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2012-02-14 10:50         ` Joerg Roedel
@ 2012-02-14 13:10           ` Arnaldo Carvalho de Melo
  2012-02-14 14:38             ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2012-02-14 13:10 UTC (permalink / raw)
  To: Joerg Roedel
  Cc: David Ahern, Namhyung Kim, Namhyung Kim, linux-kernel,
	Ingo Molnar, Andi Kleen, Anshuman Khandual, Arun Sharma,
	Corey Ashford, Frederic Weisbecker, Jason Wang, Jiri Olsa,
	Lin Ming, Paul Mackerras, Peter Zijlstra,
	Roberto Agostino Vitillo, Robert Richter, Stephane Eranian,
	Thomas Gleixner, Vince Weaver

Em Tue, Feb 14, 2012 at 11:50:18AM +0100, Joerg Roedel escreveu:
> On Mon, Feb 13, 2012 at 10:23:07PM -0700, David Ahern wrote:
> > On 2/13/12 10:10 PM, Namhyung Kim wrote:
> > >It happened because I used old kernel version that isn't aware of the
> > >exclude_guest bit. So the check on attr->__reserved_1 in
> > >core.c::perf_copy_attr() failed and then ended up seeing EINVAL at
> > >perf_evsel__open().

> > comes back to 1aed2671738785e8f5aea663a6fda91aa7ef59b5 again. See

> > https://lkml.org/lkml/2012/2/8/234

> Grr. I totally forgot that issue. Is there some way to detect the perf
> kernel-features? Otherwise the only fix seems to be to drop the patch
> changing the default. The crashes should be fixed by the other patch
> already.

Well, we need to detect it like we do with sample_id_all. In this case
we would try with exclude_guest, if it fails with EINVAL, we realise it
is not available, clean that bit and try again.

- Arnaldo

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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2012-02-14  5:23       ` David Ahern
  2012-02-14  5:48         ` Namhyung Kim
@ 2012-02-14 10:50         ` Joerg Roedel
  2012-02-14 13:10           ` Arnaldo Carvalho de Melo
  1 sibling, 1 reply; 58+ messages in thread
From: Joerg Roedel @ 2012-02-14 10:50 UTC (permalink / raw)
  To: David Ahern
  Cc: Namhyung Kim, Namhyung Kim, linux-kernel, Ingo Molnar,
	Andi Kleen, Anshuman Khandual, Arun Sharma, Corey Ashford,
	Frederic Weisbecker, Jason Wang, Jiri Olsa, Lin Ming,
	Paul Mackerras, Peter Zijlstra, Roberto Agostino Vitillo,
	Robert Richter, Stephane Eranian, Thomas Gleixner, Vince Weaver,
	arnaldo.melo, Arnaldo Carvalho de Melo

On Mon, Feb 13, 2012 at 10:23:07PM -0700, David Ahern wrote:
> On 2/13/12 10:10 PM, Namhyung Kim wrote:
> >>
> >
> >It happened because I used old kernel version that isn't aware of the
> >exclude_guest bit. So the check on attr->__reserved_1 in
> >core.c::perf_copy_attr() failed and then ended up seeing EINVAL at
> >perf_evsel__open().
> 
> comes back to 1aed2671738785e8f5aea663a6fda91aa7ef59b5 again. See
> 
> https://lkml.org/lkml/2012/2/8/234

Grr. I totally forgot that issue. Is there some way to detect the perf
kernel-features? Otherwise the only fix seems to be to drop the patch
changing the default. The crashes should be fixed by the other patch
already.


	Joerg

-- 
AMD Operating System Research Center

Advanced Micro Devices GmbH Einsteinring 24 85609 Dornach
General Managers: Alberto Bozzo
Registration: Dornach, Landkr. Muenchen; Registerger. Muenchen, HRB Nr. 43632


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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2012-02-14  5:52           ` David Ahern
@ 2012-02-14  5:58             ` Namhyung Kim
  0 siblings, 0 replies; 58+ messages in thread
From: Namhyung Kim @ 2012-02-14  5:58 UTC (permalink / raw)
  To: David Ahern
  Cc: Joerg Roedel, Namhyung Kim, linux-kernel, Ingo Molnar,
	Andi Kleen, Anshuman Khandual, Arun Sharma, Corey Ashford,
	Frederic Weisbecker, Jason Wang, Jiri Olsa, Lin Ming,
	Paul Mackerras, Peter Zijlstra, Roberto Agostino Vitillo,
	Robert Richter, Stephane Eranian, Thomas Gleixner, Vince Weaver,
	arnaldo.melo, Arnaldo Carvalho de Melo

2012-02-14 2:52 PM, David Ahern wrote:
> On 2/13/12 10:48 PM, Namhyung Kim wrote:
>> Hi,
>>
>> 2012-02-14 2:23 PM, David Ahern wrote:
>>> On 2/13/12 10:10 PM, Namhyung Kim wrote:
>>>>>
>>>>
>>>> It happened because I used old kernel version that isn't aware of the
>>>> exclude_guest bit. So the check on attr->__reserved_1 in
>>>> core.c::perf_copy_attr() failed and then ended up seeing EINVAL at
>>>> perf_evsel__open().
>>>
>>> comes back to 1aed2671738785e8f5aea663a6fda91aa7ef59b5 again. See
>>>
>>> https://lkml.org/lkml/2012/2/8/234
>>>
>>
>> Thanks for the pointer, then I'll wait until the guys figure out what
>> the correct fix is :)
>>
>> Thanks,
>> Namhyung
>
> Resetting that default was it. :-)
>
> Does reverting the entire patch fix your problem?
>
> David

Yes, of course.

OK, then I'll start to rework perf target cleanups after reverting it.

Thanks,
Namhyung

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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2012-02-14  5:48         ` Namhyung Kim
@ 2012-02-14  5:52           ` David Ahern
  2012-02-14  5:58             ` Namhyung Kim
  0 siblings, 1 reply; 58+ messages in thread
From: David Ahern @ 2012-02-14  5:52 UTC (permalink / raw)
  To: Namhyung Kim
  Cc: Joerg Roedel, Namhyung Kim, linux-kernel, Ingo Molnar,
	Andi Kleen, Anshuman Khandual, Arun Sharma, Corey Ashford,
	Frederic Weisbecker, Jason Wang, Jiri Olsa, Lin Ming,
	Paul Mackerras, Peter Zijlstra, Roberto Agostino Vitillo,
	Robert Richter, Stephane Eranian, Thomas Gleixner, Vince Weaver,
	arnaldo.melo, Arnaldo Carvalho de Melo

On 2/13/12 10:48 PM, Namhyung Kim wrote:
> Hi,
>
> 2012-02-14 2:23 PM, David Ahern wrote:
>> On 2/13/12 10:10 PM, Namhyung Kim wrote:
>>>>
>>>
>>> It happened because I used old kernel version that isn't aware of the
>>> exclude_guest bit. So the check on attr->__reserved_1 in
>>> core.c::perf_copy_attr() failed and then ended up seeing EINVAL at
>>> perf_evsel__open().
>>
>> comes back to 1aed2671738785e8f5aea663a6fda91aa7ef59b5 again. See
>>
>> https://lkml.org/lkml/2012/2/8/234
>>
>
> Thanks for the pointer, then I'll wait until the guys figure out what
> the correct fix is :)
>
> Thanks,
> Namhyung

Resetting that default was it. :-)

Does reverting the entire patch fix your problem?

David

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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2012-02-14  5:23       ` David Ahern
@ 2012-02-14  5:48         ` Namhyung Kim
  2012-02-14  5:52           ` David Ahern
  2012-02-14 10:50         ` Joerg Roedel
  1 sibling, 1 reply; 58+ messages in thread
From: Namhyung Kim @ 2012-02-14  5:48 UTC (permalink / raw)
  To: David Ahern
  Cc: Joerg Roedel, Namhyung Kim, linux-kernel, Ingo Molnar,
	Andi Kleen, Anshuman Khandual, Arun Sharma, Corey Ashford,
	Frederic Weisbecker, Jason Wang, Jiri Olsa, Lin Ming,
	Paul Mackerras, Peter Zijlstra, Roberto Agostino Vitillo,
	Robert Richter, Stephane Eranian, Thomas Gleixner, Vince Weaver,
	arnaldo.melo, Arnaldo Carvalho de Melo

Hi,

2012-02-14 2:23 PM, David Ahern wrote:
> On 2/13/12 10:10 PM, Namhyung Kim wrote:
>>>
>>
>> It happened because I used old kernel version that isn't aware of the
>> exclude_guest bit. So the check on attr->__reserved_1 in
>> core.c::perf_copy_attr() failed and then ended up seeing EINVAL at
>> perf_evsel__open().
>
> comes back to 1aed2671738785e8f5aea663a6fda91aa7ef59b5 again. See
>
> https://lkml.org/lkml/2012/2/8/234
>

Thanks for the pointer, then I'll wait until the guys figure out what the 
correct fix is :)

Thanks,
Namhyung

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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2012-02-14  5:10     ` Namhyung Kim
@ 2012-02-14  5:23       ` David Ahern
  2012-02-14  5:48         ` Namhyung Kim
  2012-02-14 10:50         ` Joerg Roedel
  0 siblings, 2 replies; 58+ messages in thread
From: David Ahern @ 2012-02-14  5:23 UTC (permalink / raw)
  To: Namhyung Kim, Joerg Roedel
  Cc: Namhyung Kim, linux-kernel, Ingo Molnar, Andi Kleen,
	Anshuman Khandual, Arun Sharma, Corey Ashford,
	Frederic Weisbecker, Jason Wang, Jiri Olsa, Lin Ming,
	Paul Mackerras, Peter Zijlstra, Roberto Agostino Vitillo,
	Robert Richter, Stephane Eranian, Thomas Gleixner, Vince Weaver,
	arnaldo.melo, Arnaldo Carvalho de Melo

On 2/13/12 10:10 PM, Namhyung Kim wrote:
>>
>
> It happened because I used old kernel version that isn't aware of the
> exclude_guest bit. So the check on attr->__reserved_1 in
> core.c::perf_copy_attr() failed and then ended up seeing EINVAL at
> perf_evsel__open().

comes back to 1aed2671738785e8f5aea663a6fda91aa7ef59b5 again. See

https://lkml.org/lkml/2012/2/8/234

>
> So I think it should be handled in the same way of handling
> sample_id_all bit in perf record and top if we want to set perf_guest to
> false by default. I'll send patches for them soon.
>
> Thanks,
> Namhyung


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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2012-02-14  3:07   ` Namhyung Kim
@ 2012-02-14  5:10     ` Namhyung Kim
  2012-02-14  5:23       ` David Ahern
  0 siblings, 1 reply; 58+ messages in thread
From: Namhyung Kim @ 2012-02-14  5:10 UTC (permalink / raw)
  To: Namhyung Kim
  Cc: linux-kernel, Ingo Molnar, Andi Kleen, Anshuman Khandual,
	Arun Sharma, Corey Ashford, David Ahern, Frederic Weisbecker,
	Jason Wang, Jiri Olsa, Joerg Roedel, Lin Ming, Paul Mackerras,
	Peter Zijlstra, Roberto Agostino Vitillo, Robert Richter,
	Stephane Eranian, Thomas Gleixner, Vince Weaver, arnaldo.melo,
	Arnaldo Carvalho de Melo

2012-02-14 12:07 PM, Namhyung Kim wrote:
> 2012-02-14 오전 11:50, Namhyung Kim 쓴 글:
>> Hello,
>>
>> 2012-02-14 10:52 AM, Arnaldo Carvalho de Melo wrote:
>>> The following changes since commit c98fdeaa92731308ed80386261fa2589addefa47:
>>>
>>> x86/sched/perf/AMD: Set sched_clock_stable (2012-02-07 13:12:08 +0100)
>>>
>>> are available in the git repository at:
>>>
>>> git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux perf-core-for-mingo
>>>
>>> for you to fetch changes up to 7e1ccd3804281fc0755eb726b654469c40a96d89:
>>>
>>> perf tools: cleanup initialization of attr->size (2012-02-13 23:35:04 -0200)
>>>
>>> ----------------------------------------------------------------
>>> perf/core fixes and improvements.
>>>
>>> Signed-off-by: Arnaldo Carvalho de Melo<acme@redhat.com>
>>>
>>
>> I've got a following error during a simple test:
>>
>> $ ./perf record -- sleep 1
>>
>> Error: sys_perf_event_open() syscall returned with 22 (Invalid argument).
>> /bin/dmesg may provide additional information.
>>
>> Fatal: No CONFIG_PERF_EVENTS=y kernel support configured?
>>
>> sleep: Terminated
>>
>>
>> Any thoughts?
>>
>> Thanks,
>> Namhyung
>>
>
> git bisect told me:
>
> c4a7dca92bbb9881a5d678720f1d0c2153499749 is the first bad commit
> commit c4a7dca92bbb9881a5d678720f1d0c2153499749
> Author: Joerg Roedel<joerg.roedel@amd.com>
> Date:   Fri Feb 10 18:05:05 2012 +0100
>
>      perf tools: Change perf_guest default back to false
>
>      Setting perf_guest to true by default makes no sense because the perf
>      subcommands can not setup guest symbol information and thus not process
>      and guest samples. The only exception is perf-kvm which changes the
>      perf_guest value on its own.  So change the default for perf_guest back
>      to false.
>
>      Cc: David Ahern<dsahern@gmail.com>
>      Cc: Ingo Molnar<mingo@elte.hu>
>      Cc: Jason Wang<jasowang@redhat.com>
>      Cc: Paul Mackerras<paulus@samba.org>
>      Cc: Peter Zijlstra<a.p.zijlstra@chello.nl>
>      Link: http://lkml.kernel.org/r/1328893505-4115-3-git-send-email-joerg.roedel@amd.com
>      Signed-off-by: Joerg Roedel<joerg.roedel@amd.com>
>      Signed-off-by: Arnaldo Carvalho de Melo<acme@redhat.com>
>
> :040000 040000 64d65944c9081dfd9ace65dbc19fca655cbdc708 4f0e86ab85314ba68f2295ae1e599f3bb5ab9484 M      tools
>
>
> Thanks,
> Namhyung
>

It happened because I used old kernel version that isn't aware of the 
exclude_guest bit. So the check on attr->__reserved_1 in 
core.c::perf_copy_attr() failed and then ended up seeing EINVAL at 
perf_evsel__open().

So I think it should be handled in the same way of handling sample_id_all bit 
in perf record and top if we want to set perf_guest to false by default. I'll 
send patches for them soon.

Thanks,
Namhyung

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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2012-02-14  2:50 ` Namhyung Kim
@ 2012-02-14  3:07   ` Namhyung Kim
  2012-02-14  5:10     ` Namhyung Kim
  0 siblings, 1 reply; 58+ messages in thread
From: Namhyung Kim @ 2012-02-14  3:07 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-kernel, Ingo Molnar, Andi Kleen, Anshuman Khandual,
	Arun Sharma, Corey Ashford, David Ahern, Frederic Weisbecker,
	Jason Wang, Jiri Olsa, Joerg Roedel, Lin Ming, Namhyung Kim,
	Paul Mackerras, Peter Zijlstra, Roberto Agostino Vitillo,
	Robert Richter, Stephane Eranian, Thomas Gleixner, Vince Weaver,
	arnaldo.melo, Arnaldo Carvalho de Melo

2012-02-14 오전 11:50, Namhyung Kim 쓴 글:
> Hello,
> 
> 2012-02-14 10:52 AM, Arnaldo Carvalho de Melo wrote:
>> The following changes since commit c98fdeaa92731308ed80386261fa2589addefa47:
>>
>> x86/sched/perf/AMD: Set sched_clock_stable (2012-02-07 13:12:08 +0100)
>>
>> are available in the git repository at:
>>
>> git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux perf-core-for-mingo
>>
>> for you to fetch changes up to 7e1ccd3804281fc0755eb726b654469c40a96d89:
>>
>> perf tools: cleanup initialization of attr->size (2012-02-13 23:35:04 -0200)
>>
>> ----------------------------------------------------------------
>> perf/core fixes and improvements.
>>
>> Signed-off-by: Arnaldo Carvalho de Melo<acme@redhat.com>
>>
> 
> I've got a following error during a simple test:
> 
> $ ./perf record -- sleep 1
> 
> Error: sys_perf_event_open() syscall returned with 22 (Invalid argument).
> /bin/dmesg may provide additional information.
> 
> Fatal: No CONFIG_PERF_EVENTS=y kernel support configured?
> 
> sleep: Terminated
> 
> 
> Any thoughts?
> 
> Thanks,
> Namhyung
> 

git bisect told me:

c4a7dca92bbb9881a5d678720f1d0c2153499749 is the first bad commit
commit c4a7dca92bbb9881a5d678720f1d0c2153499749
Author: Joerg Roedel <joerg.roedel@amd.com>
Date:   Fri Feb 10 18:05:05 2012 +0100

    perf tools: Change perf_guest default back to false

    Setting perf_guest to true by default makes no sense because the perf
    subcommands can not setup guest symbol information and thus not process
    and guest samples. The only exception is perf-kvm which changes the
    perf_guest value on its own.  So change the default for perf_guest back
    to false.

    Cc: David Ahern <dsahern@gmail.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Jason Wang <jasowang@redhat.com>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Link: http://lkml.kernel.org/r/1328893505-4115-3-git-send-email-joerg.roedel@amd.com
    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

:040000 040000 64d65944c9081dfd9ace65dbc19fca655cbdc708 4f0e86ab85314ba68f2295ae1e599f3bb5ab9484 M      tools


Thanks,
Namhyung



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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2012-02-14  1:52 Arnaldo Carvalho de Melo
@ 2012-02-14  2:50 ` Namhyung Kim
  2012-02-14  3:07   ` Namhyung Kim
  0 siblings, 1 reply; 58+ messages in thread
From: Namhyung Kim @ 2012-02-14  2:50 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Ingo Molnar, linux-kernel, Andi Kleen, Anshuman Khandual,
	Arun Sharma, Corey Ashford, David Ahern, Frederic Weisbecker,
	Jason Wang, Jiri Olsa, Joerg Roedel, Lin Ming, Namhyung Kim,
	Paul Mackerras, Peter Zijlstra, Roberto Agostino Vitillo,
	Robert Richter, Stephane Eranian, Thomas Gleixner, Vince Weaver,
	arnaldo.melo, Arnaldo Carvalho de Melo

Hello,

2012-02-14 10:52 AM, Arnaldo Carvalho de Melo wrote:
> The following changes since commit c98fdeaa92731308ed80386261fa2589addefa47:
>
>    x86/sched/perf/AMD: Set sched_clock_stable (2012-02-07 13:12:08 +0100)
>
> are available in the git repository at:
>
>    git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux perf-core-for-mingo
>
> for you to fetch changes up to 7e1ccd3804281fc0755eb726b654469c40a96d89:
>
>    perf tools: cleanup initialization of attr->size (2012-02-13 23:35:04 -0200)
>
> ----------------------------------------------------------------
> perf/core fixes and improvements.
>
> Signed-off-by: Arnaldo Carvalho de Melo<acme@redhat.com>
>

I've got a following error during a simple test:

  $ ./perf record -- sleep 1

    Error: sys_perf_event_open() syscall returned with 22 (Invalid argument).
           /bin/dmesg may provide additional information.

    Fatal: No CONFIG_PERF_EVENTS=y kernel support configured?

  sleep: Terminated


Any thoughts?

Thanks,
Namhyung


> ----------------------------------------------------------------
> David Ahern (3):
>        perf record: No build id option fails
>        perf tools: Fix out of tree compiles
>        perf tools: Allow multiple threads or processes in record, stat, top
>
> Jiri Olsa (3):
>        perf tools: Remove unused functions from debugfs object
>        perf tools: Add sysfs mountpoint interface
>        perf tools: Add bitmap_or function into bitmap object
>
> Joerg Roedel (2):
>        perf top: Don't process samples with no valid machine object
>        perf tools: Change perf_guest default back to false
>
> Namhyung Kim (4):
>        perf tools: Fix build dependency of perf python extension
>        perf tools: Implement islower/isupper macro into util.h
>        perf tools: ctype.c only wants util.h
>        perf tools: Get rid of ctype.h in symbol.c
>
> Robert Richter (2):
>        perf tools: Moving code in header.c
>        perf tools: Factor out feature op to process header sections
>
> Stephane Eranian (2):
>        perf tools: fix endianness detection in perf.data
>        perf tools: cleanup initialization of attr->size
>
>   tools/perf/Documentation/perf-record.txt |    4 +-
>   tools/perf/Documentation/perf-stat.txt   |    4 +-
>   tools/perf/Documentation/perf-top.txt    |    4 +-
>   tools/perf/MANIFEST                      |    1 +
>   tools/perf/Makefile                      |    7 +-
>   tools/perf/builtin-record.c              |   14 +-
>   tools/perf/builtin-stat.c                |   31 ++-
>   tools/perf/builtin-test.c                |    2 -
>   tools/perf/builtin-top.c                 |   18 +-
>   tools/perf/perf.h                        |    5 +-
>   tools/perf/util/bitmap.c                 |   10 +
>   tools/perf/util/ctype.c                  |    2 +-
>   tools/perf/util/debugfs.c                |  141 ----------
>   tools/perf/util/debugfs.h                |    6 -
>   tools/perf/util/evlist.c                 |   10 +-
>   tools/perf/util/evlist.h                 |    4 +-
>   tools/perf/util/evsel.c                  |    2 +-
>   tools/perf/util/header.c                 |  421 +++++++++++++++++-------------
>   tools/perf/util/hist.h                   |    1 +
>   tools/perf/util/include/linux/bitmap.h   |   11 +
>   tools/perf/util/python-ext-sources       |   19 ++
>   tools/perf/util/session.c                |   10 +
>   tools/perf/util/setup.py                 |    8 +-
>   tools/perf/util/symbol.c                 |    2 +-
>   tools/perf/util/sysfs.c                  |   60 +++++
>   tools/perf/util/sysfs.h                  |    6 +
>   tools/perf/util/thread_map.c             |  128 +++++++++
>   tools/perf/util/thread_map.h             |    4 +
>   tools/perf/util/top.c                    |   10 +-
>   tools/perf/util/top.h                    |    2 +-
>   tools/perf/util/usage.c                  |    6 +-
>   tools/perf/util/util.c                   |    4 +-
>   tools/perf/util/util.h                   |    6 +-
>   33 files changed, 571 insertions(+), 392 deletions(-)
>   create mode 100644 tools/perf/util/python-ext-sources
>   create mode 100644 tools/perf/util/sysfs.c
>   create mode 100644 tools/perf/util/sysfs.h


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

* [GIT PULL 00/16] perf/core improvements and fixes
@ 2012-02-14  1:52 Arnaldo Carvalho de Melo
  2012-02-14  2:50 ` Namhyung Kim
  0 siblings, 1 reply; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2012-02-14  1:52 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Andi Kleen,
	Anshuman Khandual, Arun Sharma, Corey Ashford, David Ahern,
	Frederic Weisbecker, Jason Wang, Jiri Olsa, Joerg Roedel,
	Lin Ming, Namhyung Kim, Namhyung Kim, Paul Mackerras,
	Peter Zijlstra, Roberto Agostino Vitillo, Robert Richter,
	Stephane Eranian, Thomas Gleixner, Vince Weaver, arnaldo.melo,
	Arnaldo Carvalho de Melo

The following changes since commit c98fdeaa92731308ed80386261fa2589addefa47:

  x86/sched/perf/AMD: Set sched_clock_stable (2012-02-07 13:12:08 +0100)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux perf-core-for-mingo

for you to fetch changes up to 7e1ccd3804281fc0755eb726b654469c40a96d89:

  perf tools: cleanup initialization of attr->size (2012-02-13 23:35:04 -0200)

----------------------------------------------------------------
perf/core fixes and improvements.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
David Ahern (3):
      perf record: No build id option fails
      perf tools: Fix out of tree compiles
      perf tools: Allow multiple threads or processes in record, stat, top

Jiri Olsa (3):
      perf tools: Remove unused functions from debugfs object
      perf tools: Add sysfs mountpoint interface
      perf tools: Add bitmap_or function into bitmap object

Joerg Roedel (2):
      perf top: Don't process samples with no valid machine object
      perf tools: Change perf_guest default back to false

Namhyung Kim (4):
      perf tools: Fix build dependency of perf python extension
      perf tools: Implement islower/isupper macro into util.h
      perf tools: ctype.c only wants util.h
      perf tools: Get rid of ctype.h in symbol.c

Robert Richter (2):
      perf tools: Moving code in header.c
      perf tools: Factor out feature op to process header sections

Stephane Eranian (2):
      perf tools: fix endianness detection in perf.data
      perf tools: cleanup initialization of attr->size

 tools/perf/Documentation/perf-record.txt |    4 +-
 tools/perf/Documentation/perf-stat.txt   |    4 +-
 tools/perf/Documentation/perf-top.txt    |    4 +-
 tools/perf/MANIFEST                      |    1 +
 tools/perf/Makefile                      |    7 +-
 tools/perf/builtin-record.c              |   14 +-
 tools/perf/builtin-stat.c                |   31 ++-
 tools/perf/builtin-test.c                |    2 -
 tools/perf/builtin-top.c                 |   18 +-
 tools/perf/perf.h                        |    5 +-
 tools/perf/util/bitmap.c                 |   10 +
 tools/perf/util/ctype.c                  |    2 +-
 tools/perf/util/debugfs.c                |  141 ----------
 tools/perf/util/debugfs.h                |    6 -
 tools/perf/util/evlist.c                 |   10 +-
 tools/perf/util/evlist.h                 |    4 +-
 tools/perf/util/evsel.c                  |    2 +-
 tools/perf/util/header.c                 |  421 +++++++++++++++++-------------
 tools/perf/util/hist.h                   |    1 +
 tools/perf/util/include/linux/bitmap.h   |   11 +
 tools/perf/util/python-ext-sources       |   19 ++
 tools/perf/util/session.c                |   10 +
 tools/perf/util/setup.py                 |    8 +-
 tools/perf/util/symbol.c                 |    2 +-
 tools/perf/util/sysfs.c                  |   60 +++++
 tools/perf/util/sysfs.h                  |    6 +
 tools/perf/util/thread_map.c             |  128 +++++++++
 tools/perf/util/thread_map.h             |    4 +
 tools/perf/util/top.c                    |   10 +-
 tools/perf/util/top.h                    |    2 +-
 tools/perf/util/usage.c                  |    6 +-
 tools/perf/util/util.c                   |    4 +-
 tools/perf/util/util.h                   |    6 +-
 33 files changed, 571 insertions(+), 392 deletions(-)
 create mode 100644 tools/perf/util/python-ext-sources
 create mode 100644 tools/perf/util/sysfs.c
 create mode 100644 tools/perf/util/sysfs.h

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

* Re: [GIT PULL 00/16] perf/core improvements and fixes
  2011-09-29 22:47 Arnaldo Carvalho de Melo
@ 2011-10-04  7:57 ` Ingo Molnar
  0 siblings, 0 replies; 58+ messages in thread
From: Ingo Molnar @ 2011-10-04  7:57 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Andi Kleen, David Ahern, Frederic Weisbecker,
	Jim Cromie, Jiri Olsa, Mike Galbraith, Neil Horman,
	Paul Mackerras, Peter Zijlstra, Stephane Eranian,
	Thomas Gleixner, arnaldo.melo


* Arnaldo Carvalho de Melo <acme@infradead.org> wrote:

> Hi Ingo,
> 
>         Please consider pulling from:
> 
> git://github.com/acmel/linux.git perf/core
> 
> 	This was rebased against your perf/core on tesla.
> 
> Regards,
> 
> - Arnaldo
> 
> Andi Kleen (2):
>   perf tools: Make stat/record print fatal signals of the target program
>   perf: Support setting the disassembler style
> 
> Arnaldo Carvalho de Melo (6):
>   perf symbols: Stop using 'self' in map_groups__ methods
>   perf buildid-list: Add option to show the running kernel build id
>   perf buildid-list: Support showing the build id in an ELF file
>   perf top browser: Fix up line width calculation
>   perf top: Improve lost events warning
>   perf report: Fix stdio event name header printing
> 
> Jim Cromie (5):
>   perf stat: Add --log-fd <N> option to redirect stderr elsewhere
>   perf stat: Fix +- nan% in --no-aggr runs
>   perf stat: Suppress printing std-dev when its 0
>   perf stat: Allow tab as cvs delimiter
>   perf stat: Fix spelling in comment
> 
> Jiri Olsa (2):
>   perf sched: Fix script command documentation
>   perf symbols: Treat all memory maps without dso file as loaded
> 
> Neil Horman (1):
>   perf script: Add drop monitor script
> 
>  tools/perf/Documentation/perf-annotate.txt         |    3 +
>  tools/perf/Documentation/perf-buildid-list.txt     |    6 +
>  tools/perf/Documentation/perf-report.txt           |    3 +
>  tools/perf/Documentation/perf-sched.txt            |    6 +-
>  tools/perf/Documentation/perf-stat.txt             |   11 ++-
>  tools/perf/builtin-annotate.c                      |    2 +
>  tools/perf/builtin-buildid-list.c                  |   52 ++++++++++-
>  tools/perf/builtin-record.c                        |   19 ++++-
>  tools/perf/builtin-report.c                        |    7 +-
>  tools/perf/builtin-stat.c                          |   35 ++++++-
>  tools/perf/builtin-top.c                           |   34 ++++----
>  .../perf/scripts/python/bin/net_dropmonitor-record |    2 +
>  .../perf/scripts/python/bin/net_dropmonitor-report |    4 +
>  tools/perf/scripts/python/net_dropmonitor.py       |   72 ++++++++++++++
>  tools/perf/util/annotate.c                         |    6 +-
>  tools/perf/util/annotate.h                         |    2 +
>  tools/perf/util/map.c                              |   98 +++++++++++---------
>  tools/perf/util/map.h                              |   42 ++++----
>  tools/perf/util/top.h                              |    3 +
>  tools/perf/util/ui/browsers/top.c                  |   28 +++++-
>  20 files changed, 333 insertions(+), 102 deletions(-)
>  create mode 100755 tools/perf/scripts/python/bin/net_dropmonitor-record
>  create mode 100755 tools/perf/scripts/python/bin/net_dropmonitor-report
>  create mode 100755 tools/perf/scripts/python/net_dropmonitor.py

Pulled, thanks a lot Arnaldo!

	Ingo

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

* [GIT PULL 00/16] perf/core improvements and fixes
@ 2011-09-29 22:47 Arnaldo Carvalho de Melo
  2011-10-04  7:57 ` Ingo Molnar
  0 siblings, 1 reply; 58+ messages in thread
From: Arnaldo Carvalho de Melo @ 2011-09-29 22:47 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Andi Kleen, David Ahern,
	Frederic Weisbecker, Jim Cromie, Jiri Olsa, Mike Galbraith,
	Neil Horman, Paul Mackerras, Peter Zijlstra, Stephane Eranian,
	Thomas Gleixner, arnaldo.melo

Hi Ingo,

        Please consider pulling from:

git://github.com/acmel/linux.git perf/core

	This was rebased against your perf/core on tesla.

Regards,

- Arnaldo

Andi Kleen (2):
  perf tools: Make stat/record print fatal signals of the target program
  perf: Support setting the disassembler style

Arnaldo Carvalho de Melo (6):
  perf symbols: Stop using 'self' in map_groups__ methods
  perf buildid-list: Add option to show the running kernel build id
  perf buildid-list: Support showing the build id in an ELF file
  perf top browser: Fix up line width calculation
  perf top: Improve lost events warning
  perf report: Fix stdio event name header printing

Jim Cromie (5):
  perf stat: Add --log-fd <N> option to redirect stderr elsewhere
  perf stat: Fix +- nan% in --no-aggr runs
  perf stat: Suppress printing std-dev when its 0
  perf stat: Allow tab as cvs delimiter
  perf stat: Fix spelling in comment

Jiri Olsa (2):
  perf sched: Fix script command documentation
  perf symbols: Treat all memory maps without dso file as loaded

Neil Horman (1):
  perf script: Add drop monitor script

 tools/perf/Documentation/perf-annotate.txt         |    3 +
 tools/perf/Documentation/perf-buildid-list.txt     |    6 +
 tools/perf/Documentation/perf-report.txt           |    3 +
 tools/perf/Documentation/perf-sched.txt            |    6 +-
 tools/perf/Documentation/perf-stat.txt             |   11 ++-
 tools/perf/builtin-annotate.c                      |    2 +
 tools/perf/builtin-buildid-list.c                  |   52 ++++++++++-
 tools/perf/builtin-record.c                        |   19 ++++-
 tools/perf/builtin-report.c                        |    7 +-
 tools/perf/builtin-stat.c                          |   35 ++++++-
 tools/perf/builtin-top.c                           |   34 ++++----
 .../perf/scripts/python/bin/net_dropmonitor-record |    2 +
 .../perf/scripts/python/bin/net_dropmonitor-report |    4 +
 tools/perf/scripts/python/net_dropmonitor.py       |   72 ++++++++++++++
 tools/perf/util/annotate.c                         |    6 +-
 tools/perf/util/annotate.h                         |    2 +
 tools/perf/util/map.c                              |   98 +++++++++++---------
 tools/perf/util/map.h                              |   42 ++++----
 tools/perf/util/top.h                              |    3 +
 tools/perf/util/ui/browsers/top.c                  |   28 +++++-
 20 files changed, 333 insertions(+), 102 deletions(-)
 create mode 100755 tools/perf/scripts/python/bin/net_dropmonitor-record
 create mode 100755 tools/perf/scripts/python/bin/net_dropmonitor-report
 create mode 100755 tools/perf/scripts/python/net_dropmonitor.py


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

end of thread, other threads:[~2019-01-08 15:32 UTC | newest]

Thread overview: 58+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-08-25 16:14 [GIT PULL 00/16] perf/core improvements and fixes Arnaldo Carvalho de Melo
2015-08-25 16:14 ` [PATCH 01/16] perf tools: Fix tarball build broken by pt/bts Arnaldo Carvalho de Melo
2015-08-25 16:14 ` [PATCH 02/16] perf annotate: Reset the dso find_symbol cache when removing symbols Arnaldo Carvalho de Melo
2015-08-25 16:14 ` [PATCH 03/16] perf ui tui progress: Implement the ui_progress_ops->finish() method Arnaldo Carvalho de Melo
2015-08-25 16:14 ` [PATCH 04/16] perf ordered_events: Clear the progress bar at the end of a flush Arnaldo Carvalho de Melo
2015-08-25 16:14 ` [PATCH 05/16] perf tools: Fix Intel PT 'instructions' sample period Arnaldo Carvalho de Melo
2015-08-25 16:14 ` [PATCH 06/16] perf tools: Add Intel PT support for PSB periods Arnaldo Carvalho de Melo
2015-08-25 16:14 ` [PATCH 07/16] perf tools: Add new Intel PT packet definitions Arnaldo Carvalho de Melo
2015-08-25 16:14 ` [PATCH 08/16] perf tools: Pass Intel PT information for decoding MTC and CYC Arnaldo Carvalho de Melo
2015-08-25 16:14 ` [PATCH 09/16] perf tools: Add Intel PT support for decoding MTC packets Arnaldo Carvalho de Melo
2015-08-25 16:14 ` [PATCH 10/16] perf tools: Add Intel PT support for using " Arnaldo Carvalho de Melo
2015-08-25 16:14 ` [PATCH 11/16] perf tools: Add Intel PT support for decoding CYC packets Arnaldo Carvalho de Melo
2015-08-25 16:14 ` [PATCH 12/16] perf tools: Add Intel PT support for using " Arnaldo Carvalho de Melo
2015-08-25 16:14 ` [PATCH 13/16] perf tools: Add Intel PT support for decoding TRACESTOP packets Arnaldo Carvalho de Melo
2015-08-25 16:14 ` [PATCH 14/16] perf tools: Update Intel PT documentation Arnaldo Carvalho de Melo
2015-08-25 16:14 ` [PATCH 15/16] perf probe: Prevent segfault when reading probe point with absolute address Arnaldo Carvalho de Melo
2015-08-25 16:14 ` [PATCH 16/16] perf probe: Support probing at absolute addresses Arnaldo Carvalho de Melo
2015-08-26  0:00   ` 平松雅巳 / HIRAMATU,MASAMI
2015-08-26 12:58     ` Arnaldo Carvalho de Melo
2015-08-26 13:39 ` [GIT PULL 00/16] perf/core improvements and fixes Arnaldo Carvalho de Melo
  -- strict thread matches above, loose matches on Subject: below --
2019-01-04 18:33 Arnaldo Carvalho de Melo
2019-01-08 15:32 ` Ingo Molnar
2016-07-05  0:38 Arnaldo Carvalho de Melo
2016-07-05 10:14 ` Ingo Molnar
2016-01-29 21:17 Arnaldo Carvalho de Melo
2016-02-03 10:02 ` Ingo Molnar
2015-12-14 17:44 Arnaldo Carvalho de Melo
2015-10-05 21:03 Arnaldo Carvalho de Melo
2015-10-06  7:09 ` Ingo Molnar
2015-09-30 21:54 Arnaldo Carvalho de Melo
2015-10-01  7:05 ` Ingo Molnar
2015-04-07 16:40 Arnaldo Carvalho de Melo
2014-11-19 16:03 Arnaldo Carvalho de Melo
2014-11-20  7:33 ` Ingo Molnar
2014-08-22 16:29 Arnaldo Carvalho de Melo
2014-08-24 10:11 ` Ingo Molnar
2014-08-24 11:16   ` Arnaldo Carvalho de Melo
2014-08-24 14:47     ` Ingo Molnar
2014-03-14 21:29 Arnaldo Carvalho de Melo
2014-03-18  8:24 ` Ingo Molnar
2013-11-18 20:27 Arnaldo Carvalho de Melo
2013-10-23 20:57 Arnaldo Carvalho de Melo
2013-10-24  6:52 ` Ingo Molnar
2012-02-14  1:52 Arnaldo Carvalho de Melo
2012-02-14  2:50 ` Namhyung Kim
2012-02-14  3:07   ` Namhyung Kim
2012-02-14  5:10     ` Namhyung Kim
2012-02-14  5:23       ` David Ahern
2012-02-14  5:48         ` Namhyung Kim
2012-02-14  5:52           ` David Ahern
2012-02-14  5:58             ` Namhyung Kim
2012-02-14 10:50         ` Joerg Roedel
2012-02-14 13:10           ` Arnaldo Carvalho de Melo
2012-02-14 14:38             ` Arnaldo Carvalho de Melo
2012-02-14 15:10               ` Joerg Roedel
2012-02-14 16:11                 ` Arnaldo Carvalho de Melo
2011-09-29 22:47 Arnaldo Carvalho de Melo
2011-10-04  7:57 ` Ingo Molnar

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).