All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/7] perf tools: Prepare for AUX area sampling support
@ 2018-03-06  9:13 Adrian Hunter
  2018-03-06  9:13 ` [PATCH 1/7] perf record: Combine some auxtrace initialization into a single function Adrian Hunter
                   ` (6 more replies)
  0 siblings, 7 replies; 24+ messages in thread
From: Adrian Hunter @ 2018-03-06  9:13 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, linux-kernel

Hi

Here are a few patches to help clear the way for adding AUX area sampling
support.  There is one minor fix "Prevent decoding when --no-itrace" but
otherwise there are no functional changes.


Adrian Hunter (7):
      perf record: Combine some auxtrace initialization into a single function
      perf auxtrace: Prevent decoding when --no-itrace
      perf auxtrace: Add missing parameters from kernel-doc comments
      perf auxtrace: Rename some buffer-queuing functions
      perf auxtrace: Make auxtrace_queues__add_buffer() return buffer_ptr
      perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer
      perf auxtrace: Make auxtrace_queues__add_buffer() do CPU filtering

 tools/perf/builtin-record.c |  36 +++++++++-----
 tools/perf/util/auxtrace.c  | 114 +++++++++++++++++++++++---------------------
 tools/perf/util/auxtrace.h  |   2 +
 3 files changed, 85 insertions(+), 67 deletions(-)


Regards
Adrian

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

* [PATCH 1/7] perf record: Combine some auxtrace initialization into a single function
  2018-03-06  9:13 [PATCH 0/7] perf tools: Prepare for AUX area sampling support Adrian Hunter
@ 2018-03-06  9:13 ` Adrian Hunter
  2018-03-09  8:38   ` [tip:perf/core] " tip-bot for Adrian Hunter
  2018-03-06  9:13 ` [PATCH 2/7] perf auxtrace: Prevent decoding when --no-itrace Adrian Hunter
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 24+ messages in thread
From: Adrian Hunter @ 2018-03-06  9:13 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, linux-kernel

In preparation for adding AUX area sampling support, combine some auxtrace
initialization into a single function.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/builtin-record.c | 36 ++++++++++++++++++++++++------------
 1 file changed, 24 insertions(+), 12 deletions(-)

diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index 907267206973..9b6338ce9c2b 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -273,6 +273,24 @@ static void record__read_auxtrace_snapshot(struct record *rec)
 	}
 }
 
+static int record__auxtrace_init(struct record *rec)
+{
+	int err;
+
+	if (!rec->itr) {
+		rec->itr = auxtrace_record__init(rec->evlist, &err);
+		if (err)
+			return err;
+	}
+
+	err = auxtrace_parse_snapshot_options(rec->itr, &rec->opts,
+					      rec->opts.auxtrace_snapshot_opts);
+	if (err)
+		return err;
+
+	return auxtrace_parse_filters(rec->evlist);
+}
+
 #else
 
 static inline
@@ -293,6 +311,11 @@ int auxtrace_record__snapshot_start(struct auxtrace_record *itr __maybe_unused)
 	return 0;
 }
 
+static int record__auxtrace_init(struct record *rec __maybe_unused)
+{
+	return 0;
+}
+
 #endif
 
 static int record__mmap_evlist(struct record *rec,
@@ -1711,17 +1734,6 @@ int cmd_record(int argc, const char **argv)
 		alarm(rec->switch_output.time);
 	}
 
-	if (!rec->itr) {
-		rec->itr = auxtrace_record__init(rec->evlist, &err);
-		if (err)
-			goto out;
-	}
-
-	err = auxtrace_parse_snapshot_options(rec->itr, &rec->opts,
-					      rec->opts.auxtrace_snapshot_opts);
-	if (err)
-		goto out;
-
 	/*
 	 * Allow aliases to facilitate the lookup of symbols for address
 	 * filters. Refer to auxtrace_parse_filters().
@@ -1730,7 +1742,7 @@ int cmd_record(int argc, const char **argv)
 
 	symbol__init(NULL);
 
-	err = auxtrace_parse_filters(rec->evlist);
+	err = record__auxtrace_init(rec);
 	if (err)
 		goto out;
 
-- 
1.9.1

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

* [PATCH 2/7] perf auxtrace: Prevent decoding when --no-itrace
  2018-03-06  9:13 [PATCH 0/7] perf tools: Prepare for AUX area sampling support Adrian Hunter
  2018-03-06  9:13 ` [PATCH 1/7] perf record: Combine some auxtrace initialization into a single function Adrian Hunter
@ 2018-03-06  9:13 ` Adrian Hunter
  2018-03-06 14:06   ` Arnaldo Carvalho de Melo
  2018-03-07  8:27   ` [tip:perf/urgent] " tip-bot for Adrian Hunter
  2018-03-06  9:13 ` [PATCH 3/7] perf auxtrace: Add missing parameters from kernel-doc comments Adrian Hunter
                   ` (4 subsequent siblings)
  6 siblings, 2 replies; 24+ messages in thread
From: Adrian Hunter @ 2018-03-06  9:13 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, linux-kernel

Prevent auxtrace_queues__process_index() from queuing AUX area data for
decoding when the --no-itrace option has been used.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/auxtrace.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
index 9faf3b5367db..6470ea2aa25e 100644
--- a/tools/perf/util/auxtrace.c
+++ b/tools/perf/util/auxtrace.c
@@ -60,6 +60,12 @@
 #include "sane_ctype.h"
 #include "symbol/kallsyms.h"
 
+static bool auxtrace__dont_decode(struct perf_session *session)
+{
+	return !session->itrace_synth_opts ||
+	       session->itrace_synth_opts->dont_decode;
+}
+
 int auxtrace_mmap__mmap(struct auxtrace_mmap *mm,
 			struct auxtrace_mmap_params *mp,
 			void *userpg, int fd)
@@ -762,6 +768,9 @@ int auxtrace_queues__process_index(struct auxtrace_queues *queues,
 	size_t i;
 	int err;
 
+	if (auxtrace__dont_decode(session))
+		return 0;
+
 	list_for_each_entry(auxtrace_index, &session->auxtrace_index, list) {
 		for (i = 0; i < auxtrace_index->nr; i++) {
 			ent = &auxtrace_index->entries[i];
@@ -892,12 +901,6 @@ int perf_event__synthesize_auxtrace_info(struct auxtrace_record *itr,
 	return err;
 }
 
-static bool auxtrace__dont_decode(struct perf_session *session)
-{
-	return !session->itrace_synth_opts ||
-	       session->itrace_synth_opts->dont_decode;
-}
-
 int perf_event__process_auxtrace_info(struct perf_tool *tool __maybe_unused,
 				      union perf_event *event,
 				      struct perf_session *session)
-- 
1.9.1

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

* [PATCH 3/7] perf auxtrace: Add missing parameters from kernel-doc comments
  2018-03-06  9:13 [PATCH 0/7] perf tools: Prepare for AUX area sampling support Adrian Hunter
  2018-03-06  9:13 ` [PATCH 1/7] perf record: Combine some auxtrace initialization into a single function Adrian Hunter
  2018-03-06  9:13 ` [PATCH 2/7] perf auxtrace: Prevent decoding when --no-itrace Adrian Hunter
@ 2018-03-06  9:13 ` Adrian Hunter
  2018-03-09  8:40   ` [tip:perf/core] " tip-bot for Adrian Hunter
  2018-03-06  9:13 ` [PATCH 4/7] perf auxtrace: Rename some buffer-queuing functions Adrian Hunter
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 24+ messages in thread
From: Adrian Hunter @ 2018-03-06  9:13 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, linux-kernel

