linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [GIT PULL 00/15] perf/core improvements and fixes
@ 2015-04-02 22:28 Arnaldo Carvalho de Melo
  2015-04-02 22:28 ` [PATCH 01/15] perf script: No need to lookup thread twice Arnaldo Carvalho de Melo
                   ` (15 more replies)
  0 siblings, 16 replies; 17+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-02 22:28 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Borislav Petkov, David Ahern, Don Zickus, Frederic Weisbecker,
	Jiri Olsa, Masami Hiramatsu, Namhyung Kim, Paul Mackerras,
	Peter Zijlstra, Stephane Eranian, Wang Nan, Yunlong Song,
	Arnaldo Carvalho de Melo

Hi Ingo,

	Please consider pulling,

- Arnaldo

The following changes since commit e1abf2cc8d5d80b41c4419368ec743ccadbb131e:

  bpf: Fix the build on BPF_SYSCALL=y && !CONFIG_TRACING kernels, make it more configurable (2015-04-02 16:28:06 +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 bd05954bfa17f03a7bd4454178ba09786b35e383:

  perf data: Support using -f to override perf.data file ownership for 'convert' (2015-04-02 13:18:52 -0300)

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

User visible:

- Support unnamed union/structure members data collection in 'perf probe' (Masami Hiramatsu)

- Support missing -f to override perf.data file ownership (Yunlong Song)

Infrastructure:

- No need to lookup thread twice when processing samples in 'perf script' (Arnaldo Carvalho de Melo)

- No need to pass thread twice to the scripting callbacks (Arnaldo Carvalho de Melo)

- No need to pass thread twice to the db-export facility (Arnaldo Carvalho de Melo)

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

----------------------------------------------------------------
Arnaldo Carvalho de Melo (4):
      perf script: No need to lookup thread twice
      perf scripting: No need to pass thread twice to the scripting callbacks
      perf db-export: No need to pass thread twice to db_export__sample
      perf db-export: No need to have ->thread twice in struct export_sample

Masami Hiramatsu (1):
      perf probe: Fix to track down unnamed union/structure members

Yunlong Song (10):
      perf evlist: Support using -f to override perf.data file ownership
      perf inject: Support using -f to override perf.data file ownership
      perf kmem: Support using -f to override perf.data file ownership
      perf kvm: Support using -f to override perf.data.guest file ownership
      perf lock: Support using -f to override perf.data file ownership
      perf mem: Support using -f to override perf.data file ownership
      perf script: Support using -f to override perf.data file ownership
      perf timechart: Support using -f to override perf.data file ownership
      perf trace: Support using -f to override perf.data file ownership
      perf data: Support using -f to override perf.data file ownership for 'convert'

 tools/perf/builtin-data.c                          |  4 +++-
 tools/perf/builtin-evlist.c                        |  2 ++
 tools/perf/builtin-inject.c                        |  1 +
 tools/perf/builtin-kmem.c                          |  9 +++++----
 tools/perf/builtin-kvm.c                           |  2 ++
 tools/perf/builtin-lock.c                          |  5 +++++
 tools/perf/builtin-mem.c                           |  3 +++
 tools/perf/builtin-script.c                        | 23 ++++++++--------------
 tools/perf/builtin-timechart.c                     |  3 +++
 tools/perf/builtin-trace.c                         |  3 +++
 tools/perf/util/data-convert-bt.c                  |  3 ++-
 tools/perf/util/data-convert-bt.h                  |  2 +-
 tools/perf/util/db-export.c                        |  4 ++--
 tools/perf/util/db-export.h                        |  3 +--
 tools/perf/util/dwarf-aux.c                        | 14 +++++++++----
 tools/perf/util/evsel.h                            |  1 +
 tools/perf/util/kvm-stat.h                         |  1 +
 tools/perf/util/probe-finder.c                     |  8 +++++++-
 .../perf/util/scripting-engines/trace-event-perl.c |  5 ++---
 .../util/scripting-engines/trace-event-python.c    | 16 ++++++---------
 tools/perf/util/trace-event-scripting.c            |  1 -
 tools/perf/util/trace-event.h                      |  3 +--
 22 files changed, 69 insertions(+), 47 deletions(-)

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

* [PATCH 01/15] perf script: No need to lookup thread twice
  2015-04-02 22:28 [GIT PULL 00/15] perf/core improvements and fixes Arnaldo Carvalho de Melo
@ 2015-04-02 22:28 ` Arnaldo Carvalho de Melo
  2015-04-02 22:28 ` [PATCH 02/15] perf scripting: No need to pass thread twice to the scripting callbacks Arnaldo Carvalho de Melo
                   ` (14 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-02 22:28 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Borislav Petkov, David Ahern, Don Zickus, Frederic Weisbecker,
	Stephane Eranian

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

We get the thread when we call perf_event__preprocess_sample(), no need
to do it before that.

Acked-by: Jiri Olsa <jolsa@redhat.com>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Don Zickus <dzickus@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1427906210-10519-2-git-send-email-acme@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-script.c | 10 +---------
 1 file changed, 1 insertion(+), 9 deletions(-)

diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
index 662366ceb572..c286b49c81b2 100644
--- a/tools/perf/builtin-script.c
+++ b/tools/perf/builtin-script.c
@@ -549,14 +549,6 @@ static int process_sample_event(struct perf_tool *tool __maybe_unused,
 				struct machine *machine)
 {
 	struct addr_location al;
-	struct thread *thread = machine__findnew_thread(machine, sample->pid,
-							sample->tid);
-
-	if (thread == NULL) {
-		pr_debug("problem processing %d event, skipping it.\n",
-			 event->header.type);
-		return -1;
-	}
 
 	if (debug_mode) {
 		if (sample->time < last_timestamp) {
@@ -581,7 +573,7 @@ static int process_sample_event(struct perf_tool *tool __maybe_unused,
 	if (cpu_list && !test_bit(sample->cpu, cpu_bitmap))
 		return 0;
 
-	scripting_ops->process_event(event, sample, evsel, thread, &al);
+	scripting_ops->process_event(event, sample, evsel, al.thread, &al);
 
 	return 0;
 }
-- 
1.9.3


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

* [PATCH 02/15] perf scripting: No need to pass thread twice to the scripting callbacks
  2015-04-02 22:28 [GIT PULL 00/15] perf/core improvements and fixes Arnaldo Carvalho de Melo
  2015-04-02 22:28 ` [PATCH 01/15] perf script: No need to lookup thread twice Arnaldo Carvalho de Melo
@ 2015-04-02 22:28 ` Arnaldo Carvalho de Melo
  2015-04-02 22:28 ` [PATCH 03/15] perf db-export: No need to pass thread twice to db_export__sample Arnaldo Carvalho de Melo
                   ` (13 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-02 22:28 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Borislav Petkov, David Ahern, Don Zickus, Frederic Weisbecker,
	Stephane Eranian

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

It is already in the addr_location, so remove the redundant 'thread'
parameter from the callback signatures.

Acked-by: Jiri Olsa <jolsa@redhat.com>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Don Zickus <dzickus@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1427906210-10519-3-git-send-email-acme@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-script.c                            |  6 +++---
 tools/perf/util/scripting-engines/trace-event-perl.c   |  5 ++---
 tools/perf/util/scripting-engines/trace-event-python.c | 13 +++++--------
 tools/perf/util/trace-event-scripting.c                |  1 -
 tools/perf/util/trace-event.h                          |  3 +--
 5 files changed, 11 insertions(+), 17 deletions(-)

diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
index c286b49c81b2..257dd066cb1a 100644
--- a/tools/perf/builtin-script.c
+++ b/tools/perf/builtin-script.c
@@ -446,9 +446,9 @@ static void print_sample_bts(union perf_event *event,
 }
 
 static void process_event(union perf_event *event, struct perf_sample *sample,
-			  struct perf_evsel *evsel, struct thread *thread,
-			  struct addr_location *al)
+			  struct perf_evsel *evsel, struct addr_location *al)
 {
+	struct thread *thread = al->thread;
 	struct perf_event_attr *attr = &evsel->attr;
 
 	if (output[attr->type].fields == 0)
@@ -573,7 +573,7 @@ static int process_sample_event(struct perf_tool *tool __maybe_unused,
 	if (cpu_list && !test_bit(sample->cpu, cpu_bitmap))
 		return 0;
 
-	scripting_ops->process_event(event, sample, evsel, al.thread, &al);
+	scripting_ops->process_event(event, sample, evsel, &al);
 
 	return 0;
 }
diff --git a/tools/perf/util/scripting-engines/trace-event-perl.c b/tools/perf/util/scripting-engines/trace-event-perl.c
index 8171fed4136e..430b5d27828e 100644
--- a/tools/perf/util/scripting-engines/trace-event-perl.c
+++ b/tools/perf/util/scripting-engines/trace-event-perl.c
@@ -360,10 +360,9 @@ static void perl_process_event_generic(union perf_event *event,
 static void perl_process_event(union perf_event *event,
 			       struct perf_sample *sample,
 			       struct perf_evsel *evsel,
-			       struct thread *thread,
-			       struct addr_location *al __maybe_unused)
+			       struct addr_location *al)
 {
-	perl_process_tracepoint(sample, evsel, thread);
+	perl_process_tracepoint(sample, evsel, al->thread);
 	perl_process_event_generic(event, sample, evsel);
 }
 
diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c
index 2ec5dfb5a456..de8df1d5e1bd 100644
--- a/tools/perf/util/scripting-engines/trace-event-python.c
+++ b/tools/perf/util/scripting-engines/trace-event-python.c
@@ -381,7 +381,6 @@ exit:
 
 static void python_process_tracepoint(struct perf_sample *sample,
 				      struct perf_evsel *evsel,
-				      struct thread *thread,
 				      struct addr_location *al)
 {
 	struct event_format *event = evsel->tp_format;
@@ -395,7 +394,7 @@ static void python_process_tracepoint(struct perf_sample *sample,
 	int cpu = sample->cpu;
 	void *data = sample->raw_data;
 	unsigned long long nsecs = sample->time;
-	const char *comm = thread__comm_str(thread);
+	const char *comm = thread__comm_str(al->thread);
 
 	t = PyTuple_New(MAX_FIELDS);
 	if (!t)
@@ -766,7 +765,6 @@ static int python_process_call_return(struct call_return *cr, void *data)
 
 static void python_process_general_event(struct perf_sample *sample,
 					 struct perf_evsel *evsel,
-					 struct thread *thread,
 					 struct addr_location *al)
 {
 	PyObject *handler, *t, *dict, *callchain, *dict_sample;
@@ -816,7 +814,7 @@ static void python_process_general_event(struct perf_sample *sample,
 	pydict_set_item_string_decref(dict, "raw_buf", PyString_FromStringAndSize(
 			(const char *)sample->raw_data, sample->raw_size));
 	pydict_set_item_string_decref(dict, "comm",
-			PyString_FromString(thread__comm_str(thread)));
+			PyString_FromString(thread__comm_str(al->thread)));
 	if (al->map) {
 		pydict_set_item_string_decref(dict, "dso",
 			PyString_FromString(al->map->dso->name));
@@ -843,22 +841,21 @@ exit:
 static void python_process_event(union perf_event *event,
 				 struct perf_sample *sample,
 				 struct perf_evsel *evsel,
-				 struct thread *thread,
 				 struct addr_location *al)
 {
 	struct tables *tables = &tables_global;
 
 	switch (evsel->attr.type) {
 	case PERF_TYPE_TRACEPOINT:
-		python_process_tracepoint(sample, evsel, thread, al);
+		python_process_tracepoint(sample, evsel, al);
 		break;
 	/* Reserve for future process_hw/sw/raw APIs */
 	default:
 		if (tables->db_export_mode)
 			db_export__sample(&tables->dbe, event, sample, evsel,
-					  thread, al);
+					  al->thread, al);
 		else
-			python_process_general_event(sample, evsel, thread, al);
+			python_process_general_event(sample, evsel, al);
 	}
 }
 
diff --git a/tools/perf/util/trace-event-scripting.c b/tools/perf/util/trace-event-scripting.c
index 5c9bdd1591a9..9df61059a85d 100644
--- a/tools/perf/util/trace-event-scripting.c
+++ b/tools/perf/util/trace-event-scripting.c
@@ -43,7 +43,6 @@ static int stop_script_unsupported(void)
 static void process_event_unsupported(union perf_event *event __maybe_unused,
 				      struct perf_sample *sample __maybe_unused,
 				      struct perf_evsel *evsel __maybe_unused,
-				      struct thread *thread __maybe_unused,
 				      struct addr_location *al __maybe_unused)
 {
 }
diff --git a/tools/perf/util/trace-event.h b/tools/perf/util/trace-event.h
index 356629a30ca9..d5168f0be4ec 100644
--- a/tools/perf/util/trace-event.h
+++ b/tools/perf/util/trace-event.h
@@ -72,8 +72,7 @@ struct scripting_ops {
 	void (*process_event) (union perf_event *event,
 			       struct perf_sample *sample,
 			       struct perf_evsel *evsel,
-			       struct thread *thread,
-				   struct addr_location *al);
+			       struct addr_location *al);
 	int (*generate_script) (struct pevent *pevent, const char *outfile);
 };
 
-- 
1.9.3


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

* [PATCH 03/15] perf db-export: No need to pass thread twice to db_export__sample
  2015-04-02 22:28 [GIT PULL 00/15] perf/core improvements and fixes Arnaldo Carvalho de Melo
  2015-04-02 22:28 ` [PATCH 01/15] perf script: No need to lookup thread twice Arnaldo Carvalho de Melo
  2015-04-02 22:28 ` [PATCH 02/15] perf scripting: No need to pass thread twice to the scripting callbacks Arnaldo Carvalho de Melo
@ 2015-04-02 22:28 ` Arnaldo Carvalho de Melo
  2015-04-02 22:28 ` [PATCH 04/15] perf db-export: No need to have ->thread twice in struct export_sample Arnaldo Carvalho de Melo
                   ` (12 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-02 22:28 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Borislav Petkov,
	David Ahern, Don Zickus, Frederic Weisbecker, Jiri Olsa,
	Namhyung Kim, Stephane Eranian

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

As it is available via another parameter, address_location->thread.

Acked-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Don Zickus <dzickus@redhat.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: lkml.kernel.org/r/551D08F8.3040706@intel.com
Link: http://lkml.kernel.org/n/tip-6dbn0tcm9hyv92g7h3zj2dbt@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/db-export.c                            | 3 ++-
 tools/perf/util/db-export.h                            | 2 +-
 tools/perf/util/scripting-engines/trace-event-python.c | 3 +--
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/tools/perf/util/db-export.c b/tools/perf/util/db-export.c
index c81dae399763..5499887edc46 100644
--- a/tools/perf/util/db-export.c
+++ b/tools/perf/util/db-export.c
@@ -282,8 +282,9 @@ int db_export__branch_type(struct db_export *dbe, u32 branch_type,
 
 int db_export__sample(struct db_export *dbe, union perf_event *event,
 		      struct perf_sample *sample, struct perf_evsel *evsel,
-		      struct thread *thread, struct addr_location *al)
+		      struct addr_location *al)
 {
+	struct thread* thread = al->thread;
 	struct export_sample es = {
 		.event = event,
 		.sample = sample,
diff --git a/tools/perf/util/db-export.h b/tools/perf/util/db-export.h
index adbd22d66798..b9faa1386cf4 100644
--- a/tools/perf/util/db-export.h
+++ b/tools/perf/util/db-export.h
@@ -97,7 +97,7 @@ int db_export__branch_type(struct db_export *dbe, u32 branch_type,
 			   const char *name);
 int db_export__sample(struct db_export *dbe, union perf_event *event,
 		      struct perf_sample *sample, struct perf_evsel *evsel,
-		      struct thread *thread, struct addr_location *al);
+		      struct addr_location *al);
 
 int db_export__branch_types(struct db_export *dbe);
 
diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c
index de8df1d5e1bd..1d3cc1b01731 100644
--- a/tools/perf/util/scripting-engines/trace-event-python.c
+++ b/tools/perf/util/scripting-engines/trace-event-python.c
@@ -852,8 +852,7 @@ static void python_process_event(union perf_event *event,
 	/* Reserve for future process_hw/sw/raw APIs */
 	default:
 		if (tables->db_export_mode)
-			db_export__sample(&tables->dbe, event, sample, evsel,
-					  al->thread, al);
+			db_export__sample(&tables->dbe, event, sample, evsel, al);
 		else
 			python_process_general_event(sample, evsel, al);
 	}
-- 
1.9.3


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

* [PATCH 04/15] perf db-export: No need to have ->thread twice in struct export_sample
  2015-04-02 22:28 [GIT PULL 00/15] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (2 preceding siblings ...)
  2015-04-02 22:28 ` [PATCH 03/15] perf db-export: No need to pass thread twice to db_export__sample Arnaldo Carvalho de Melo
@ 2015-04-02 22:28 ` Arnaldo Carvalho de Melo
  2015-04-02 22:28 ` [PATCH 05/15] perf probe: Fix to track down unnamed union/structure members Arnaldo Carvalho de Melo
                   ` (11 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-02 22:28 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Borislav Petkov, David Ahern, Don Zickus, Frederic Weisbecker,
	Jiri Olsa, Namhyung Kim, Stephane Eranian

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

As it comes from address_location->thread, that is already stored as
export_sample->al, where the thread can be obtained.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Don Zickus <dzickus@redhat.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/r/20150402141542.GA9630@kernel.org
Link: http://lkml.kernel.org/n/tip-bzotbl4epoztw0jd6sm2stpf@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/db-export.c                            | 1 -
 tools/perf/util/db-export.h                            | 1 -
 tools/perf/util/scripting-engines/trace-event-python.c | 2 +-
 3 files changed, 1 insertion(+), 3 deletions(-)

diff --git a/tools/perf/util/db-export.c b/tools/perf/util/db-export.c
index 5499887edc46..bb39a3ffc70b 100644
--- a/tools/perf/util/db-export.c
+++ b/tools/perf/util/db-export.c
@@ -289,7 +289,6 @@ int db_export__sample(struct db_export *dbe, union perf_event *event,
 		.event = event,
 		.sample = sample,
 		.evsel = evsel,
-		.thread = thread,
 		.al = al,
 	};
 	struct thread *main_thread;
diff --git a/tools/perf/util/db-export.h b/tools/perf/util/db-export.h
index b9faa1386cf4..25e22fd76aca 100644
--- a/tools/perf/util/db-export.h
+++ b/tools/perf/util/db-export.h
@@ -34,7 +34,6 @@ struct export_sample {
 	union perf_event	*event;
 	struct perf_sample	*sample;
 	struct perf_evsel	*evsel;
-	struct thread		*thread;
 	struct addr_location	*al;
 	u64			db_id;
 	u64			comm_db_id;
diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c
index 1d3cc1b01731..5544b8cdd1ee 100644
--- a/tools/perf/util/scripting-engines/trace-event-python.c
+++ b/tools/perf/util/scripting-engines/trace-event-python.c
@@ -679,7 +679,7 @@ static int python_export_sample(struct db_export *dbe,
 	tuple_set_u64(t, 0, es->db_id);
 	tuple_set_u64(t, 1, es->evsel->db_id);
 	tuple_set_u64(t, 2, es->al->machine->db_id);
-	tuple_set_u64(t, 3, es->thread->db_id);
+	tuple_set_u64(t, 3, es->al->thread->db_id);
 	tuple_set_u64(t, 4, es->comm_db_id);
 	tuple_set_u64(t, 5, es->dso_db_id);
 	tuple_set_u64(t, 6, es->sym_db_id);
-- 
1.9.3


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

* [PATCH 05/15] perf probe: Fix to track down unnamed union/structure members
  2015-04-02 22:28 [GIT PULL 00/15] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (3 preceding siblings ...)
  2015-04-02 22:28 ` [PATCH 04/15] perf db-export: No need to have ->thread twice in struct export_sample Arnaldo Carvalho de Melo
@ 2015-04-02 22:28 ` Arnaldo Carvalho de Melo
  2015-04-02 22:28 ` [PATCH 06/15] perf evlist: Support using -f to override perf.data file ownership Arnaldo Carvalho de Melo
                   ` (10 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-02 22:28 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Masami Hiramatsu, David Ahern, Jiri Olsa,
	Namhyung Kim, Peter Zijlstra, Arnaldo Carvalho de Melo

From: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>

Fix 'perf probe' to track down unnamed union/structure members.

perf probe did not track down the tree of unnamed union/structure
members, since it just failed to find given "name" in a parent
structure/union.  To solve this issue, I've introduced 2 changes.

- Fix die_find_member() to track down the type-DIE if it is
  unnamed, and if it contains the specified member, returns the
  unnamed member.
  (note that we don't return found member, since unnamed member
   has the offset in the parent structure)
- Fix convert_variable_fields() to track down the unnamed union/
  structure (one-by-one).

With this patch, perf probe can access unnamed fields:
  -----
  #./perf probe -nfx ./perf lock__delete ops 'locked_ops=ops->locked.ops'
  Added new event:
    probe_perf:lock__delete (on lock__delete in /home/mhiramat/ksrc/linux-3/tools/perf/perf with ops locked_ops=ops->locked.ops)

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

          perf record -e probe_perf:lock__delete -aR sleep 1
  -----

Reported-by: Arnaldo Carvalho de Melo <acme@kernel.org>
Report-Link: https://lkml.org/lkml/2015/3/5/431
Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20150402073312.14482.37942.stgit@localhost.localdomain
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/dwarf-aux.c    | 14 ++++++++++----
 tools/perf/util/probe-finder.c |  8 +++++++-
 2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c
index 780b2bc11128..c34e024020c7 100644
--- a/tools/perf/util/dwarf-aux.c
+++ b/tools/perf/util/dwarf-aux.c
@@ -801,10 +801,16 @@ static int __die_find_member_cb(Dwarf_Die *die_mem, void *data)
 {
 	const char *name = data;
 
-	if ((dwarf_tag(die_mem) == DW_TAG_member) &&
-	    die_compare_name(die_mem, name))
-		return DIE_FIND_CB_END;
-
+	if (dwarf_tag(die_mem) == DW_TAG_member) {
+		if (die_compare_name(die_mem, name))
+			return DIE_FIND_CB_END;
+		else if (!dwarf_diename(die_mem)) {	/* Unnamed structure */
+			Dwarf_Die type_die, tmp_die;
+			if (die_get_type(die_mem, &type_die) &&
+			    die_find_member(&type_die, name, &tmp_die))
+				return DIE_FIND_CB_END;
+		}
+	}
 	return DIE_FIND_CB_SIBLING;
 }
 
diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c
index 46f009aa486c..7831e2d93949 100644
--- a/tools/perf/util/probe-finder.c
+++ b/tools/perf/util/probe-finder.c
@@ -460,7 +460,8 @@ static int convert_variable_fields(Dwarf_Die *vr_die, const char *varname,
 			       " nor array.\n", varname);
 			return -EINVAL;
 		}
-		if (field->ref) {
+		/* While prcessing unnamed field, we don't care about this */
+		if (field->ref && dwarf_diename(vr_die)) {
 			pr_err("Semantic error: %s must be referred by '.'\n",
 			       field->name);
 			return -EINVAL;
@@ -491,6 +492,11 @@ static int convert_variable_fields(Dwarf_Die *vr_die, const char *varname,
 	}
 	ref->offset += (long)offs;
 
+	/* If this member is unnamed, we need to reuse this field */
+	if (!dwarf_diename(die_mem))
+		return convert_variable_fields(die_mem, varname, field,
+						&ref, die_mem);
+
 next:
 	/* Converting next field */
 	if (field->next)
-- 
1.9.3


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

* [PATCH 06/15] perf evlist: Support using -f to override perf.data file ownership
  2015-04-02 22:28 [GIT PULL 00/15] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (4 preceding siblings ...)
  2015-04-02 22:28 ` [PATCH 05/15] perf probe: Fix to track down unnamed union/structure members Arnaldo Carvalho de Melo
@ 2015-04-02 22:28 ` Arnaldo Carvalho de Melo
  2015-04-02 22:28 ` [PATCH 07/15] perf inject: " Arnaldo Carvalho de Melo
                   ` (9 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-02 22:28 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Yunlong Song, Paul Mackerras, Peter Zijlstra,
	Wang Nan, Arnaldo Carvalho de Melo

From: Yunlong Song <yunlong.song@huawei.com>

Enable perf evlist to use perf.data when it is not owned by current user
or root.

Example:

 # perf record ls
 # chown Yunlong.Song:Yunlong.Song perf.data
 # ls -al perf.data
 -rw------- 1 Yunlong.Song Yunlong.Song 28260 Apr  2 10:18 perf.data
 # id
 uid=0(root) gid=0(root) groups=0(root),64(pkcs11)

Before this patch:

 # perf evlist
 File perf.data not owned by current user or root (use -f to override)
 # perf evlist -f
   Error: unknown switch `f'

  usage: perf evlist [<options>]

     -i, --input <file>    Input file name
     -F, --freq            Show the sample frequency
     -v, --verbose         Show all event attr details
     -g, --group           Show event group information

As shown above, the -f option does not work at all.

After this patch:

 # perf evlist
 File perf.data not owned by current user or root (use -f to override)
 # perf evlist -f
 cycles

As shown above, the -f option really works now.

Signed-off-by: Yunlong Song <yunlong.song@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1427982439-27388-2-git-send-email-yunlong.song@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-evlist.c | 2 ++
 tools/perf/util/evsel.h     | 1 +
 2 files changed, 3 insertions(+)

diff --git a/tools/perf/builtin-evlist.c b/tools/perf/builtin-evlist.c
index 0f93f859b782..695ec5a50cf2 100644
--- a/tools/perf/builtin-evlist.c
+++ b/tools/perf/builtin-evlist.c
@@ -24,6 +24,7 @@ static int __cmd_evlist(const char *file_name, struct perf_attr_details *details
 	struct perf_data_file file = {
 		.path = file_name,
 		.mode = PERF_DATA_MODE_READ,
+		.force = details->force,
 	};
 
 	session = perf_session__new(&file, 0, NULL);
@@ -47,6 +48,7 @@ int cmd_evlist(int argc, const char **argv, const char *prefix __maybe_unused)
 		    "Show all event attr details"),
 	OPT_BOOLEAN('g', "group", &details.event_group,
 		    "Show event group information"),
+	OPT_BOOLEAN('f', "force", &details.force, "don't complain, do it"),
 	OPT_END()
 	};
 	const char * const evlist_usage[] = {
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
index dcf202aebe9f..c5a43d6b13dc 100644
--- a/tools/perf/util/evsel.h
+++ b/tools/perf/util/evsel.h
@@ -335,6 +335,7 @@ struct perf_attr_details {
 	bool freq;
 	bool verbose;
 	bool event_group;
+	bool force;
 };
 
 int perf_evsel__fprintf(struct perf_evsel *evsel,
-- 
1.9.3


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

* [PATCH 07/15] perf inject: Support using -f to override perf.data file ownership
  2015-04-02 22:28 [GIT PULL 00/15] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (5 preceding siblings ...)
  2015-04-02 22:28 ` [PATCH 06/15] perf evlist: Support using -f to override perf.data file ownership Arnaldo Carvalho de Melo
@ 2015-04-02 22:28 ` Arnaldo Carvalho de Melo
  2015-04-02 22:28 ` [PATCH 08/15] perf kmem: " Arnaldo Carvalho de Melo
                   ` (8 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-02 22:28 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Yunlong Song, Paul Mackerras, Peter Zijlstra,
	Wang Nan, Arnaldo Carvalho de Melo

From: Yunlong Song <yunlong.song@huawei.com>

Enable perf inject to use perf.data when it is not owned by current user
or root.

Example:

 # perf record ls
 # chown Yunlong.Song:Yunlong.Song perf.data
 # ls -al perf.data
 -rw------- 1 Yunlong.Song Yunlong.Song 28260 Apr  2 10:37 perf.data
 # id
 uid=0(root) gid=0(root) groups=0(root),64(pkcs11)

Before this patch:

 # perf inject -v -b -i perf.data -o perf.data.new
 File perf.data not owned by current user or root (use -f to override)
 # perf inject -v -b -i perf.data -o perf.data.new -f
   Error: unknown switch `f'

  usage: perf inject [<options>]

     -b, --build-ids       Inject build-ids into the output stream
     -i, --input <file>    input file name
     -o, --output <file>   output file name
     -s, --sched-stat      Merge sched-stat and sched-switch for getting
     events where and how long tasks slept
     -v, --verbose         be more verbose (show build ids, etc)
         --kallsyms <file>
                           kallsyms pathname

As shown above, the -f option does not work at all.

After this patch:

 # perf inject -v -b -i perf.data -o perf.data.new
 File perf.data not owned by current user or root (use -f to override)
 # perf inject -v -b -i perf.data -o perf.data.new -f
 build id event received for [kernel.kallsyms]:
 f6dcb66d8b98f1c0d9eb87bf043444b69f91d30c
 symsrc__init: cannot get elf header.
 Looking at the vmlinux_path (7 entries long)
 Using /proc/kcore for kernel object code
 Using /proc/kallsyms for symbols

As shown above, the -f option really works now.

Signed-off-by: Yunlong Song <yunlong.song@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1427982439-27388-3-git-send-email-yunlong.song@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-inject.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c
index ea46df25368c..40a33d7334cc 100644
--- a/tools/perf/builtin-inject.c
+++ b/tools/perf/builtin-inject.c
@@ -443,6 +443,7 @@ int cmd_inject(int argc, const char **argv, const char *prefix __maybe_unused)
 			 "be more verbose (show build ids, etc)"),
 		OPT_STRING(0, "kallsyms", &symbol_conf.kallsyms_name, "file",
 			   "kallsyms pathname"),
+		OPT_BOOLEAN('f', "force", &file.force, "don't complain, do it"),
 		OPT_END()
 	};
 	const char * const inject_usage[] = {
-- 
1.9.3


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

* [PATCH 08/15] perf kmem: Support using -f to override perf.data file ownership
  2015-04-02 22:28 [GIT PULL 00/15] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (6 preceding siblings ...)
  2015-04-02 22:28 ` [PATCH 07/15] perf inject: " Arnaldo Carvalho de Melo
@ 2015-04-02 22:28 ` Arnaldo Carvalho de Melo
  2015-04-02 22:29 ` [PATCH 09/15] perf kvm: Support using -f to override perf.data.guest " Arnaldo Carvalho de Melo
                   ` (7 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-02 22:28 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Yunlong Song, Paul Mackerras, Peter Zijlstra,
	Wang Nan, Arnaldo Carvalho de Melo

From: Yunlong Song <yunlong.song@huawei.com>

Enable perf kmem to use perf.data when it is not owned by current user
or root.

Example:

 # perf kmem record ls
 # chown Yunlong.Song:Yunlong.Song perf.data
 # ls -al perf.data
 -rw------- 1 Yunlong.Song Yunlong.Song 5315665 Apr  2 10:54 perf.data
 # id
 uid=0(root) gid=0(root) groups=0(root),64(pkcs11)

Before this patch:

 # perf kmem stat
 File perf.data not owned by current user or root (use -f to override)
 # perf kmem stat -f
   Error: unknown switch `f'

  usage: perf kmem [<options>] {record|stat}

     -i, --input <file>    input file name
     -v, --verbose         be more verbose (show symbol address, etc)
         --caller          show per-callsite statistics
         --alloc           show per-allocation statistics
     -s, --sort <key[,key2...]>
                           sort by keys: ptr, call_site, bytes, hit,
                           pingpong, frag
     -l, --line <num>      show n lines
         --raw-ip          show raw ip instead of symbol

As shown above, the -f option does not work at all.

After this patch:

 # perf kmem stat
 File perf.data not owned by current user or root (use -f to override)
 # perf kmem stat -f
 SUMMARY
 =======
 Total bytes requested: 437599
 Total bytes allocated: 615472
 Total bytes wasted on internal fragmentation: 177873
 Internal fragmentation: 28.900259%
 Cross CPU allocations: 6/1192

As shown above, the -f option really works now.

Signed-off-by: Yunlong Song <yunlong.song@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1427982439-27388-4-git-send-email-yunlong.song@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-kmem.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c
index 64d3623d45a0..ac303ef9f2f0 100644
--- a/tools/perf/builtin-kmem.c
+++ b/tools/perf/builtin-kmem.c
@@ -662,6 +662,10 @@ static int __cmd_record(int argc, const char **argv)
 int cmd_kmem(int argc, const char **argv, const char *prefix __maybe_unused)
 {
 	const char * const default_sort_order = "frag,hit,bytes";
+	struct perf_data_file file = {
+		.path = input_name,
+		.mode = PERF_DATA_MODE_READ,
+	};
 	const struct option kmem_options[] = {
 	OPT_STRING('i', "input", &input_name, "file", "input file name"),
 	OPT_INCR('v', "verbose", &verbose,
@@ -675,6 +679,7 @@ int cmd_kmem(int argc, const char **argv, const char *prefix __maybe_unused)
 		     parse_sort_opt),
 	OPT_CALLBACK('l', "line", NULL, "num", "show n lines", parse_line_opt),
 	OPT_BOOLEAN(0, "raw-ip", &raw_ip, "show raw ip instead of symbol"),
+	OPT_BOOLEAN('f', "force", &file.force, "don't complain, do it"),
 	OPT_END()
 	};
 	const char *const kmem_subcommands[] = { "record", "stat", NULL };
@@ -683,10 +688,6 @@ int cmd_kmem(int argc, const char **argv, const char *prefix __maybe_unused)
 		NULL
 	};
 	struct perf_session *session;
-	struct perf_data_file file = {
-		.path = input_name,
-		.mode = PERF_DATA_MODE_READ,
-	};
 	int ret = -1;
 
 	argc = parse_options_subcommand(argc, argv, kmem_options,
-- 
1.9.3


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

* [PATCH 09/15] perf kvm: Support using -f to override perf.data.guest file ownership
  2015-04-02 22:28 [GIT PULL 00/15] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (7 preceding siblings ...)
  2015-04-02 22:28 ` [PATCH 08/15] perf kmem: " Arnaldo Carvalho de Melo
@ 2015-04-02 22:29 ` Arnaldo Carvalho de Melo
  2015-04-02 22:29 ` [PATCH 10/15] perf lock: Support using -f to override perf.data " Arnaldo Carvalho de Melo
                   ` (6 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-02 22:29 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Yunlong Song, Paul Mackerras, Peter Zijlstra,
	Wang Nan, Arnaldo Carvalho de Melo

From: Yunlong Song <yunlong.song@huawei.com>

Enable perf kvm to use perf.data.guest when it is not owned by current
user or root.

Example:

 # perf kvm stat record ls
 # chown Yunlong.Song:Yunlong.Song perf.data.guest
 # ls -al perf.data.guest
 -rw------- 1 Yunlong.Song Yunlong.Song 4128937 Apr  2 11:05 perf.data.guest
 # id
 uid=0(root) gid=0(root) groups=0(root),64(pkcs11)

Before this patch:

 # perf kvm stat report
 File perf.data.guest not owned by current user or root (use -f to override)
 Initializing perf session failed
 # perf kvm stat report -f
   Error: unknown switch `f'

  usage: perf kvm stat report [<options>]

         --event <report event>
                           event for reporting: vmexit, mmio (x86 only),
                           ioport (x86 only)
         --vcpu <n>        vcpu id to report
     -k, --key <sort-key>  key for sorting: sample(sort by samples
 						   number) time (sort by avg time)
     -p, --pid <pid>       analyze events only for given process id(s)

As shown above, the -f option does not work at all.

After this patch:

 # perf kvm stat report
 File perf.data.guest not owned by current user or root (use -f to override)
 Initializing perf session failed
 # perf kvm stat report -f
 Analyze events for all VMs, all VCPUs:

   VM-EXIT    Samples  Samples%     Time%    Min Time    Max Time   Avg time

 Total Samples:0, Total events handled time:0.00us.

As shown above, the -f option really works now. Since we have not
launched any KVM related process, the result shows 0 sample here.

Signed-off-by: Yunlong Song <yunlong.song@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1427982439-27388-5-git-send-email-yunlong.song@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-kvm.c   | 2 ++
 tools/perf/util/kvm-stat.h | 1 +
 2 files changed, 3 insertions(+)

diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c
index 643722f40075..1f9338f6109c 100644
--- a/tools/perf/builtin-kvm.c
+++ b/tools/perf/builtin-kvm.c
@@ -1047,6 +1047,7 @@ static int read_events(struct perf_kvm_stat *kvm)
 	struct perf_data_file file = {
 		.path = kvm->file_name,
 		.mode = PERF_DATA_MODE_READ,
+		.force = kvm->force,
 	};
 
 	kvm->tool = eops;
@@ -1204,6 +1205,7 @@ kvm_events_report(struct perf_kvm_stat *kvm, int argc, const char **argv)
 			    " time (sort by avg time)"),
 		OPT_STRING('p', "pid", &kvm->opts.target.pid, "pid",
 			   "analyze events only for given process id(s)"),
+		OPT_BOOLEAN('f', "force", &kvm->force, "don't complain, do it"),
 		OPT_END()
 	};
 
diff --git a/tools/perf/util/kvm-stat.h b/tools/perf/util/kvm-stat.h
index cf1d7913783b..ae825d4ec110 100644
--- a/tools/perf/util/kvm-stat.h
+++ b/tools/perf/util/kvm-stat.h
@@ -99,6 +99,7 @@ struct perf_kvm_stat {
 	int timerfd;
 	unsigned int display_time;
 	bool live;
+	bool force;
 };
 
 struct kvm_reg_events_ops {
-- 
1.9.3


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

* [PATCH 10/15] perf lock: Support using -f to override perf.data file ownership
  2015-04-02 22:28 [GIT PULL 00/15] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (8 preceding siblings ...)
  2015-04-02 22:29 ` [PATCH 09/15] perf kvm: Support using -f to override perf.data.guest " Arnaldo Carvalho de Melo
@ 2015-04-02 22:29 ` Arnaldo Carvalho de Melo
  2015-04-02 22:29 ` [PATCH 11/15] perf mem: " Arnaldo Carvalho de Melo
                   ` (5 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-02 22:29 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Yunlong Song, Paul Mackerras, Peter Zijlstra,
	Wang Nan, Arnaldo Carvalho de Melo

From: Yunlong Song <yunlong.song@huawei.com>

Enable perf lock to use perf.data when it is not owned by current user
or root.

Example:

 # perf lock record ls
 # chown Yunlong.Song:Yunlong.Song perf.data
 # ls -al perf.data
 -rw------- 1 Yunlong.Song Yunlong.Song 4880686 Apr  2 14:14 perf.data
 # id
 uid=0(root) gid=0(root) groups=0(root),64(pkcs11)

Before this patch:

 # perf lock report
 File perf.data not owned by current user or root (use -f to override)
 Initializing perf session failed
 # perf lock report -f
   Error: unknown switch `f'

  usage: perf lock report [<options>]

     -k, --key <acquired>  key for sorting (acquired / contended /
     avg_wait / wait_total / wait_max / wait_min)

As shown above, the -f option does not work at all.

After this patch:

 # perf lock report
 File perf.data not owned by current user or root (use -f to override)
 Initializing perf session failed
 # perf lock report -f
                Name   acquired  contended   avg wait (ns) total wait (ns) ...

 &ldata->output_l...        128          0               0               0 ...
          &ctx->lock        114          0               0               0 ...
         &p->pi_lock        112          0               0               0 ...
 &(&pool->lock)->...        112          0               0               0 ...
 &(&dentry->d_loc...         70          0               0               0 ...
 &(&newf->file_lo...         62          0               0               0 ...
 &(&fs->lock)->rl...         43          0               0               0 ...
 ...

As shown above, the -f option really works now.

Signed-off-by: Yunlong Song <yunlong.song@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1427982439-27388-6-git-send-email-yunlong.song@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-lock.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/tools/perf/builtin-lock.c b/tools/perf/builtin-lock.c
index 7893a9bba2a7..d49c2ab85fc2 100644
--- a/tools/perf/builtin-lock.c
+++ b/tools/perf/builtin-lock.c
@@ -846,6 +846,8 @@ static const struct perf_evsel_str_handler lock_tracepoints[] = {
 	{ "lock:lock_release",	 perf_evsel__process_lock_release,   }, /* CONFIG_LOCKDEP */
 };
 
+static bool force;
+
 static int __cmd_report(bool display_info)
 {
 	int err = -EINVAL;
@@ -857,6 +859,7 @@ static int __cmd_report(bool display_info)
 	struct perf_data_file file = {
 		.path = input_name,
 		.mode = PERF_DATA_MODE_READ,
+		.force = force,
 	};
 
 	session = perf_session__new(&file, false, &eops);
@@ -945,6 +948,7 @@ int cmd_lock(int argc, const char **argv, const char *prefix __maybe_unused)
 		    "dump thread list in perf.data"),
 	OPT_BOOLEAN('m', "map", &info_map,
 		    "map of lock instances (address:name table)"),
+	OPT_BOOLEAN('f', "force", &force, "don't complain, do it"),
 	OPT_END()
 	};
 	const struct option lock_options[] = {
@@ -956,6 +960,7 @@ int cmd_lock(int argc, const char **argv, const char *prefix __maybe_unused)
 	const struct option report_options[] = {
 	OPT_STRING('k', "key", &sort_key, "acquired",
 		    "key for sorting (acquired / contended / avg_wait / wait_total / wait_max / wait_min)"),
+	OPT_BOOLEAN('f', "force", &force, "don't complain, do it"),
 	/* TODO: type */
 	OPT_END()
 	};
-- 
1.9.3


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

* [PATCH 11/15] perf mem: Support using -f to override perf.data file ownership
  2015-04-02 22:28 [GIT PULL 00/15] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (9 preceding siblings ...)
  2015-04-02 22:29 ` [PATCH 10/15] perf lock: Support using -f to override perf.data " Arnaldo Carvalho de Melo
@ 2015-04-02 22:29 ` Arnaldo Carvalho de Melo
  2015-04-02 22:29 ` [PATCH 12/15] perf script: " Arnaldo Carvalho de Melo
                   ` (4 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-02 22:29 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Yunlong Song, Paul Mackerras, Peter Zijlstra,
	Wang Nan, Arnaldo Carvalho de Melo

From: Yunlong Song <yunlong.song@huawei.com>

Enable perf mem to use perf.data when it is not owned by current user or
root.

Example:

 # perf mem -t load record ls
 # chown Yunlong.Song:Yunlong.Song perf.data
 # ls -al perf.data
 -rw------- 1 Yunlong.Song Yunlong.Song 16392 Apr  2 14:34 perf.data
 # id
 uid=0(root) gid=0(root) groups=0(root),64(pkcs11)

Before this patch:

 # perf mem -D report
 File perf.data not owned by current user or root (use -f to override)
 # perf mem -D -f report
   Error: unknown switch `f'

  usage: perf mem [<options>] {record|report}

     -t, --type <type>     memory operations(load,store) Default load,store
     -D, --dump-raw-samples
                           dump raw samples in ASCII
     -U, --hide-unresolved
                           Only display entries resolved to a symbol
     -i, --input <file>    input file name
     -C, --cpu <cpu>       list of cpus to profile
     -x, --field-separator <separator>
                           separator for columns, no spaces will be added
                           between columns '.' is reserved.

As shown above, the -f option does not work at all.

After this patch:

 # perf mem -D report
 File perf.data not owned by current user or root (use -f to override)
 # perf mem -D -f report
 # PID, TID, IP, ADDR, LOCAL WEIGHT, DSRC, SYMBOL
 39095 39095 0xffffffff81127e40 0x016ffff887f45148338 8 0x68100142
 /proc/kcore:perf_event_aux
 39095 39095 0xffffffff8100a3fe 0xffff89007f8cb7d0 6 0x68100142
 /proc/kcore:native_sched_clock
 39095 39095 0xffffffff81309139 0xffff88bf44c9ded8 6 0x68100142
 /proc/kcore:acpi_map_lookup
 39095 39095 0xffffffff810f8c4c 0xffff89007f8ccd88 6 0x68100142
 /proc/kcore:rcu_nmi_exit
 39095 39095 0xffffffff81136346 0xffff88fea995dd50 6 0x68100142
 /proc/kcore:unlock_page
 39095 39095 0xffffffff812a64a2 0xffff88fea995dcc8 6 0x68100142
 /proc/kcore:half_md4_transform
 39095 39095 0x7f0cf877c7e9 0x25dfb94 6 0x68100142
 /lib64/libc-2.19.so:__readdir64
 39095 39095 0x7f0cf87575a3 0x7f0cf9163731 6 0x68100142
 /lib64/libc-2.19.so:__strcoll_l
 39095 39095 0xffffffff8116910e 0xffffea01c1bfbd50 23 0x68100242
 /proc/kcore:page_remove_rmap

As shown above, the -f option really works now.

Signed-off-by: Yunlong Song <yunlong.song@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1427982439-27388-7-git-send-email-yunlong.song@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-mem.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/tools/perf/builtin-mem.c b/tools/perf/builtin-mem.c
index b4dcf0bfc029..675216e08bfc 100644
--- a/tools/perf/builtin-mem.c
+++ b/tools/perf/builtin-mem.c
@@ -15,6 +15,7 @@ struct perf_mem {
 	char const		*input_name;
 	bool			hide_unresolved;
 	bool			dump_raw;
+	bool			force;
 	int			operation;
 	const char		*cpu_list;
 	DECLARE_BITMAP(cpu_bitmap, MAX_NR_CPUS);
@@ -120,6 +121,7 @@ static int report_raw_events(struct perf_mem *mem)
 	struct perf_data_file file = {
 		.path = input_name,
 		.mode = PERF_DATA_MODE_READ,
+		.force = mem->force,
 	};
 	int err = -EINVAL;
 	int ret;
@@ -290,6 +292,7 @@ int cmd_mem(int argc, const char **argv, const char *prefix __maybe_unused)
 		   "separator",
 		   "separator for columns, no spaces will be added"
 		   " between columns '.' is reserved."),
+	OPT_BOOLEAN('f', "force", &mem.force, "don't complain, do it"),
 	OPT_END()
 	};
 	const char *const mem_subcommands[] = { "record", "report", NULL };
-- 
1.9.3


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

* [PATCH 12/15] perf script: Support using -f to override perf.data file ownership
  2015-04-02 22:28 [GIT PULL 00/15] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (10 preceding siblings ...)
  2015-04-02 22:29 ` [PATCH 11/15] perf mem: " Arnaldo Carvalho de Melo
@ 2015-04-02 22:29 ` Arnaldo Carvalho de Melo
  2015-04-02 22:29 ` [PATCH 13/15] perf timechart: " Arnaldo Carvalho de Melo
                   ` (3 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-02 22:29 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Yunlong Song, Paul Mackerras, Peter Zijlstra,
	Wang Nan, Arnaldo Carvalho de Melo

From: Yunlong Song <yunlong.song@huawei.com>

Enable perf script to use perf.data when it is not owned by current user
or root. Change the short option name of --fields to -F to avoid confusion
with --force.

Example:

 # perf record ls
 # chown Yunlong.Song:Yunlong.Song perf.data
 # ls -al perf.data
 -rw------- 1 Yunlong.Song Yunlong.Song 28360 Apr  2 14:53 perf.data
 # id
 uid=0(root) gid=0(root) groups=0(root),64(pkcs11)

Before this patch:

 # perf script
 File perf.data not owned by current user or root (use -f to override)
 # perf script -f
   Error: switch `f' requires a value

  usage: perf script [<options>]
     or: perf script [<options>] record <script> [<record-options>] <command>
     or: perf script [<options>] report <script> [script-args]
     or: perf script [<options>] <script> [<record-options>] <command>
     or: perf script [<options>] <top-script> [script-args]

     -f, --fields <str>    comma separated output fields prepend with
     'type:'. Valid types: hw,sw,trace,raw. Fields:
     comm,tid,pid,time,cpu,event,trace,ip,sym,dso,addr,symoff,period

As shown above, the -f option does not work at all. And -f is already
taken up by --fields, which makes --force confused, so change the short
option name of --fields to -F like what other perf commands do (e.g.
perf report -F) and use -f as the short option name of --force.

After this patch:

 # perf script
 File perf.data not owned by current user or root (use -f to override)
 # perf script -f
 :41298 41298 2590086.564226:          1 cycles:  ffffffff8103efc6
 native_write_msr_safe ([kernel.kallsyms])
 :41298 41298 2590086.564244:          1 cycles:  ffffffff8103efc6
 native_write_msr_safe ([kernel.kallsyms])
 :41298 41298 2590086.564249:          7 cycles:  ffffffff8103efc6
 native_write_msr_safe ([kernel.kallsyms])
 :41298 41298 2590086.564255:        176 cycles:  ffffffff8103efc6
 native_write_msr_safe ([kernel.kallsyms])
     ls 41298 2590086.567346:       4059 cycles:  ffffffff8105a592
     raise_softirq ([kernel.kallsyms])
     ls 41298 2590086.567353:       3717 cycles:  ffffffff8105a592
     raise_softirq ([kernel.kallsyms])
     ls 41298 2590086.567358:      63058 cycles:  ffffffff8105a592
     raise_softirq ([kernel.kallsyms])
     ls 41298 2590086.567448:    1706255 cycles:            406ae0
     [unknown] (/usr/bin/ls)

As shown above, the -f option really works now.

Signed-off-by: Yunlong Song <yunlong.song@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1427982439-27388-8-git-send-email-yunlong.song@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-script.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
index 257dd066cb1a..58f10b8e6ff2 100644
--- a/tools/perf/builtin-script.c
+++ b/tools/perf/builtin-script.c
@@ -1515,6 +1515,9 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)
 			.ordering_requires_timestamps = true,
 		},
 	};
+	struct perf_data_file file = {
+		.mode = PERF_DATA_MODE_READ,
+	};
 	const struct option options[] = {
 	OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace,
 		    "dump raw trace in ASCII"),
@@ -1542,7 +1545,7 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)
 		    "When printing symbols do not display call chain"),
 	OPT_STRING(0, "symfs", &symbol_conf.symfs, "directory",
 		    "Look for files with symbols relative to this directory"),
-	OPT_CALLBACK('f', "fields", NULL, "str",
+	OPT_CALLBACK('F', "fields", NULL, "str",
 		     "comma separated output fields prepend with 'type:'. "
 		     "Valid types: hw,sw,trace,raw. "
 		     "Fields: comm,tid,pid,time,cpu,event,trace,ip,sym,dso,"
@@ -1566,6 +1569,7 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)
 		    "Show the fork/comm/exit events"),
 	OPT_BOOLEAN('\0', "show-mmap-events", &script.show_mmap_events,
 		    "Show the mmap events"),
+	OPT_BOOLEAN('f', "force", &file.force, "don't complain, do it"),
 	OPT_END()
 	};
 	const char * const script_subcommands[] = { "record", "report", NULL };
@@ -1577,9 +1581,6 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)
 		"perf script [<options>] <top-script> [script-args]",
 		NULL
 	};
-	struct perf_data_file file = {
-		.mode = PERF_DATA_MODE_READ,
-	};
 
 	setup_scripting();
 
-- 
1.9.3


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

* [PATCH 13/15] perf timechart: Support using -f to override perf.data file ownership
  2015-04-02 22:28 [GIT PULL 00/15] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (11 preceding siblings ...)
  2015-04-02 22:29 ` [PATCH 12/15] perf script: " Arnaldo Carvalho de Melo
@ 2015-04-02 22:29 ` Arnaldo Carvalho de Melo
  2015-04-02 22:29 ` [PATCH 14/15] perf trace: " Arnaldo Carvalho de Melo
                   ` (2 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-02 22:29 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Yunlong Song, Paul Mackerras, Peter Zijlstra,
	Wang Nan, Arnaldo Carvalho de Melo

From: Yunlong Song <yunlong.song@huawei.com>

Enable perf timechart to use perf.data when it is not owned by current
user or root.

Example:

 # perf timechart record ls
 # chown Yunlong.Song:Yunlong.Song perf.data
 # ls -al perf.data
 -rw------- 1 Yunlong.Song Yunlong.Song 5471744 Apr  2 15:15 perf.data
 # id
 uid=0(root) gid=0(root) groups=0(root),64(pkcs11)

Before this patch:

 # perf timechart
 File perf.data not owned by current user or root (use -f to override)
 # perf timechart -f
   Error: unknown switch `f'

  usage: perf timechart [<options>] {record}

     -i, --input <file>    input file name
     -o, --output <file>   output file name
     -w, --width <n>       page width
         --highlight <duration or task name>
                           highlight tasks. Pass duration in ns or process name.
     -P, --power-only      output power data only
     -T, --tasks-only      output processes data only
     -p, --process <process>
                           process selector. Pass a pid or process name.
         --symfs <directory>
                           Look for files with symbols relative to this directory
     -n, --proc-num <n>    min. number of tasks to print
     -t, --topology        sort CPUs according to topology
         --io-skip-eagain  skip EAGAIN errors
         --io-min-time <time>
                           all IO faster than min-time will visually appear longer
         --io-merge-dist <time>
                           merge events that are merge-dist us apart

As shown above, the -f option does not work at all.

After this patch:

 # perf timechart
 File perf.data not owned by current user or root (use -f to override)
 # perf timechart -f
 Written 0.0 seconds of trace to output.svg.
 # cat output.svg
 <?xml version="1.0" standalone="no"?>
 <!DOCTYPE svg SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 <svg width="1000" height="10110" version="1.1" xmlns="http://www.w3.org/2000/svg">
 <defs>
   <style type="text/css">
     <![CDATA[
       rect          { stroke-width: 1; }
 ...
 ...

As shown above, the -f option really works now.

Signed-off-by: Yunlong Song <yunlong.song@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1427982439-27388-9-git-send-email-yunlong.song@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-timechart.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c
index 494b3bbe5ea4..e50fe1187b0b 100644
--- a/tools/perf/builtin-timechart.c
+++ b/tools/perf/builtin-timechart.c
@@ -67,6 +67,7 @@ struct timechart {
 				skip_eagain;
 	u64			min_time,
 				merge_dist;
+	bool			force;
 };
 
 struct per_pidcomm;
@@ -1598,6 +1599,7 @@ static int __cmd_timechart(struct timechart *tchart, const char *output_name)
 	struct perf_data_file file = {
 		.path = input_name,
 		.mode = PERF_DATA_MODE_READ,
+		.force = tchart->force,
 	};
 
 	struct perf_session *session = perf_session__new(&file, false,
@@ -1956,6 +1958,7 @@ int cmd_timechart(int argc, const char **argv,
 	OPT_CALLBACK(0, "io-merge-dist", &tchart.merge_dist, "time",
 		     "merge events that are merge-dist us apart",
 		     parse_time),
+	OPT_BOOLEAN('f', "force", &tchart.force, "don't complain, do it"),
 	OPT_END()
 	};
 	const char * const timechart_subcommands[] = { "record", NULL };
-- 
1.9.3


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

* [PATCH 14/15] perf trace: Support using -f to override perf.data file ownership
  2015-04-02 22:28 [GIT PULL 00/15] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (12 preceding siblings ...)
  2015-04-02 22:29 ` [PATCH 13/15] perf timechart: " Arnaldo Carvalho de Melo
@ 2015-04-02 22:29 ` Arnaldo Carvalho de Melo
  2015-04-02 22:29 ` [PATCH 15/15] perf data: Support using -f to override perf.data file ownership for 'convert' Arnaldo Carvalho de Melo
  2015-04-03  5:02 ` [GIT PULL 00/15] perf/core improvements and fixes Ingo Molnar
  15 siblings, 0 replies; 17+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-02 22:29 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Yunlong Song, Paul Mackerras, Peter Zijlstra,
	Wang Nan, Arnaldo Carvalho de Melo

From: Yunlong Song <yunlong.song@huawei.com>

Enable perf trace to use perf.data when it is not owned by current user
or root.

Example:

 # perf trace record ls
 # chown Yunlong.Song:Yunlong.Song perf.data
 # ls -al perf.data
 -rw------- 1 Yunlong.Song Yunlong.Song 4153101 Apr  2 15:28 perf.data
 # id
 uid=0(root) gid=0(root) groups=0(root),64(pkcs11)

Before this patch:

 # perf trace -i perf.data
 File perf.data not owned by current user or root (use -f to override)
 # perf trace -i perf.data -f
   Error: unknown switch `f'

  usage: perf trace [<options>] [<command>]
     or: perf trace [<options>] -- <command> [<options>]
     or: perf trace record [<options>] [<command>]
     or: perf trace record [<options>] -- <command> [<options>]

         --event <event>   event selector. use 'perf list' to list
 						  available events
         --comm            show the thread COMM next to its id
         --tool_stats      show tool stats
     -e, --expr <expr>     list of events to trace
     -o, --output <file>   output file name
     -i, --input <file>    Analyze events in file
     -p, --pid <pid>       trace events on existing process id
     -t, --tid <tid>       trace events on existing thread id
         --filter-pids <float>
  ...

As shown above, the -f option does not work at all.

After this patch:

 # perf trace -i perf.data
 File perf.data not owned by current user or root (use -f to override)
 # perf trace -i perf.data -f
 0.056 ( 0.002 ms): ls/47325 brk(                                 ...
 0.108 ( 0.018 ms): ls/47325 mmap(len: 4096, prot: READ|WRITE,    ...
 0.145 ( 0.013 ms): ls/47325 access(filename: 0x7f31259a0eb0,     ...
 0.172 ( 0.008 ms): ls/47325 open(filename: 0x7fffeb9a0d00,       ...
 0.180 ( 0.004 ms): ls/47325 stat(filename: 0x7fffeb9a0d00,       ...
 0.185 ( 0.004 ms): ls/47325 open(filename: 0x7fffeb9a0d00,       ...
 0.189 ( 0.003 ms): ls/47325 stat(filename: 0x7fffeb9a0d00,       ...
 0.195 ( 0.004 ms): ls/47325 open(filename: 0x7fffeb9a0d00,       ...
 0.199 ( 0.002 ms): ls/47325 stat(filename: 0x7fffeb9a0d00,       ...
 0.205 ( 0.004 ms): ls/47325 open(filename: 0x7fffeb9a0d00,       ...
 0.211 ( 0.004 ms): ls/47325 stat(filename: 0x7fffeb9a0d00,       ...
 0.220 ( 0.007 ms): ls/47325 open(filename: 0x7f312599e8ff,       ...
 ...
 ...

As shown above, the -f option really works now.

Signed-off-by: Yunlong Song <yunlong.song@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1427982439-27388-10-git-send-email-yunlong.song@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-trace.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index bcc98ce3e5b8..e124741be187 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -1254,6 +1254,7 @@ struct trace {
 	bool			show_comm;
 	bool			show_tool_stats;
 	bool			trace_syscalls;
+	bool			force;
 	int			trace_pgfaults;
 };
 
@@ -2345,6 +2346,7 @@ static int trace__replay(struct trace *trace)
 	struct perf_data_file file = {
 		.path  = input_name,
 		.mode  = PERF_DATA_MODE_READ,
+		.force = trace->force,
 	};
 	struct perf_session *session;
 	struct perf_evsel *evsel;
@@ -2693,6 +2695,7 @@ int cmd_trace(int argc, const char **argv, const char *prefix __maybe_unused)
 	OPT_CALLBACK_DEFAULT('F', "pf", &trace.trace_pgfaults, "all|maj|min",
 		     "Trace pagefaults", parse_pagefaults, "maj"),
 	OPT_BOOLEAN(0, "syscalls", &trace.trace_syscalls, "Trace syscalls"),
+	OPT_BOOLEAN('f', "force", &trace.force, "don't complain, do it"),
 	OPT_END()
 	};
 	const char * const trace_subcommands[] = { "record", NULL };
-- 
1.9.3


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

* [PATCH 15/15] perf data: Support using -f to override perf.data file ownership for 'convert'
  2015-04-02 22:28 [GIT PULL 00/15] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (13 preceding siblings ...)
  2015-04-02 22:29 ` [PATCH 14/15] perf trace: " Arnaldo Carvalho de Melo
@ 2015-04-02 22:29 ` Arnaldo Carvalho de Melo
  2015-04-03  5:02 ` [GIT PULL 00/15] perf/core improvements and fixes Ingo Molnar
  15 siblings, 0 replies; 17+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-04-02 22:29 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Yunlong Song, Paul Mackerras, Peter Zijlstra,
	Wang Nan, Arnaldo Carvalho de Melo

From: Yunlong Song <yunlong.song@huawei.com>

Enable perf data convert to use perf.data when it is not owned by
current user or root.

Example:

 # perf record ls
 # chown Yunlong.Song:Yunlong.Song perf.data
 # ls -al perf.data
 -rw------- 1 Yunlong.Song Yunlong.Song 28260 Apr  2 17:35 perf.data
 # id
 uid=0(root) gid=0(root) groups=0(root),64(pkcs11)

Before this patch:

 # perf data convert --to-ctf=./ctf-data/
 File perf.data not owned by current user or root (use -f to override)
 # perf data convert --to-ctf=./ctf-data/ -f
   Error: unknown switch `f'

  usage: perf data convert [<options>]

     -v, --verbose         be more verbose
     -i, --input <file>    input file name
         --to-ctf ...      Convert to CTF format

After this patch:

 # perf data convert --to-ctf=./ctf-data/
 File perf.data not owned by current user or root (use -f to override)
 # perf data convert --to-ctf=./ctf-data/ -f
 # ls ctf-data/
 metadata  perf_stream_0

As shown above, the -f option really works now.

Signed-off-by: Yunlong Song <yunlong.song@huawei.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1427982439-27388-11-git-send-email-yunlong.song@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-data.c         | 4 +++-
 tools/perf/util/data-convert-bt.c | 3 ++-
 tools/perf/util/data-convert-bt.h | 2 +-
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/tools/perf/builtin-data.c b/tools/perf/builtin-data.c
index 709152a7b408..d6525bc54d13 100644
--- a/tools/perf/builtin-data.c
+++ b/tools/perf/builtin-data.c
@@ -53,12 +53,14 @@ static int cmd_data_convert(int argc, const char **argv,
 			    const char *prefix __maybe_unused)
 {
 	const char *to_ctf     = NULL;
+	bool force = false;
 	const struct option options[] = {
 		OPT_INCR('v', "verbose", &verbose, "be more verbose"),
 		OPT_STRING('i', "input", &input_name, "file", "input file name"),
 #ifdef HAVE_LIBBABELTRACE_SUPPORT
 		OPT_STRING(0, "to-ctf", &to_ctf, NULL, "Convert to CTF format"),
 #endif
+		OPT_BOOLEAN('f', "force", &force, "don't complain, do it"),
 		OPT_END()
 	};
 
@@ -76,7 +78,7 @@ static int cmd_data_convert(int argc, const char **argv,
 
 	if (to_ctf) {
 #ifdef HAVE_LIBBABELTRACE_SUPPORT
-		return bt_convert__perf2ctf(input_name, to_ctf);
+		return bt_convert__perf2ctf(input_name, to_ctf, force);
 #else
 		pr_err("The libbabeltrace support is not compiled in.\n");
 		return -1;
diff --git a/tools/perf/util/data-convert-bt.c b/tools/perf/util/data-convert-bt.c
index c6d62268cc2a..dd17c9a32fbc 100644
--- a/tools/perf/util/data-convert-bt.c
+++ b/tools/perf/util/data-convert-bt.c
@@ -791,12 +791,13 @@ err:
 	return -1;
 }
 
-int bt_convert__perf2ctf(const char *input, const char *path)
+int bt_convert__perf2ctf(const char *input, const char *path, bool force)
 {
 	struct perf_session *session;
 	struct perf_data_file file = {
 		.path = input,
 		.mode = PERF_DATA_MODE_READ,
+		.force = force,
 	};
 	struct convert c = {
 		.tool = {
diff --git a/tools/perf/util/data-convert-bt.h b/tools/perf/util/data-convert-bt.h
index dda30c5d0792..4c204342a9d8 100644
--- a/tools/perf/util/data-convert-bt.h
+++ b/tools/perf/util/data-convert-bt.h
@@ -2,7 +2,7 @@
 #define __DATA_CONVERT_BT_H
 #ifdef HAVE_LIBBABELTRACE_SUPPORT
 
-int bt_convert__perf2ctf(const char *input_name, const char *to_ctf);
+int bt_convert__perf2ctf(const char *input_name, const char *to_ctf, bool force);
 
 #endif /* HAVE_LIBBABELTRACE_SUPPORT */
 #endif /* __DATA_CONVERT_BT_H */
-- 
1.9.3


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

* Re: [GIT PULL 00/15] perf/core improvements and fixes
  2015-04-02 22:28 [GIT PULL 00/15] perf/core improvements and fixes Arnaldo Carvalho de Melo
                   ` (14 preceding siblings ...)
  2015-04-02 22:29 ` [PATCH 15/15] perf data: Support using -f to override perf.data file ownership for 'convert' Arnaldo Carvalho de Melo
@ 2015-04-03  5:02 ` Ingo Molnar
  15 siblings, 0 replies; 17+ messages in thread
From: Ingo Molnar @ 2015-04-03  5:02 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Adrian Hunter, Borislav Petkov, David Ahern,
	Don Zickus, Frederic Weisbecker, Jiri Olsa, Masami Hiramatsu,
	Namhyung Kim, Paul Mackerras, Peter Zijlstra, Stephane Eranian,
	Wang Nan, Yunlong Song, Arnaldo Carvalho de Melo


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

> Hi Ingo,
> 
> 	Please consider pulling,
> 
> - Arnaldo
> 
> The following changes since commit e1abf2cc8d5d80b41c4419368ec743ccadbb131e:
> 
>   bpf: Fix the build on BPF_SYSCALL=y && !CONFIG_TRACING kernels, make it more configurable (2015-04-02 16:28:06 +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 bd05954bfa17f03a7bd4454178ba09786b35e383:
> 
>   perf data: Support using -f to override perf.data file ownership for 'convert' (2015-04-02 13:18:52 -0300)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes:
> 
> User visible:
> 
> - Support unnamed union/structure members data collection in 'perf probe' (Masami Hiramatsu)
> 
> - Support missing -f to override perf.data file ownership (Yunlong Song)
> 
> Infrastructure:
> 
> - No need to lookup thread twice when processing samples in 'perf script' (Arnaldo Carvalho de Melo)
> 
> - No need to pass thread twice to the scripting callbacks (Arnaldo Carvalho de Melo)
> 
> - No need to pass thread twice to the db-export facility (Arnaldo Carvalho de Melo)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Arnaldo Carvalho de Melo (4):
>       perf script: No need to lookup thread twice
>       perf scripting: No need to pass thread twice to the scripting callbacks
>       perf db-export: No need to pass thread twice to db_export__sample
>       perf db-export: No need to have ->thread twice in struct export_sample
> 
> Masami Hiramatsu (1):
>       perf probe: Fix to track down unnamed union/structure members
> 
> Yunlong Song (10):
>       perf evlist: Support using -f to override perf.data file ownership
>       perf inject: Support using -f to override perf.data file ownership
>       perf kmem: Support using -f to override perf.data file ownership
>       perf kvm: Support using -f to override perf.data.guest file ownership
>       perf lock: Support using -f to override perf.data file ownership
>       perf mem: Support using -f to override perf.data file ownership
>       perf script: Support using -f to override perf.data file ownership
>       perf timechart: Support using -f to override perf.data file ownership
>       perf trace: Support using -f to override perf.data file ownership
>       perf data: Support using -f to override perf.data file ownership for 'convert'
> 
>  tools/perf/builtin-data.c                          |  4 +++-
>  tools/perf/builtin-evlist.c                        |  2 ++
>  tools/perf/builtin-inject.c                        |  1 +
>  tools/perf/builtin-kmem.c                          |  9 +++++----
>  tools/perf/builtin-kvm.c                           |  2 ++
>  tools/perf/builtin-lock.c                          |  5 +++++
>  tools/perf/builtin-mem.c                           |  3 +++
>  tools/perf/builtin-script.c                        | 23 ++++++++--------------
>  tools/perf/builtin-timechart.c                     |  3 +++
>  tools/perf/builtin-trace.c                         |  3 +++
>  tools/perf/util/data-convert-bt.c                  |  3 ++-
>  tools/perf/util/data-convert-bt.h                  |  2 +-
>  tools/perf/util/db-export.c                        |  4 ++--
>  tools/perf/util/db-export.h                        |  3 +--
>  tools/perf/util/dwarf-aux.c                        | 14 +++++++++----
>  tools/perf/util/evsel.h                            |  1 +
>  tools/perf/util/kvm-stat.h                         |  1 +
>  tools/perf/util/probe-finder.c                     |  8 +++++++-
>  .../perf/util/scripting-engines/trace-event-perl.c |  5 ++---
>  .../util/scripting-engines/trace-event-python.c    | 16 ++++++---------
>  tools/perf/util/trace-event-scripting.c            |  1 -
>  tools/perf/util/trace-event.h                      |  3 +--
>  22 files changed, 69 insertions(+), 47 deletions(-)

Pulled, thanks a lot Arnaldo!

	Ingo

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

end of thread, other threads:[~2015-04-03  5:02 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-02 22:28 [GIT PULL 00/15] perf/core improvements and fixes Arnaldo Carvalho de Melo
2015-04-02 22:28 ` [PATCH 01/15] perf script: No need to lookup thread twice Arnaldo Carvalho de Melo
2015-04-02 22:28 ` [PATCH 02/15] perf scripting: No need to pass thread twice to the scripting callbacks Arnaldo Carvalho de Melo
2015-04-02 22:28 ` [PATCH 03/15] perf db-export: No need to pass thread twice to db_export__sample Arnaldo Carvalho de Melo
2015-04-02 22:28 ` [PATCH 04/15] perf db-export: No need to have ->thread twice in struct export_sample Arnaldo Carvalho de Melo
2015-04-02 22:28 ` [PATCH 05/15] perf probe: Fix to track down unnamed union/structure members Arnaldo Carvalho de Melo
2015-04-02 22:28 ` [PATCH 06/15] perf evlist: Support using -f to override perf.data file ownership Arnaldo Carvalho de Melo
2015-04-02 22:28 ` [PATCH 07/15] perf inject: " Arnaldo Carvalho de Melo
2015-04-02 22:28 ` [PATCH 08/15] perf kmem: " Arnaldo Carvalho de Melo
2015-04-02 22:29 ` [PATCH 09/15] perf kvm: Support using -f to override perf.data.guest " Arnaldo Carvalho de Melo
2015-04-02 22:29 ` [PATCH 10/15] perf lock: Support using -f to override perf.data " Arnaldo Carvalho de Melo
2015-04-02 22:29 ` [PATCH 11/15] perf mem: " Arnaldo Carvalho de Melo
2015-04-02 22:29 ` [PATCH 12/15] perf script: " Arnaldo Carvalho de Melo
2015-04-02 22:29 ` [PATCH 13/15] perf timechart: " Arnaldo Carvalho de Melo
2015-04-02 22:29 ` [PATCH 14/15] perf trace: " Arnaldo Carvalho de Melo
2015-04-02 22:29 ` [PATCH 15/15] perf data: Support using -f to override perf.data file ownership for 'convert' Arnaldo Carvalho de Melo
2015-04-03  5:02 ` [GIT PULL 00/15] perf/core improvements and fixes 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).