Add missing parameters from kernel-doc comments.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/auxtrace.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/perf/util/auxtrace.h b/tools/perf/util/auxtrace.h
index 453c148d2158..e731f55da072 100644
--- a/tools/perf/util/auxtrace.h
+++ b/tools/perf/util/auxtrace.h
@@ -130,6 +130,7 @@ struct auxtrace_index {
 /**
  * struct auxtrace - session callbacks to allow AUX area data decoding.
  * @process_event: lets the decoder see all session events
+ * @process_auxtrace_event: process a PERF_RECORD_AUXTRACE event
  * @flush_events: process any remaining data
  * @free_events: free resources associated with event processing
  * @free: free resources associated with the session
@@ -301,6 +302,7 @@ struct auxtrace_mmap_params {
  * @parse_snapshot_options: parse snapshot options
  * @reference: provide a 64-bit reference number for auxtrace_event
  * @read_finish: called after reading from an auxtrace mmap
+ * @alignment: alignment (if any) for AUX area data
  */
 struct auxtrace_record {
 	int (*recording_options)(struct auxtrace_record *itr,
-- 
1.9.1

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

* [PATCH 4/7] perf auxtrace: Rename some buffer-queuing functions
  2018-03-06  9:13 [PATCH 0/7] perf tools: Prepare for AUX area sampling support Adrian Hunter
                   ` (2 preceding siblings ...)
  2018-03-06  9:13 ` [PATCH 3/7] perf auxtrace: Add missing parameters from kernel-doc comments Adrian Hunter
@ 2018-03-06  9:13 ` Adrian Hunter
  2018-03-09  8:40   ` [tip:perf/core] " tip-bot for Adrian Hunter
  2018-03-06  9:13 ` [PATCH 5/7] perf auxtrace: Make auxtrace_queues__add_buffer() return buffer_ptr Adrian Hunter
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 24+ messages in thread
From: Adrian Hunter @ 2018-03-06  9:13 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, linux-kernel

Rename some buffer-queuing functions in preparation for supporting AUX area
sampling buffers.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/auxtrace.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
index 6470ea2aa25e..6ea840ec5b7f 100644
--- a/tools/perf/util/auxtrace.c
+++ b/tools/perf/util/auxtrace.c
@@ -233,9 +233,9 @@ static void *auxtrace_copy_data(u64 size, struct perf_session *session)
 	return p;
 }
 
-static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
-				       unsigned int idx,
-				       struct auxtrace_buffer *buffer)
+static int auxtrace_queues__queue_buffer(struct auxtrace_queues *queues,
+					 unsigned int idx,
+					 struct auxtrace_buffer *buffer)
 {
 	struct auxtrace_queue *queue;
 	int err;
@@ -286,7 +286,7 @@ static int auxtrace_queues__split_buffer(struct auxtrace_queues *queues,
 			return -ENOMEM;
 		b->size = BUFFER_LIMIT_FOR_32_BIT;
 		b->consecutive = consecutive;
-		err = auxtrace_queues__add_buffer(queues, idx, b);
+		err = auxtrace_queues__queue_buffer(queues, idx, b);
 		if (err) {
 			auxtrace_buffer__free(b);
 			return err;
@@ -302,10 +302,10 @@ static int auxtrace_queues__split_buffer(struct auxtrace_queues *queues,
 	return 0;
 }
 
-static int auxtrace_queues__add_event_buffer(struct auxtrace_queues *queues,
-					     struct perf_session *session,
-					     unsigned int idx,
-					     struct auxtrace_buffer *buffer)
+static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
+				       struct perf_session *session,
+				       unsigned int idx,
+				       struct auxtrace_buffer *buffer)
 {
 	if (session->one_mmap) {
 		buffer->data = buffer->data_offset - session->one_mmap_offset +
@@ -324,7 +324,7 @@ static int auxtrace_queues__add_event_buffer(struct auxtrace_queues *queues,
 			return err;
 	}
 
-	return auxtrace_queues__add_buffer(queues, idx, buffer);
+	return auxtrace_queues__queue_buffer(queues, idx, buffer);
 }
 
 static bool filter_cpu(struct perf_session *session, int cpu)
@@ -359,7 +359,7 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues,
 	buffer->size = event->auxtrace.size;
 	idx = event->auxtrace.idx;
 
-	err = auxtrace_queues__add_event_buffer(queues, session, idx, buffer);
+	err = auxtrace_queues__add_buffer(queues, session, idx, buffer);
 	if (err)
 		goto out_err;
 
-- 
1.9.1

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

* [PATCH 5/7] perf auxtrace: Make auxtrace_queues__add_buffer() return buffer_ptr
  2018-03-06  9:13 [PATCH 0/7] perf tools: Prepare for AUX area sampling support Adrian Hunter
                   ` (3 preceding siblings ...)
  2018-03-06  9:13 ` [PATCH 4/7] perf auxtrace: Rename some buffer-queuing functions Adrian Hunter
@ 2018-03-06  9:13 ` Adrian Hunter
  2018-03-09  8:41   ` [tip:perf/core] " tip-bot for Adrian Hunter
  2018-03-06  9:13 ` [PATCH 6/7] perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer Adrian Hunter
  2018-03-06  9:13 ` [PATCH 7/7] perf auxtrace: Make auxtrace_queues__add_buffer() do CPU filtering Adrian Hunter
  6 siblings, 1 reply; 24+ messages in thread
From: Adrian Hunter @ 2018-03-06  9:13 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, linux-kernel

In preparation for supporting AUX area sampling buffers,
auxtrace_queues__add_buffer() needs to be more generic. To that end, make
it return buffer_ptr instead of the caller.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/auxtrace.c | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
index 6ea840ec5b7f..fb357a00dd86 100644
--- a/tools/perf/util/auxtrace.c
+++ b/tools/perf/util/auxtrace.c
@@ -305,8 +305,11 @@ static int auxtrace_queues__split_buffer(struct auxtrace_queues *queues,
 static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
 				       struct perf_session *session,
 				       unsigned int idx,
-				       struct auxtrace_buffer *buffer)
+				       struct auxtrace_buffer *buffer,
+				       struct auxtrace_buffer **buffer_ptr)
 {
+	int err;
+
 	if (session->one_mmap) {
 		buffer->data = buffer->data_offset - session->one_mmap_offset +
 			       session->one_mmap_addr;
@@ -317,14 +320,20 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
 		buffer->data_needs_freeing = true;
 	} else if (BITS_PER_LONG == 32 &&
 		   buffer->size > BUFFER_LIMIT_FOR_32_BIT) {
-		int err;
-
 		err = auxtrace_queues__split_buffer(queues, idx, buffer);
 		if (err)
 			return err;
 	}
 
-	return auxtrace_queues__queue_buffer(queues, idx, buffer);
+	err = auxtrace_queues__queue_buffer(queues, idx, buffer);
+	if (err)
+		return err;
+
+	/* FIXME: Doesn't work for split buffer */
+	if (buffer_ptr)
+		*buffer_ptr = buffer;
+
+	return 0;
 }
 
 static bool filter_cpu(struct perf_session *session, int cpu)
@@ -359,13 +368,11 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues,
 	buffer->size = event->auxtrace.size;
 	idx = event->auxtrace.idx;
 
-	err = auxtrace_queues__add_buffer(queues, session, idx, buffer);
+	err = auxtrace_queues__add_buffer(queues, session, idx, buffer,
+					  buffer_ptr);
 	if (err)
 		goto out_err;
 
-	if (buffer_ptr)
-		*buffer_ptr = buffer;
-
 	return 0;
 
 out_err:
-- 
1.9.1

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

* [PATCH 6/7] perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer
  2018-03-06  9:13 [PATCH 0/7] perf tools: Prepare for AUX area sampling support Adrian Hunter
                   ` (4 preceding siblings ...)
  2018-03-06  9:13 ` [PATCH 5/7] perf auxtrace: Make auxtrace_queues__add_buffer() return buffer_ptr Adrian Hunter
@ 2018-03-06  9:13 ` Adrian Hunter
  2018-03-06 20:25   ` Arnaldo Carvalho de Melo
  2018-04-06 17:04   ` [tip:perf/urgent] " tip-bot for Adrian Hunter
  2018-03-06  9:13 ` [PATCH 7/7] perf auxtrace: Make auxtrace_queues__add_buffer() do CPU filtering Adrian Hunter
  6 siblings, 2 replies; 24+ messages in thread
From: Adrian Hunter @ 2018-03-06  9:13 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, linux-kernel

In preparation for supporting AUX area sampling buffers,
auxtrace_queues__add_buffer() needs to be more generic. To that end, move
memory allocation for struct buffer into it.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/auxtrace.c | 54 +++++++++++++++++++++-------------------------
 1 file changed, 24 insertions(+), 30 deletions(-)

diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
index fb357a00dd86..e1aff91c54a8 100644
--- a/tools/perf/util/auxtrace.c
+++ b/tools/perf/util/auxtrace.c
@@ -308,7 +308,11 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
 				       struct auxtrace_buffer *buffer,
 				       struct auxtrace_buffer **buffer_ptr)
 {
-	int err;
+	int err = -ENOMEM;
+
+	buffer = memdup(buffer, sizeof(*buffer));
+	if (!buffer)
+		return -ENOMEM;
 
 	if (session->one_mmap) {
 		buffer->data = buffer->data_offset - session->one_mmap_offset +
@@ -316,24 +320,28 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
 	} else if (perf_data__is_pipe(session->data)) {
 		buffer->data = auxtrace_copy_data(buffer->size, session);
 		if (!buffer->data)
-			return -ENOMEM;
+			goto out_free;
 		buffer->data_needs_freeing = true;
 	} else if (BITS_PER_LONG == 32 &&
 		   buffer->size > BUFFER_LIMIT_FOR_32_BIT) {
 		err = auxtrace_queues__split_buffer(queues, idx, buffer);
 		if (err)
-			return err;
+			goto out_free;
 	}
 
 	err = auxtrace_queues__queue_buffer(queues, idx, buffer);
 	if (err)
-		return err;
+		goto out_free;
 
 	/* FIXME: Doesn't work for split buffer */
 	if (buffer_ptr)
 		*buffer_ptr = buffer;
 
 	return 0;
+
+out_free:
+	auxtrace_buffer__free(buffer);
+	return err;
 }
 
 static bool filter_cpu(struct perf_session *session, int cpu)
@@ -348,36 +356,22 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues,
 			       union perf_event *event, off_t data_offset,
 			       struct auxtrace_buffer **buffer_ptr)
 {
-	struct auxtrace_buffer *buffer;
-	unsigned int idx;
-	int err;
+	struct auxtrace_buffer buffer = {
+		.pid = -1,
+		.tid = event->auxtrace.tid,
+		.cpu = event->auxtrace.cpu,
+		.data_offset = data_offset,
+		.offset = event->auxtrace.offset,
+		.reference = event->auxtrace.reference,
+		.size = event->auxtrace.size,
+	};
+	unsigned int idx = event->auxtrace.idx;
 
 	if (filter_cpu(session, event->auxtrace.cpu))
 		return 0;
 
-	buffer = zalloc(sizeof(struct auxtrace_buffer));
-	if (!buffer)
-		return -ENOMEM;
-
-	buffer->pid = -1;
-	buffer->tid = event->auxtrace.tid;
-	buffer->cpu = event->auxtrace.cpu;
-	buffer->data_offset = data_offset;
-	buffer->offset = event->auxtrace.offset;
-	buffer->reference = event->auxtrace.reference;
-	buffer->size = event->auxtrace.size;
-	idx = event->auxtrace.idx;
-
-	err = auxtrace_queues__add_buffer(queues, session, idx, buffer,
-					  buffer_ptr);
-	if (err)
-		goto out_err;
-
-	return 0;
-
-out_err:
-	auxtrace_buffer__free(buffer);
-	return err;
+	return auxtrace_queues__add_buffer(queues, session, idx, &buffer,
+					   buffer_ptr);
 }
 
 static int auxtrace_queues__add_indexed_event(struct auxtrace_queues *queues,
-- 
1.9.1

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

* [PATCH 7/7] perf auxtrace: Make auxtrace_queues__add_buffer() do CPU filtering
  2018-03-06  9:13 [PATCH 0/7] perf tools: Prepare for AUX area sampling support Adrian Hunter
                   ` (5 preceding siblings ...)
  2018-03-06  9:13 ` [PATCH 6/7] perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer Adrian Hunter
@ 2018-03-06  9:13 ` Adrian Hunter
  2018-04-06 11:44   ` Adrian Hunter
  2018-04-10  5:28   ` [tip:perf/urgent] " tip-bot for Adrian Hunter
  6 siblings, 2 replies; 24+ messages in thread
From: Adrian Hunter @ 2018-03-06  9:13 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, linux-kernel

In preparation for supporting AUX area sampling buffers,
auxtrace_queues__add_buffer() needs to be more generic. To that end, move
CPU filtering into it.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/auxtrace.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
index e1aff91c54a8..857de69a5361 100644
--- a/tools/perf/util/auxtrace.c
+++ b/tools/perf/util/auxtrace.c
@@ -302,6 +302,13 @@ static int auxtrace_queues__split_buffer(struct auxtrace_queues *queues,
 	return 0;
 }
 
+static bool filter_cpu(struct perf_session *session, int cpu)
+{
+	unsigned long *cpu_bitmap = session->itrace_synth_opts->cpu_bitmap;
+
+	return cpu_bitmap && cpu != -1 && !test_bit(cpu, cpu_bitmap);
+}
+
 static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
 				       struct perf_session *session,
 				       unsigned int idx,
@@ -310,6 +317,9 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
 {
 	int err = -ENOMEM;
 
+	if (filter_cpu(session, buffer->cpu))
+		return 0;
+
 	buffer = memdup(buffer, sizeof(*buffer));
 	if (!buffer)
 		return -ENOMEM;
@@ -344,13 +354,6 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
 	return err;
 }
 
-static bool filter_cpu(struct perf_session *session, int cpu)
-{
-	unsigned long *cpu_bitmap = session->itrace_synth_opts->cpu_bitmap;
-
-	return cpu_bitmap && cpu != -1 && !test_bit(cpu, cpu_bitmap);
-}
-
 int auxtrace_queues__add_event(struct auxtrace_queues *queues,
 			       struct perf_session *session,
 			       union perf_event *event, off_t data_offset,
@@ -367,9 +370,6 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues,
 	};
 	unsigned int idx = event->auxtrace.idx;
 
-	if (filter_cpu(session, event->auxtrace.cpu))
-		return 0;
-
 	return auxtrace_queues__add_buffer(queues, session, idx, &buffer,
 					   buffer_ptr);
 }
-- 
1.9.1

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

* Re: [PATCH 2/7] perf auxtrace: Prevent decoding when --no-itrace
  2018-03-06  9:13 ` [PATCH 2/7] perf auxtrace: Prevent decoding when --no-itrace Adrian Hunter
@ 2018-03-06 14:06   ` Arnaldo Carvalho de Melo
  2018-03-06 14:21     ` Adrian Hunter
  2018-03-07  8:27   ` [tip:perf/urgent] " tip-bot for Adrian Hunter
  1 sibling, 1 reply; 24+ messages in thread
From: Arnaldo Carvalho de Melo @ 2018-03-06 14:06 UTC (permalink / raw)
  To: Adrian Hunter; +Cc: Jiri Olsa, linux-kernel

Em Tue, Mar 06, 2018 at 11:13:13AM +0200, Adrian Hunter escreveu:
> Prevent auxtrace_queues__process_index() from queuing AUX area data for
> decoding when the --no-itrace option has been used.

So I'm putting this one both on perf/urgent and on perf/core, the rest
just on perf/core, ok?

- Arnaldo
 
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
>  tools/perf/util/auxtrace.c | 15 +++++++++------
>  1 file changed, 9 insertions(+), 6 deletions(-)
> 
> diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
> index 9faf3b5367db..6470ea2aa25e 100644
> --- a/tools/perf/util/auxtrace.c
> +++ b/tools/perf/util/auxtrace.c
> @@ -60,6 +60,12 @@
>  #include "sane_ctype.h"
>  #include "symbol/kallsyms.h"
>  
> +static bool auxtrace__dont_decode(struct perf_session *session)
> +{
> +	return !session->itrace_synth_opts ||
> +	       session->itrace_synth_opts->dont_decode;
> +}
> +
>  int auxtrace_mmap__mmap(struct auxtrace_mmap *mm,
>  			struct auxtrace_mmap_params *mp,
>  			void *userpg, int fd)
> @@ -762,6 +768,9 @@ int auxtrace_queues__process_index(struct auxtrace_queues *queues,
>  	size_t i;
>  	int err;
>  
> +	if (auxtrace__dont_decode(session))
> +		return 0;
> +
>  	list_for_each_entry(auxtrace_index, &session->auxtrace_index, list) {
>  		for (i = 0; i < auxtrace_index->nr; i++) {
>  			ent = &auxtrace_index->entries[i];
> @@ -892,12 +901,6 @@ int perf_event__synthesize_auxtrace_info(struct auxtrace_record *itr,
>  	return err;
>  }
>  
> -static bool auxtrace__dont_decode(struct perf_session *session)
> -{
> -	return !session->itrace_synth_opts ||
> -	       session->itrace_synth_opts->dont_decode;
> -}
> -
>  int perf_event__process_auxtrace_info(struct perf_tool *tool __maybe_unused,
>  				      union perf_event *event,
>  				      struct perf_session *session)
> -- 
> 1.9.1

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

* Re: [PATCH 2/7] perf auxtrace: Prevent decoding when --no-itrace
  2018-03-06 14:06   ` Arnaldo Carvalho de Melo
@ 2018-03-06 14:21     ` Adrian Hunter
  2018-03-06 14:32       ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 24+ messages in thread
From: Adrian Hunter @ 2018-03-06 14:21 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, linux-kernel

On 06/03/18 16:06, Arnaldo Carvalho de Melo wrote:
> Em Tue, Mar 06, 2018 at 11:13:13AM +0200, Adrian Hunter escreveu:
>> Prevent auxtrace_queues__process_index() from queuing AUX area data for
>> decoding when the --no-itrace option has been used.
> 
> So I'm putting this one both on perf/urgent and on perf/core, the rest
> just on perf/core, ok?

Yes, thank you!

Have you got this one also:

	https://marc.info/?l=linux-kernel&m=151980982703990

> 
> - Arnaldo
>  
>> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
>> ---
>>  tools/perf/util/auxtrace.c | 15 +++++++++------
>>  1 file changed, 9 insertions(+), 6 deletions(-)
>>
>> diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
>> index 9faf3b5367db..6470ea2aa25e 100644
>> --- a/tools/perf/util/auxtrace.c
>> +++ b/tools/perf/util/auxtrace.c
>> @@ -60,6 +60,12 @@
>>  #include "sane_ctype.h"
>>  #include "symbol/kallsyms.h"
>>  
>> +static bool auxtrace__dont_decode(struct perf_session *session)
>> +{
>> +	return !session->itrace_synth_opts ||
>> +	       session->itrace_synth_opts->dont_decode;
>> +}
>> +
>>  int auxtrace_mmap__mmap(struct auxtrace_mmap *mm,
>>  			struct auxtrace_mmap_params *mp,
>>  			void *userpg, int fd)
>> @@ -762,6 +768,9 @@ int auxtrace_queues__process_index(struct auxtrace_queues *queues,
>>  	size_t i;
>>  	int err;
>>  
>> +	if (auxtrace__dont_decode(session))
>> +		return 0;
>> +
>>  	list_for_each_entry(auxtrace_index, &session->auxtrace_index, list) {
>>  		for (i = 0; i < auxtrace_index->nr; i++) {
>>  			ent = &auxtrace_index->entries[i];
>> @@ -892,12 +901,6 @@ int perf_event__synthesize_auxtrace_info(struct auxtrace_record *itr,
>>  	return err;
>>  }
>>  
>> -static bool auxtrace__dont_decode(struct perf_session *session)
>> -{
>> -	return !session->itrace_synth_opts ||
>> -	       session->itrace_synth_opts->dont_decode;
>> -}
>> -
>>  int perf_event__process_auxtrace_info(struct perf_tool *tool __maybe_unused,
>>  				      union perf_event *event,
>>  				      struct perf_session *session)
>> -- 
>> 1.9.1
> 

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

* Re: [PATCH 2/7] perf auxtrace: Prevent decoding when --no-itrace
  2018-03-06 14:21     ` Adrian Hunter
@ 2018-03-06 14:32       ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 24+ messages in thread
From: Arnaldo Carvalho de Melo @ 2018-03-06 14:32 UTC (permalink / raw)
  To: Adrian Hunter; +Cc: Jiri Olsa, linux-kernel

Em Tue, Mar 06, 2018 at 04:21:32PM +0200, Adrian Hunter escreveu:
> On 06/03/18 16:06, Arnaldo Carvalho de Melo wrote:
> > Em Tue, Mar 06, 2018 at 11:13:13AM +0200, Adrian Hunter escreveu:
> >> Prevent auxtrace_queues__process_index() from queuing AUX area data for
> >> decoding when the --no-itrace option has been used.
> > 
> > So I'm putting this one both on perf/urgent and on perf/core, the rest
> > just on perf/core, ok?
> 
> Yes, thank you!
> 
> Have you got this one also:
> 
> 	https://marc.info/?l=linux-kernel&m=151980982703990

Hadn't, got it now, please next time put the subject line here,
sometimes I am offline and could then process the patches I have in my
local inbox, etc.

Thanks,

- Arnaldo
 
> > 
> > - Arnaldo
> >  
> >> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> >> ---
> >>  tools/perf/util/auxtrace.c | 15 +++++++++------
> >>  1 file changed, 9 insertions(+), 6 deletions(-)
> >>
> >> diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
> >> index 9faf3b5367db..6470ea2aa25e 100644
> >> --- a/tools/perf/util/auxtrace.c
> >> +++ b/tools/perf/util/auxtrace.c
> >> @@ -60,6 +60,12 @@
> >>  #include "sane_ctype.h"
> >>  #include "symbol/kallsyms.h"
> >>  
> >> +static bool auxtrace__dont_decode(struct perf_session *session)
> >> +{
> >> +	return !session->itrace_synth_opts ||
> >> +	       session->itrace_synth_opts->dont_decode;
> >> +}
> >> +
> >>  int auxtrace_mmap__mmap(struct auxtrace_mmap *mm,
> >>  			struct auxtrace_mmap_params *mp,
> >>  			void *userpg, int fd)
> >> @@ -762,6 +768,9 @@ int auxtrace_queues__process_index(struct auxtrace_queues *queues,
> >>  	size_t i;
> >>  	int err;
> >>  
> >> +	if (auxtrace__dont_decode(session))
> >> +		return 0;
> >> +
> >>  	list_for_each_entry(auxtrace_index, &session->auxtrace_index, list) {
> >>  		for (i = 0; i < auxtrace_index->nr; i++) {
> >>  			ent = &auxtrace_index->entries[i];
> >> @@ -892,12 +901,6 @@ int perf_event__synthesize_auxtrace_info(struct auxtrace_record *itr,
> >>  	return err;
> >>  }
> >>  
> >> -static bool auxtrace__dont_decode(struct perf_session *session)
> >> -{
> >> -	return !session->itrace_synth_opts ||
> >> -	       session->itrace_synth_opts->dont_decode;
> >> -}
> >> -
> >>  int perf_event__process_auxtrace_info(struct perf_tool *tool __maybe_unused,
> >>  				      union perf_event *event,
> >>  				      struct perf_session *session)
> >> -- 
> >> 1.9.1
> > 

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

* Re: [PATCH 6/7] perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer
  2018-03-06  9:13 ` [PATCH 6/7] perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer Adrian Hunter
@ 2018-03-06 20:25   ` Arnaldo Carvalho de Melo
  2018-03-07  8:06     ` Adrian Hunter
  2018-04-06 17:04   ` [tip:perf/urgent] " tip-bot for Adrian Hunter
  1 sibling, 1 reply; 24+ messages in thread
From: Arnaldo Carvalho de Melo @ 2018-03-06 20:25 UTC (permalink / raw)
  To: Adrian Hunter; +Cc: Jiri Olsa, linux-kernel

Em Tue, Mar 06, 2018 at 11:13:17AM +0200, Adrian Hunter escreveu:
> In preparation for supporting AUX area sampling buffers,
> auxtrace_queues__add_buffer() needs to be more generic. To that end, move
> memory allocation for struct buffer into it.
> 
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
>  tools/perf/util/auxtrace.c | 54 +++++++++++++++++++++-------------------------
>  1 file changed, 24 insertions(+), 30 deletions(-)
> 
> diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
> index fb357a00dd86..e1aff91c54a8 100644
> --- a/tools/perf/util/auxtrace.c
> +++ b/tools/perf/util/auxtrace.c
> @@ -308,7 +308,11 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
>  				       struct auxtrace_buffer *buffer,
>  				       struct auxtrace_buffer **buffer_ptr)
>  {
> -	int err;
> +	int err = -ENOMEM;
> +
> +	buffer = memdup(buffer, sizeof(*buffer));

this is a bit strange, why not make buffer a local variable in this
function then?

> +	if (!buffer)
> +		return -ENOMEM;
>  
>  	if (session->one_mmap) {
>  		buffer->data = buffer->data_offset - session->one_mmap_offset +
> @@ -316,24 +320,28 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
>  	} else if (perf_data__is_pipe(session->data)) {
>  		buffer->data = auxtrace_copy_data(buffer->size, session);
>  		if (!buffer->data)
> -			return -ENOMEM;
> +			goto out_free;
>  		buffer->data_needs_freeing = true;
>  	} else if (BITS_PER_LONG == 32 &&
>  		   buffer->size > BUFFER_LIMIT_FOR_32_BIT) {
>  		err = auxtrace_queues__split_buffer(queues, idx, buffer);
>  		if (err)
> -			return err;
> +			goto out_free;
>  	}
>  
>  	err = auxtrace_queues__queue_buffer(queues, idx, buffer);
>  	if (err)
> -		return err;
> +		goto out_free;
>  
>  	/* FIXME: Doesn't work for split buffer */
>  	if (buffer_ptr)
>  		*buffer_ptr = buffer;
>  
>  	return 0;
> +
> +out_free:
> +	auxtrace_buffer__free(buffer);
> +	return err;
>  }
>  
>  static bool filter_cpu(struct perf_session *session, int cpu)
> @@ -348,36 +356,22 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues,
>  			       union perf_event *event, off_t data_offset,
>  			       struct auxtrace_buffer **buffer_ptr)
>  {
> -	struct auxtrace_buffer *buffer;
> -	unsigned int idx;
> -	int err;
> +	struct auxtrace_buffer buffer = {
> +		.pid = -1,
> +		.tid = event->auxtrace.tid,
> +		.cpu = event->auxtrace.cpu,
> +		.data_offset = data_offset,
> +		.offset = event->auxtrace.offset,
> +		.reference = event->auxtrace.reference,
> +		.size = event->auxtrace.size,
> +	};
> +	unsigned int idx = event->auxtrace.idx;
>  
>  	if (filter_cpu(session, event->auxtrace.cpu))
>  		return 0;
>  
> -	buffer = zalloc(sizeof(struct auxtrace_buffer));
> -	if (!buffer)
> -		return -ENOMEM;
> -
> -	buffer->pid = -1;
> -	buffer->tid = event->auxtrace.tid;
> -	buffer->cpu = event->auxtrace.cpu;
> -	buffer->data_offset = data_offset;
> -	buffer->offset = event->auxtrace.offset;
> -	buffer->reference = event->auxtrace.reference;
> -	buffer->size = event->auxtrace.size;
> -	idx = event->auxtrace.idx;
> -
> -	err = auxtrace_queues__add_buffer(queues, session, idx, buffer,
> -					  buffer_ptr);
> -	if (err)
> -		goto out_err;
> -
> -	return 0;
> -
> -out_err:
> -	auxtrace_buffer__free(buffer);
> -	return err;
> +	return auxtrace_queues__add_buffer(queues, session, idx, &buffer,
> +					   buffer_ptr);
>  }
>  
>  static int auxtrace_queues__add_indexed_event(struct auxtrace_queues *queues,
> -- 
> 1.9.1

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

* Re: [PATCH 6/7] perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer
  2018-03-06 20:25   ` Arnaldo Carvalho de Melo
@ 2018-03-07  8:06     ` Adrian Hunter
  2018-03-07 14:11       ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 24+ messages in thread
From: Adrian Hunter @ 2018-03-07  8:06 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, linux-kernel

On 06/03/18 22:25, Arnaldo Carvalho de Melo wrote:
> Em Tue, Mar 06, 2018 at 11:13:17AM +0200, Adrian Hunter escreveu:
>> In preparation for supporting AUX area sampling buffers,
>> auxtrace_queues__add_buffer() needs to be more generic. To that end, move
>> memory allocation for struct buffer into it.
>>
>> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
>> ---
>>  tools/perf/util/auxtrace.c | 54 +++++++++++++++++++++-------------------------
>>  1 file changed, 24 insertions(+), 30 deletions(-)
>>
>> diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
>> index fb357a00dd86..e1aff91c54a8 100644
>> --- a/tools/perf/util/auxtrace.c
>> +++ b/tools/perf/util/auxtrace.c
>> @@ -308,7 +308,11 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
>>  				       struct auxtrace_buffer *buffer,
>>  				       struct auxtrace_buffer **buffer_ptr)
>>  {
>> -	int err;
>> +	int err = -ENOMEM;
>> +
>> +	buffer = memdup(buffer, sizeof(*buffer));
> 
> this is a bit strange, why not make buffer a local variable in this
> function then?

Do you mean the following?

	struct auxtrace_buffer *new_buf;

	new_buf = memdup(buffer, sizeof(*buffer));

> 
>> +	if (!buffer)
>> +		return -ENOMEM;
>>  
>>  	if (session->one_mmap) {
>>  		buffer->data = buffer->data_offset - session->one_mmap_offset +
>> @@ -316,24 +320,28 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
>>  	} else if (perf_data__is_pipe(session->data)) {
>>  		buffer->data = auxtrace_copy_data(buffer->size, session);
>>  		if (!buffer->data)
>> -			return -ENOMEM;
>> +			goto out_free;
>>  		buffer->data_needs_freeing = true;
>>  	} else if (BITS_PER_LONG == 32 &&
>>  		   buffer->size > BUFFER_LIMIT_FOR_32_BIT) {
>>  		err = auxtrace_queues__split_buffer(queues, idx, buffer);
>>  		if (err)
>> -			return err;
>> +			goto out_free;
>>  	}
>>  
>>  	err = auxtrace_queues__queue_buffer(queues, idx, buffer);
>>  	if (err)
>> -		return err;
>> +		goto out_free;
>>  
>>  	/* FIXME: Doesn't work for split buffer */
>>  	if (buffer_ptr)
>>  		*buffer_ptr = buffer;
>>  
>>  	return 0;
>> +
>> +out_free:
>> +	auxtrace_buffer__free(buffer);
>> +	return err;
>>  }
>>  
>>  static bool filter_cpu(struct perf_session *session, int cpu)
>> @@ -348,36 +356,22 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues,
>>  			       union perf_event *event, off_t data_offset,
>>  			       struct auxtrace_buffer **buffer_ptr)
>>  {
>> -	struct auxtrace_buffer *buffer;
>> -	unsigned int idx;
>> -	int err;
>> +	struct auxtrace_buffer buffer = {
>> +		.pid = -1,
>> +		.tid = event->auxtrace.tid,
>> +		.cpu = event->auxtrace.cpu,
>> +		.data_offset = data_offset,
>> +		.offset = event->auxtrace.offset,
>> +		.reference = event->auxtrace.reference,
>> +		.size = event->auxtrace.size,
>> +	};
>> +	unsigned int idx = event->auxtrace.idx;
>>  
>>  	if (filter_cpu(session, event->auxtrace.cpu))
>>  		return 0;
>>  
>> -	buffer = zalloc(sizeof(struct auxtrace_buffer));
>> -	if (!buffer)
>> -		return -ENOMEM;
>> -
>> -	buffer->pid = -1;
>> -	buffer->tid = event->auxtrace.tid;
>> -	buffer->cpu = event->auxtrace.cpu;
>> -	buffer->data_offset = data_offset;
>> -	buffer->offset = event->auxtrace.offset;
>> -	buffer->reference = event->auxtrace.reference;
>> -	buffer->size = event->auxtrace.size;
>> -	idx = event->auxtrace.idx;
>> -
>> -	err = auxtrace_queues__add_buffer(queues, session, idx, buffer,
>> -					  buffer_ptr);
>> -	if (err)
>> -		goto out_err;
>> -
>> -	return 0;
>> -
>> -out_err:
>> -	auxtrace_buffer__free(buffer);
>> -	return err;
>> +	return auxtrace_queues__add_buffer(queues, session, idx, &buffer,
>> +					   buffer_ptr);
>>  }
>>  
>>  static int auxtrace_queues__add_indexed_event(struct auxtrace_queues *queues,
>> -- 
>> 1.9.1
> 

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

* [tip:perf/urgent] perf auxtrace: Prevent decoding when --no-itrace
  2018-03-06  9:13 ` [PATCH 2/7] perf auxtrace: Prevent decoding when --no-itrace Adrian Hunter
  2018-03-06 14:06   ` Arnaldo Carvalho de Melo
@ 2018-03-07  8:27   ` tip-bot for Adrian Hunter
  1 sibling, 0 replies; 24+ messages in thread
From: tip-bot for Adrian Hunter @ 2018-03-07  8:27 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: hpa, acme, linux-kernel, mingo, adrian.hunter, tglx, jolsa

Commit-ID:  2e2967f4c398e0f984a6c04daa3a79512e2bb74e
Gitweb:     https://git.kernel.org/tip/2e2967f4c398e0f984a6c04daa3a79512e2bb74e
Author:     Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Tue, 6 Mar 2018 11:13:13 +0200
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 6 Mar 2018 11:05:47 -0300

perf auxtrace: Prevent decoding when --no-itrace

Prevent auxtrace_queues__process_index() from queuing AUX area data for
decoding when the --no-itrace option has been used.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1520327598-1317-3-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/auxtrace.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
index 9faf3b5367db..6470ea2aa25e 100644
--- a/tools/perf/util/auxtrace.c
+++ b/tools/perf/util/auxtrace.c
@@ -60,6 +60,12 @@
 #include "sane_ctype.h"
 #include "symbol/kallsyms.h"
 
+static bool auxtrace__dont_decode(struct perf_session *session)
+{
+	return !session->itrace_synth_opts ||
+	       session->itrace_synth_opts->dont_decode;
+}
+
 int auxtrace_mmap__mmap(struct auxtrace_mmap *mm,
 			struct auxtrace_mmap_params *mp,
 			void *userpg, int fd)
@@ -762,6 +768,9 @@ int auxtrace_queues__process_index(struct auxtrace_queues *queues,
 	size_t i;
 	int err;
 
+	if (auxtrace__dont_decode(session))
+		return 0;
+
 	list_for_each_entry(auxtrace_index, &session->auxtrace_index, list) {
 		for (i = 0; i < auxtrace_index->nr; i++) {
 			ent = &auxtrace_index->entries[i];
@@ -892,12 +901,6 @@ out_free:
 	return err;
 }
 
-static bool auxtrace__dont_decode(struct perf_session *session)
-{
-	return !session->itrace_synth_opts ||
-	       session->itrace_synth_opts->dont_decode;
-}
-
 int perf_event__process_auxtrace_info(struct perf_tool *tool __maybe_unused,
 				      union perf_event *event,
 				      struct perf_session *session)

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

* Re: [PATCH 6/7] perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer
  2018-03-07  8:06     ` Adrian Hunter
@ 2018-03-07 14:11       ` Arnaldo Carvalho de Melo
  2018-04-05  6:17         ` Adrian Hunter
  0 siblings, 1 reply; 24+ messages in thread
From: Arnaldo Carvalho de Melo @ 2018-03-07 14:11 UTC (permalink / raw)
  To: Adrian Hunter; +Cc: Jiri Olsa, linux-kernel

Em Wed, Mar 07, 2018 at 10:06:50AM +0200, Adrian Hunter escreveu:
> On 06/03/18 22:25, Arnaldo Carvalho de Melo wrote:
> > Em Tue, Mar 06, 2018 at 11:13:17AM +0200, Adrian Hunter escreveu:
> >> In preparation for supporting AUX area sampling buffers,
> >> auxtrace_queues__add_buffer() needs to be more generic. To that end, move
> >> memory allocation for struct buffer into it.
> >>
> >> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> >> ---
> >>  tools/perf/util/auxtrace.c | 54 +++++++++++++++++++++-------------------------
> >>  1 file changed, 24 insertions(+), 30 deletions(-)
> >>
> >> diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
> >> index fb357a00dd86..e1aff91c54a8 100644
> >> --- a/tools/perf/util/auxtrace.c
> >> +++ b/tools/perf/util/auxtrace.c
> >> @@ -308,7 +308,11 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
> >>  				       struct auxtrace_buffer *buffer,
> >>  				       struct auxtrace_buffer **buffer_ptr)
> >>  {
> >> -	int err;
> >> +	int err = -ENOMEM;
> >> +
> >> +	buffer = memdup(buffer, sizeof(*buffer));
> > 
> > this is a bit strange, why not make buffer a local variable in this
> > function then?
> 
> Do you mean the following?
> 
> 	struct auxtrace_buffer *new_buf;
> 
> 	new_buf = memdup(buffer, sizeof(*buffer));

I hadn't noticed that you were using buffer as both r and l value :-\

If all you want is to receive that buffer, duplicate it and then use
just the duplicate, not needing any reference to the original buffer,
then your code is correct, it just looked strange from a quick look, so
nevermind, I'll continue processing this one and the others.

Thanks,

- Arnaldo
 
> > 
> >> +	if (!buffer)
> >> +		return -ENOMEM;
> >>  
> >>  	if (session->one_mmap) {
> >>  		buffer->data = buffer->data_offset - session->one_mmap_offset +
> >> @@ -316,24 +320,28 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
> >>  	} else if (perf_data__is_pipe(session->data)) {
> >>  		buffer->data = auxtrace_copy_data(buffer->size, session);
> >>  		if (!buffer->data)
> >> -			return -ENOMEM;
> >> +			goto out_free;
> >>  		buffer->data_needs_freeing = true;
> >>  	} else if (BITS_PER_LONG == 32 &&
> >>  		   buffer->size > BUFFER_LIMIT_FOR_32_BIT) {
> >>  		err = auxtrace_queues__split_buffer(queues, idx, buffer);
> >>  		if (err)
> >> -			return err;
> >> +			goto out_free;
> >>  	}
> >>  
> >>  	err = auxtrace_queues__queue_buffer(queues, idx, buffer);
> >>  	if (err)
> >> -		return err;
> >> +		goto out_free;
> >>  
> >>  	/* FIXME: Doesn't work for split buffer */
> >>  	if (buffer_ptr)
> >>  		*buffer_ptr = buffer;
> >>  
> >>  	return 0;
> >> +
> >> +out_free:
> >> +	auxtrace_buffer__free(buffer);
> >> +	return err;
> >>  }
> >>  
> >>  static bool filter_cpu(struct perf_session *session, int cpu)
> >> @@ -348,36 +356,22 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues,
> >>  			       union perf_event *event, off_t data_offset,
> >>  			       struct auxtrace_buffer **buffer_ptr)
> >>  {
> >> -	struct auxtrace_buffer *buffer;
> >> -	unsigned int idx;
> >> -	int err;
> >> +	struct auxtrace_buffer buffer = {
> >> +		.pid = -1,
> >> +		.tid = event->auxtrace.tid,
> >> +		.cpu = event->auxtrace.cpu,
> >> +		.data_offset = data_offset,
> >> +		.offset = event->auxtrace.offset,
> >> +		.reference = event->auxtrace.reference,
> >> +		.size = event->auxtrace.size,
> >> +	};
> >> +	unsigned int idx = event->auxtrace.idx;
> >>  
> >>  	if (filter_cpu(session, event->auxtrace.cpu))
> >>  		return 0;
> >>  
> >> -	buffer = zalloc(sizeof(struct auxtrace_buffer));
> >> -	if (!buffer)
> >> -		return -ENOMEM;
> >> -
> >> -	buffer->pid = -1;
> >> -	buffer->tid = event->auxtrace.tid;
> >> -	buffer->cpu = event->auxtrace.cpu;
> >> -	buffer->data_offset = data_offset;
> >> -	buffer->offset = event->auxtrace.offset;
> >> -	buffer->reference = event->auxtrace.reference;
> >> -	buffer->size = event->auxtrace.size;
> >> -	idx = event->auxtrace.idx;
> >> -
> >> -	err = auxtrace_queues__add_buffer(queues, session, idx, buffer,
> >> -					  buffer_ptr);
> >> -	if (err)
> >> -		goto out_err;
> >> -
> >> -	return 0;
> >> -
> >> -out_err:
> >> -	auxtrace_buffer__free(buffer);
> >> -	return err;
> >> +	return auxtrace_queues__add_buffer(queues, session, idx, &buffer,
> >> +					   buffer_ptr);
> >>  }
> >>  
> >>  static int auxtrace_queues__add_indexed_event(struct auxtrace_queues *queues,
> >> -- 
> >> 1.9.1
> > 

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

* [tip:perf/core] perf record: Combine some auxtrace initialization into a single function
  2018-03-06  9:13 ` [PATCH 1/7] perf record: Combine some auxtrace initialization into a single function Adrian Hunter
@ 2018-03-09  8:38   ` tip-bot for Adrian Hunter
  0 siblings, 0 replies; 24+ messages in thread
From: tip-bot for Adrian Hunter @ 2018-03-09  8:38 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: adrian.hunter, acme, jolsa, tglx, mingo, hpa, linux-kernel

Commit-ID:  4b5ea3bd674f707180b0e8c4f514d30e49f293b3
Gitweb:     https://git.kernel.org/tip/4b5ea3bd674f707180b0e8c4f514d30e49f293b3
Author:     Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Tue, 6 Mar 2018 11:13:12 +0200
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Wed, 7 Mar 2018 10:22:26 -0300

perf record: Combine some auxtrace initialization into a single function

In preparation for adding AUX area sampling support, combine some
auxtrace initialization into a single function.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1520327598-1317-2-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-record.c | 36 ++++++++++++++++++++++++------------
 1 file changed, 24 insertions(+), 12 deletions(-)

diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index 12230ddb6506..14d82f0fe5cc 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -274,6 +274,24 @@ static void record__read_auxtrace_snapshot(struct record *rec)
 	}
 }
 
+static int record__auxtrace_init(struct record *rec)
+{
+	int err;
+
+	if (!rec->itr) {
+		rec->itr = auxtrace_record__init(rec->evlist, &err);
+		if (err)
+			return err;
+	}
+
+	err = auxtrace_parse_snapshot_options(rec->itr, &rec->opts,
+					      rec->opts.auxtrace_snapshot_opts);
+	if (err)
+		return err;
+
+	return auxtrace_parse_filters(rec->evlist);
+}
+
 #else
 
 static inline
@@ -294,6 +312,11 @@ int auxtrace_record__snapshot_start(struct auxtrace_record *itr __maybe_unused)
 	return 0;
 }
 
+static int record__auxtrace_init(struct record *rec __maybe_unused)
+{
+	return 0;
+}
+
 #endif
 
 static int record__mmap_evlist(struct record *rec,
@@ -1727,17 +1750,6 @@ int cmd_record(int argc, const char **argv)
 		alarm(rec->switch_output.time);
 	}
 
-	if (!rec->itr) {
-		rec->itr = auxtrace_record__init(rec->evlist, &err);
-		if (err)
-			goto out;
-	}
-
-	err = auxtrace_parse_snapshot_options(rec->itr, &rec->opts,
-					      rec->opts.auxtrace_snapshot_opts);
-	if (err)
-		goto out;
-
 	/*
 	 * Allow aliases to facilitate the lookup of symbols for address
 	 * filters. Refer to auxtrace_parse_filters().
@@ -1746,7 +1758,7 @@ int cmd_record(int argc, const char **argv)
 
 	symbol__init(NULL);
 
-	err = auxtrace_parse_filters(rec->evlist);
+	err = record__auxtrace_init(rec);
 	if (err)
 		goto out;
 

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

* [tip:perf/core] perf auxtrace: Add missing parameters from kernel-doc comments
  2018-03-06  9:13 ` [PATCH 3/7] perf auxtrace: Add missing parameters from kernel-doc comments Adrian Hunter
@ 2018-03-09  8:40   ` tip-bot for Adrian Hunter
  0 siblings, 0 replies; 24+ messages in thread
From: tip-bot for Adrian Hunter @ 2018-03-09  8:40 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: mingo, hpa, adrian.hunter, jolsa, linux-kernel, acme, tglx

Commit-ID:  b818ec613b42d679604215c188a12cf43164cab0
Gitweb:     https://git.kernel.org/tip/b818ec613b42d679604215c188a12cf43164cab0
Author:     Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Tue, 6 Mar 2018 11:13:14 +0200
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Wed, 7 Mar 2018 10:22:26 -0300

perf auxtrace: Add missing parameters from kernel-doc comments

Add missing parameters from kernel-doc comments.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1520327598-1317-4-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/auxtrace.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/perf/util/auxtrace.h b/tools/perf/util/auxtrace.h
index 453c148d2158..e731f55da072 100644
--- a/tools/perf/util/auxtrace.h
+++ b/tools/perf/util/auxtrace.h
@@ -130,6 +130,7 @@ struct auxtrace_index {
 /**
  * struct auxtrace - session callbacks to allow AUX area data decoding.
  * @process_event: lets the decoder see all session events
+ * @process_auxtrace_event: process a PERF_RECORD_AUXTRACE event
  * @flush_events: process any remaining data
  * @free_events: free resources associated with event processing
  * @free: free resources associated with the session
@@ -301,6 +302,7 @@ struct auxtrace_mmap_params {
  * @parse_snapshot_options: parse snapshot options
  * @reference: provide a 64-bit reference number for auxtrace_event
  * @read_finish: called after reading from an auxtrace mmap
+ * @alignment: alignment (if any) for AUX area data
  */
 struct auxtrace_record {
 	int (*recording_options)(struct auxtrace_record *itr,

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

* [tip:perf/core] perf auxtrace: Rename some buffer-queuing functions
  2018-03-06  9:13 ` [PATCH 4/7] perf auxtrace: Rename some buffer-queuing functions Adrian Hunter
@ 2018-03-09  8:40   ` tip-bot for Adrian Hunter
  0 siblings, 0 replies; 24+ messages in thread
From: tip-bot for Adrian Hunter @ 2018-03-09  8:40 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: jolsa, tglx, acme, adrian.hunter, mingo, linux-kernel, hpa

Commit-ID:  a356a59799d376dd8e4839f29d32f4c6a5582e6d
Gitweb:     https://git.kernel.org/tip/a356a59799d376dd8e4839f29d32f4c6a5582e6d
Author:     Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Tue, 6 Mar 2018 11:13:15 +0200
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Wed, 7 Mar 2018 10:22:27 -0300

perf auxtrace: Rename some buffer-queuing functions

Rename some buffer-queuing functions in preparation for supporting AUX area
sampling buffers.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1520327598-1317-5-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/auxtrace.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
index 6470ea2aa25e..6ea840ec5b7f 100644
--- a/tools/perf/util/auxtrace.c
+++ b/tools/perf/util/auxtrace.c
@@ -233,9 +233,9 @@ static void *auxtrace_copy_data(u64 size, struct perf_session *session)
 	return p;
 }
 
-static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
-				       unsigned int idx,
-				       struct auxtrace_buffer *buffer)
+static int auxtrace_queues__queue_buffer(struct auxtrace_queues *queues,
+					 unsigned int idx,
+					 struct auxtrace_buffer *buffer)
 {
 	struct auxtrace_queue *queue;
 	int err;
@@ -286,7 +286,7 @@ static int auxtrace_queues__split_buffer(struct auxtrace_queues *queues,
 			return -ENOMEM;
 		b->size = BUFFER_LIMIT_FOR_32_BIT;
 		b->consecutive = consecutive;
-		err = auxtrace_queues__add_buffer(queues, idx, b);
+		err = auxtrace_queues__queue_buffer(queues, idx, b);
 		if (err) {
 			auxtrace_buffer__free(b);
 			return err;
@@ -302,10 +302,10 @@ static int auxtrace_queues__split_buffer(struct auxtrace_queues *queues,
 	return 0;
 }
 
-static int auxtrace_queues__add_event_buffer(struct auxtrace_queues *queues,
-					     struct perf_session *session,
-					     unsigned int idx,
-					     struct auxtrace_buffer *buffer)
+static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
+				       struct perf_session *session,
+				       unsigned int idx,
+				       struct auxtrace_buffer *buffer)
 {
 	if (session->one_mmap) {
 		buffer->data = buffer->data_offset - session->one_mmap_offset +
@@ -324,7 +324,7 @@ static int auxtrace_queues__add_event_buffer(struct auxtrace_queues *queues,
 			return err;
 	}
 
-	return auxtrace_queues__add_buffer(queues, idx, buffer);
+	return auxtrace_queues__queue_buffer(queues, idx, buffer);
 }
 
 static bool filter_cpu(struct perf_session *session, int cpu)
@@ -359,7 +359,7 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues,
 	buffer->size = event->auxtrace.size;
 	idx = event->auxtrace.idx;
 
-	err = auxtrace_queues__add_event_buffer(queues, session, idx, buffer);
+	err = auxtrace_queues__add_buffer(queues, session, idx, buffer);
 	if (err)
 		goto out_err;
 

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

* [tip:perf/core] perf auxtrace: Make auxtrace_queues__add_buffer() return buffer_ptr
  2018-03-06  9:13 ` [PATCH 5/7] perf auxtrace: Make auxtrace_queues__add_buffer() return buffer_ptr Adrian Hunter
@ 2018-03-09  8:41   ` tip-bot for Adrian Hunter
  0 siblings, 0 replies; 24+ messages in thread
From: tip-bot for Adrian Hunter @ 2018-03-09  8:41 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: jolsa, linux-kernel, tglx, mingo, acme, hpa, adrian.hunter

Commit-ID:  4c4548437c5722effcaf5b2dea85abd321935627
Gitweb:     https://git.kernel.org/tip/4c4548437c5722effcaf5b2dea85abd321935627
Author:     Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Tue, 6 Mar 2018 11:13:16 +0200
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Wed, 7 Mar 2018 10:22:27 -0300

perf auxtrace: Make auxtrace_queues__add_buffer() return buffer_ptr

In preparation for supporting AUX area sampling buffers,
auxtrace_queues__add_buffer() needs to be more generic. To that end, make
it return buffer_ptr instead of the caller.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1520327598-1317-6-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/auxtrace.c | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
index 6ea840ec5b7f..fb357a00dd86 100644
--- a/tools/perf/util/auxtrace.c
+++ b/tools/perf/util/auxtrace.c
@@ -305,8 +305,11 @@ static int auxtrace_queues__split_buffer(struct auxtrace_queues *queues,
 static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
 				       struct perf_session *session,
 				       unsigned int idx,
-				       struct auxtrace_buffer *buffer)
+				       struct auxtrace_buffer *buffer,
+				       struct auxtrace_buffer **buffer_ptr)
 {
+	int err;
+
 	if (session->one_mmap) {
 		buffer->data = buffer->data_offset - session->one_mmap_offset +
 			       session->one_mmap_addr;
@@ -317,14 +320,20 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
 		buffer->data_needs_freeing = true;
 	} else if (BITS_PER_LONG == 32 &&
 		   buffer->size > BUFFER_LIMIT_FOR_32_BIT) {
-		int err;
-
 		err = auxtrace_queues__split_buffer(queues, idx, buffer);
 		if (err)
 			return err;
 	}
 
-	return auxtrace_queues__queue_buffer(queues, idx, buffer);
+	err = auxtrace_queues__queue_buffer(queues, idx, buffer);
+	if (err)
+		return err;
+
+	/* FIXME: Doesn't work for split buffer */
+	if (buffer_ptr)
+		*buffer_ptr = buffer;
+
+	return 0;
 }
 
 static bool filter_cpu(struct perf_session *session, int cpu)
@@ -359,13 +368,11 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues,
 	buffer->size = event->auxtrace.size;
 	idx = event->auxtrace.idx;
 
-	err = auxtrace_queues__add_buffer(queues, session, idx, buffer);
+	err = auxtrace_queues__add_buffer(queues, session, idx, buffer,
+					  buffer_ptr);
 	if (err)
 		goto out_err;
 
-	if (buffer_ptr)
-		*buffer_ptr = buffer;
-
 	return 0;
 
 out_err:

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

* Re: [PATCH 6/7] perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer
  2018-03-07 14:11       ` Arnaldo Carvalho de Melo
@ 2018-04-05  6:17         ` Adrian Hunter
  2018-04-05 11:33           ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 24+ messages in thread
From: Adrian Hunter @ 2018-04-05  6:17 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, linux-kernel

On 07/03/18 16:11, Arnaldo Carvalho de Melo wrote:
> Em Wed, Mar 07, 2018 at 10:06:50AM +0200, Adrian Hunter escreveu:
>> On 06/03/18 22:25, Arnaldo Carvalho de Melo wrote:
>>> Em Tue, Mar 06, 2018 at 11:13:17AM +0200, Adrian Hunter escreveu:
>>>> In preparation for supporting AUX area sampling buffers,
>>>> auxtrace_queues__add_buffer() needs to be more generic. To that end, move
>>>> memory allocation for struct buffer into it.
>>>>
>>>> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
>>>> ---
>>>>  tools/perf/util/auxtrace.c | 54 +++++++++++++++++++++-------------------------
>>>>  1 file changed, 24 insertions(+), 30 deletions(-)
>>>>
>>>> diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
>>>> index fb357a00dd86..e1aff91c54a8 100644
>>>> --- a/tools/perf/util/auxtrace.c
>>>> +++ b/tools/perf/util/auxtrace.c
>>>> @@ -308,7 +308,11 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
>>>>  				       struct auxtrace_buffer *buffer,
>>>>  				       struct auxtrace_buffer **buffer_ptr)
>>>>  {
>>>> -	int err;
>>>> +	int err = -ENOMEM;
>>>> +
>>>> +	buffer = memdup(buffer, sizeof(*buffer));
>>>
>>> this is a bit strange, why not make buffer a local variable in this
>>> function then?
>>
>> Do you mean the following?
>>
>> 	struct auxtrace_buffer *new_buf;
>>
>> 	new_buf = memdup(buffer, sizeof(*buffer));
> 
> I hadn't noticed that you were using buffer as both r and l value :-\
> 
> If all you want is to receive that buffer, duplicate it and then use
> just the duplicate, not needing any reference to the original buffer,
> then your code is correct, it just looked strange from a quick look, so
> nevermind, I'll continue processing this one and the others.

Looks like this patch and patch 7 "perf auxtrace: Make
auxtrace_queues__add_buffer() do CPU filtering" got left behind.  They still
apply cleanly.

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

* Re: [PATCH 6/7] perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer
  2018-04-05  6:17         ` Adrian Hunter
@ 2018-04-05 11:33           ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 24+ messages in thread
From: Arnaldo Carvalho de Melo @ 2018-04-05 11:33 UTC (permalink / raw)
  To: Adrian Hunter; +Cc: Jiri Olsa, linux-kernel

Em Thu, Apr 05, 2018 at 09:17:01AM +0300, Adrian Hunter escreveu:
> On 07/03/18 16:11, Arnaldo Carvalho de Melo wrote:
> > Em Wed, Mar 07, 2018 at 10:06:50AM +0200, Adrian Hunter escreveu:
> >> On 06/03/18 22:25, Arnaldo Carvalho de Melo wrote:
> >>> Em Tue, Mar 06, 2018 at 11:13:17AM +0200, Adrian Hunter escreveu:
> >>>> In preparation for supporting AUX area sampling buffers,
> >>>> auxtrace_queues__add_buffer() needs to be more generic. To that end, move
> >>>> memory allocation for struct buffer into it.
> >>>>
> >>>> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> >>>> ---
> >>>>  tools/perf/util/auxtrace.c | 54 +++++++++++++++++++++-------------------------
> >>>>  1 file changed, 24 insertions(+), 30 deletions(-)
> >>>>
> >>>> diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
> >>>> index fb357a00dd86..e1aff91c54a8 100644
> >>>> --- a/tools/perf/util/auxtrace.c
> >>>> +++ b/tools/perf/util/auxtrace.c
> >>>> @@ -308,7 +308,11 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
> >>>>  				       struct auxtrace_buffer *buffer,
> >>>>  				       struct auxtrace_buffer **buffer_ptr)
> >>>>  {
> >>>> -	int err;
> >>>> +	int err = -ENOMEM;
> >>>> +
> >>>> +	buffer = memdup(buffer, sizeof(*buffer));
> >>>
> >>> this is a bit strange, why not make buffer a local variable in this
> >>> function then?
> >>
> >> Do you mean the following?
> >>
> >> 	struct auxtrace_buffer *new_buf;
> >>
> >> 	new_buf = memdup(buffer, sizeof(*buffer));
> > 
> > I hadn't noticed that you were using buffer as both r and l value :-\
> > 
> > If all you want is to receive that buffer, duplicate it and then use
> > just the duplicate, not needing any reference to the original buffer,
> > then your code is correct, it just looked strange from a quick look, so
> > nevermind, I'll continue processing this one and the others.
> 
> Looks like this patch and patch 7 "perf auxtrace: Make
> auxtrace_queues__add_buffer() do CPU filtering" got left behind.  They still
> apply cleanly.

Thanks for the reminder, I'll process it.

- Arnaldo

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

* Re: [PATCH 7/7] perf auxtrace: Make auxtrace_queues__add_buffer() do CPU filtering
  2018-03-06  9:13 ` [PATCH 7/7] perf auxtrace: Make auxtrace_queues__add_buffer() do CPU filtering Adrian Hunter
@ 2018-04-06 11:44   ` Adrian Hunter
  2018-04-10  5:28   ` [tip:perf/urgent] " tip-bot for Adrian Hunter
  1 sibling, 0 replies; 24+ messages in thread
From: Adrian Hunter @ 2018-04-06 11:44 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, linux-kernel

Hi Arnaldo

I just saw you have patch 6 but still not this one.

Regards
Adrian

On 06/03/18 11:13, Adrian Hunter wrote:
> In preparation for supporting AUX area sampling buffers,
> auxtrace_queues__add_buffer() needs to be more generic. To that end, move
> CPU filtering into it.
> 
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
>  tools/perf/util/auxtrace.c | 20 ++++++++++----------
>  1 file changed, 10 insertions(+), 10 deletions(-)
> 
> diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
> index e1aff91c54a8..857de69a5361 100644
> --- a/tools/perf/util/auxtrace.c
> +++ b/tools/perf/util/auxtrace.c
> @@ -302,6 +302,13 @@ static int auxtrace_queues__split_buffer(struct auxtrace_queues *queues,
>  	return 0;
>  }
>  
> +static bool filter_cpu(struct perf_session *session, int cpu)
> +{
> +	unsigned long *cpu_bitmap = session->itrace_synth_opts->cpu_bitmap;
> +
> +	return cpu_bitmap && cpu != -1 && !test_bit(cpu, cpu_bitmap);
> +}
> +
>  static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
>  				       struct perf_session *session,
>  				       unsigned int idx,
> @@ -310,6 +317,9 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
>  {
>  	int err = -ENOMEM;
>  
> +	if (filter_cpu(session, buffer->cpu))
> +		return 0;
> +
>  	buffer = memdup(buffer, sizeof(*buffer));
>  	if (!buffer)
>  		return -ENOMEM;
> @@ -344,13 +354,6 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
>  	return err;
>  }
>  
> -static bool filter_cpu(struct perf_session *session, int cpu)
> -{
> -	unsigned long *cpu_bitmap = session->itrace_synth_opts->cpu_bitmap;
> -
> -	return cpu_bitmap && cpu != -1 && !test_bit(cpu, cpu_bitmap);
> -}
> -
>  int auxtrace_queues__add_event(struct auxtrace_queues *queues,
>  			       struct perf_session *session,
>  			       union perf_event *event, off_t data_offset,
> @@ -367,9 +370,6 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues,
>  	};
>  	unsigned int idx = event->auxtrace.idx;
>  
> -	if (filter_cpu(session, event->auxtrace.cpu))
> -		return 0;
> -
>  	return auxtrace_queues__add_buffer(queues, session, idx, &buffer,
>  					   buffer_ptr);
>  }
> 

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

* [tip:perf/urgent] perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer
  2018-03-06  9:13 ` [PATCH 6/7] perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer Adrian Hunter
  2018-03-06 20:25   ` Arnaldo Carvalho de Melo
@ 2018-04-06 17:04   ` tip-bot for Adrian Hunter
  1 sibling, 0 replies; 24+ messages in thread
From: tip-bot for Adrian Hunter @ 2018-04-06 17:04 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: jolsa, hpa, adrian.hunter, tglx, acme, linux-kernel, mingo

Commit-ID:  0d75f123a6dcdacb3550b0c3c44a283f7259289e
Gitweb:     https://git.kernel.org/tip/0d75f123a6dcdacb3550b0c3c44a283f7259289e
Author:     Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Tue, 6 Mar 2018 11:13:17 +0200
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Thu, 5 Apr 2018 11:03:33 -0300

perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer

In preparation for supporting AUX area sampling buffers,
auxtrace_queues__add_buffer() needs to be more generic. To that end,
move memory allocation for struct buffer into it.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1520327598-1317-7-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/auxtrace.c | 54 +++++++++++++++++++++-------------------------
 1 file changed, 24 insertions(+), 30 deletions(-)

diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
index fb357a00dd86..e1aff91c54a8 100644
--- a/tools/perf/util/auxtrace.c
+++ b/tools/perf/util/auxtrace.c
@@ -308,7 +308,11 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
 				       struct auxtrace_buffer *buffer,
 				       struct auxtrace_buffer **buffer_ptr)
 {
-	int err;
+	int err = -ENOMEM;
+
+	buffer = memdup(buffer, sizeof(*buffer));
+	if (!buffer)
+		return -ENOMEM;
 
 	if (session->one_mmap) {
 		buffer->data = buffer->data_offset - session->one_mmap_offset +
@@ -316,24 +320,28 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
 	} else if (perf_data__is_pipe(session->data)) {
 		buffer->data = auxtrace_copy_data(buffer->size, session);
 		if (!buffer->data)
-			return -ENOMEM;
+			goto out_free;
 		buffer->data_needs_freeing = true;
 	} else if (BITS_PER_LONG == 32 &&
 		   buffer->size > BUFFER_LIMIT_FOR_32_BIT) {
 		err = auxtrace_queues__split_buffer(queues, idx, buffer);
 		if (err)
-			return err;
+			goto out_free;
 	}
 
 	err = auxtrace_queues__queue_buffer(queues, idx, buffer);
 	if (err)
-		return err;
+		goto out_free;
 
 	/* FIXME: Doesn't work for split buffer */
 	if (buffer_ptr)
 		*buffer_ptr = buffer;
 
 	return 0;
+
+out_free:
+	auxtrace_buffer__free(buffer);
+	return err;
 }
 
 static bool filter_cpu(struct perf_session *session, int cpu)
@@ -348,36 +356,22 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues,
 			       union perf_event *event, off_t data_offset,
 			       struct auxtrace_buffer **buffer_ptr)
 {
-	struct auxtrace_buffer *buffer;
-	unsigned int idx;
-	int err;
+	struct auxtrace_buffer buffer = {
+		.pid = -1,
+		.tid = event->auxtrace.tid,
+		.cpu = event->auxtrace.cpu,
+		.data_offset = data_offset,
+		.offset = event->auxtrace.offset,
+		.reference = event->auxtrace.reference,
+		.size = event->auxtrace.size,
+	};
+	unsigned int idx = event->auxtrace.idx;
 
 	if (filter_cpu(session, event->auxtrace.cpu))
 		return 0;
 
-	buffer = zalloc(sizeof(struct auxtrace_buffer));
-	if (!buffer)
-		return -ENOMEM;
-
-	buffer->pid = -1;
-	buffer->tid = event->auxtrace.tid;
-	buffer->cpu = event->auxtrace.cpu;
-	buffer->data_offset = data_offset;
-	buffer->offset = event->auxtrace.offset;
-	buffer->reference = event->auxtrace.reference;
-	buffer->size = event->auxtrace.size;
-	idx = event->auxtrace.idx;
-
-	err = auxtrace_queues__add_buffer(queues, session, idx, buffer,
-					  buffer_ptr);
-	if (err)
-		goto out_err;
-
-	return 0;
-
-out_err:
-	auxtrace_buffer__free(buffer);
-	return err;
+	return auxtrace_queues__add_buffer(queues, session, idx, &buffer,
+					   buffer_ptr);
 }
 
 static int auxtrace_queues__add_indexed_event(struct auxtrace_queues *queues,

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

* [tip:perf/urgent] perf auxtrace: Make auxtrace_queues__add_buffer() do CPU filtering
  2018-03-06  9:13 ` [PATCH 7/7] perf auxtrace: Make auxtrace_queues__add_buffer() do CPU filtering Adrian Hunter
  2018-04-06 11:44   ` Adrian Hunter
@ 2018-04-10  5:28   ` tip-bot for Adrian Hunter
  1 sibling, 0 replies; 24+ messages in thread
From: tip-bot for Adrian Hunter @ 2018-04-10  5:28 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: hpa, mingo, jolsa, linux-kernel, adrian.hunter, acme, tglx

Commit-ID:  b238db655796e74b59d9ece58b645ad0b494d615
Gitweb:     https://git.kernel.org/tip/b238db655796e74b59d9ece58b645ad0b494d615
Author:     Adrian Hunter <adrian.hunter@intel.com>
AuthorDate: Tue, 6 Mar 2018 11:13:18 +0200
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Fri, 6 Apr 2018 09:40:41 -0300

perf auxtrace: Make auxtrace_queues__add_buffer() do CPU filtering

In preparation for supporting AUX area sampling buffers,
auxtrace_queues__add_buffer() needs to be more generic. To that end, move
CPU filtering into it.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1520327598-1317-8-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/auxtrace.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
index e1aff91c54a8..857de69a5361 100644
--- a/tools/perf/util/auxtrace.c
+++ b/tools/perf/util/auxtrace.c
@@ -302,6 +302,13 @@ static int auxtrace_queues__split_buffer(struct auxtrace_queues *queues,
 	return 0;
 }
 
+static bool filter_cpu(struct perf_session *session, int cpu)
+{
+	unsigned long *cpu_bitmap = session->itrace_synth_opts->cpu_bitmap;
+
+	return cpu_bitmap && cpu != -1 && !test_bit(cpu, cpu_bitmap);
+}
+
 static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
 				       struct perf_session *session,
 				       unsigned int idx,
@@ -310,6 +317,9 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
 {
 	int err = -ENOMEM;
 
+	if (filter_cpu(session, buffer->cpu))
+		return 0;
+
 	buffer = memdup(buffer, sizeof(*buffer));
 	if (!buffer)
 		return -ENOMEM;
@@ -344,13 +354,6 @@ out_free:
 	return err;
 }
 
-static bool filter_cpu(struct perf_session *session, int cpu)
-{
-	unsigned long *cpu_bitmap = session->itrace_synth_opts->cpu_bitmap;
-
-	return cpu_bitmap && cpu != -1 && !test_bit(cpu, cpu_bitmap);
-}
-
 int auxtrace_queues__add_event(struct auxtrace_queues *queues,
 			       struct perf_session *session,
 			       union perf_event *event, off_t data_offset,
@@ -367,9 +370,6 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues,
 	};
 	unsigned int idx = event->auxtrace.idx;
 
-	if (filter_cpu(session, event->auxtrace.cpu))
-		return 0;
-
 	return auxtrace_queues__add_buffer(queues, session, idx, &buffer,
 					   buffer_ptr);
 }

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

end of thread, other threads:[~2018-04-10  5:28 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-06  9:13 [PATCH 0/7] perf tools: Prepare for AUX area sampling support Adrian Hunter
2018-03-06  9:13 ` [PATCH 1/7] perf record: Combine some auxtrace initialization into a single function Adrian Hunter
2018-03-09  8:38   ` [tip:perf/core] " tip-bot for Adrian Hunter
2018-03-06  9:13 ` [PATCH 2/7] perf auxtrace: Prevent decoding when --no-itrace Adrian Hunter
2018-03-06 14:06   ` Arnaldo Carvalho de Melo
2018-03-06 14:21     ` Adrian Hunter
2018-03-06 14:32       ` Arnaldo Carvalho de Melo
2018-03-07  8:27   ` [tip:perf/urgent] " tip-bot for Adrian Hunter
2018-03-06  9:13 ` [PATCH 3/7] perf auxtrace: Add missing parameters from kernel-doc comments Adrian Hunter
2018-03-09  8:40   ` [tip:perf/core] " tip-bot for Adrian Hunter
2018-03-06  9:13 ` [PATCH 4/7] perf auxtrace: Rename some buffer-queuing functions Adrian Hunter
2018-03-09  8:40   ` [tip:perf/core] " tip-bot for Adrian Hunter
2018-03-06  9:13 ` [PATCH 5/7] perf auxtrace: Make auxtrace_queues__add_buffer() return buffer_ptr Adrian Hunter
2018-03-09  8:41   ` [tip:perf/core] " tip-bot for Adrian Hunter
2018-03-06  9:13 ` [PATCH 6/7] perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer Adrian Hunter
2018-03-06 20:25   ` Arnaldo Carvalho de Melo
2018-03-07  8:06     ` Adrian Hunter
2018-03-07 14:11       ` Arnaldo Carvalho de Melo
2018-04-05  6:17         ` Adrian Hunter
2018-04-05 11:33           ` Arnaldo Carvalho de Melo
2018-04-06 17:04   ` [tip:perf/urgent] " tip-bot for Adrian Hunter
2018-03-06  9:13 ` [PATCH 7/7] perf auxtrace: Make auxtrace_queues__add_buffer() do CPU filtering Adrian Hunter
2018-04-06 11:44   ` Adrian Hunter
2018-04-10  5:28   ` [tip:perf/urgent] " tip-bot for Adrian Hunter

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.