linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ingo Molnar <mingo@kernel.org>, Thomas Gleixner <tglx@linutronix.de>
Cc: Jiri Olsa <jolsa@kernel.org>, Namhyung Kim <namhyung@kernel.org>,
	Clark Williams <williams@redhat.com>,
	linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	Leo Yan <leo.yan@linaro.org>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Suzuki Poulouse <suzuki.poulose@arm.com>,
	coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org,
	Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: [PATCH 43/85] perf cs-etm: Move packet queue out of decoder structure
Date: Tue, 11 Jun 2019 15:58:29 -0300	[thread overview]
Message-ID: <20190611185911.11645-44-acme@kernel.org> (raw)
In-Reply-To: <20190611185911.11645-1-acme@kernel.org>

From: Mathieu Poirier <mathieu.poirier@linaro.org>

The decoder needs to work with more than one traceID queue if we want to
support CPU-wide scenarios with N:1 source/sink topologies.  As such
move the packet buffer and related fields out of the decoder structure
and into the cs_etm_queue structure.

Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Tested-by: Leo Yan <leo.yan@linaro.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
Cc: coresight@lists.linaro.org
Cc: linux-arm-kernel@lists.infradead.org
Link: http://lkml.kernel.org/r/20190524173508.29044-8-mathieu.poirier@linaro.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 .../perf/util/cs-etm-decoder/cs-etm-decoder.c | 129 +++++++-----------
 .../perf/util/cs-etm-decoder/cs-etm-decoder.h |  36 +----
 tools/perf/util/cs-etm.c                      |  37 ++++-
 tools/perf/util/cs-etm.h                      |  53 +++++++
 4 files changed, 144 insertions(+), 111 deletions(-)

diff --git a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c
index 5dafec421b0d..3ac238e58901 100644
--- a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c
+++ b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c
@@ -18,8 +18,6 @@
 #include "intlist.h"
 #include "util.h"
 
-#define MAX_BUFFER 1024
-
 /* use raw logging */
 #ifdef CS_DEBUG_RAW
 #define CS_LOG_RAW_FRAMES
@@ -31,18 +29,12 @@
 #endif
 #endif
 
-#define CS_ETM_INVAL_ADDR	0xdeadbeefdeadbeefUL
-
 struct cs_etm_decoder {
 	void *data;
 	void (*packet_printer)(const char *msg);
 	dcd_tree_handle_t dcd_tree;
 	cs_etm_mem_cb_type mem_access;
 	ocsd_datapath_resp_t prev_return;
-	u32 packet_count;
-	u32 head;
-	u32 tail;
-	struct cs_etm_packet packet_buffer[MAX_BUFFER];
 };
 
 static u32
@@ -88,14 +80,14 @@ int cs_etm_decoder__reset(struct cs_etm_decoder *decoder)
 	return 0;
 }
 
-int cs_etm_decoder__get_packet(struct cs_etm_decoder *decoder,
+int cs_etm_decoder__get_packet(struct cs_etm_packet_queue *packet_queue,
 			       struct cs_etm_packet *packet)
 {
-	if (!decoder || !packet)
+	if (!packet_queue || !packet)
 		return -EINVAL;
 
 	/* Nothing to do, might as well just return */
-	if (decoder->packet_count == 0)
+	if (packet_queue->packet_count == 0)
 		return 0;
 	/*
 	 * The queueing process in function cs_etm_decoder__buffer_packet()
@@ -106,11 +98,12 @@ int cs_etm_decoder__get_packet(struct cs_etm_decoder *decoder,
 	 * value.  Otherwise the first element of the packet queue is not
 	 * used.
 	 */
-	decoder->head = (decoder->head + 1) & (MAX_BUFFER - 1);
+	packet_queue->head = (packet_queue->head + 1) &
+			     (CS_ETM_PACKET_MAX_BUFFER - 1);
 
-	*packet = decoder->packet_buffer[decoder->head];
+	*packet = packet_queue->packet_buffer[packet_queue->head];
 
-	decoder->packet_count--;
+	packet_queue->packet_count--;
 
 	return 1;
 }
@@ -276,84 +269,60 @@ cs_etm_decoder__create_etm_packet_printer(struct cs_etm_trace_params *t_params,
 						     trace_config);
 }
 
-static void cs_etm_decoder__clear_buffer(struct cs_etm_decoder *decoder)
-{
-	int i;
-
-	decoder->head = 0;
-	decoder->tail = 0;
-	decoder->packet_count = 0;
-	for (i = 0; i < MAX_BUFFER; i++) {
-		decoder->packet_buffer[i].isa = CS_ETM_ISA_UNKNOWN;
-		decoder->packet_buffer[i].start_addr = CS_ETM_INVAL_ADDR;
-		decoder->packet_buffer[i].end_addr = CS_ETM_INVAL_ADDR;
-		decoder->packet_buffer[i].instr_count = 0;
-		decoder->packet_buffer[i].last_instr_taken_branch = false;
-		decoder->packet_buffer[i].last_instr_size = 0;
-		decoder->packet_buffer[i].last_instr_type = 0;
-		decoder->packet_buffer[i].last_instr_subtype = 0;
-		decoder->packet_buffer[i].last_instr_cond = 0;
-		decoder->packet_buffer[i].flags = 0;
-		decoder->packet_buffer[i].exception_number = UINT32_MAX;
-		decoder->packet_buffer[i].trace_chan_id = UINT8_MAX;
-		decoder->packet_buffer[i].cpu = INT_MIN;
-	}
-}
-
 static ocsd_datapath_resp_t
-cs_etm_decoder__buffer_packet(struct cs_etm_decoder *decoder,
+cs_etm_decoder__buffer_packet(struct cs_etm_packet_queue *packet_queue,
 			      const u8 trace_chan_id,
 			      enum cs_etm_sample_type sample_type)
 {
 	u32 et = 0;
 	int cpu;
 
-	if (decoder->packet_count >= MAX_BUFFER - 1)
+	if (packet_queue->packet_count >= CS_ETM_PACKET_MAX_BUFFER - 1)
 		return OCSD_RESP_FATAL_SYS_ERR;
 
 	if (cs_etm__get_cpu(trace_chan_id, &cpu) < 0)
 		return OCSD_RESP_FATAL_SYS_ERR;
 
-	et = decoder->tail;
-	et = (et + 1) & (MAX_BUFFER - 1);
-	decoder->tail = et;
-	decoder->packet_count++;
-
-	decoder->packet_buffer[et].sample_type = sample_type;
-	decoder->packet_buffer[et].isa = CS_ETM_ISA_UNKNOWN;
-	decoder->packet_buffer[et].cpu = cpu;
-	decoder->packet_buffer[et].start_addr = CS_ETM_INVAL_ADDR;
-	decoder->packet_buffer[et].end_addr = CS_ETM_INVAL_ADDR;
-	decoder->packet_buffer[et].instr_count = 0;
-	decoder->packet_buffer[et].last_instr_taken_branch = false;
-	decoder->packet_buffer[et].last_instr_size = 0;
-	decoder->packet_buffer[et].last_instr_type = 0;
-	decoder->packet_buffer[et].last_instr_subtype = 0;
-	decoder->packet_buffer[et].last_instr_cond = 0;
-	decoder->packet_buffer[et].flags = 0;
-	decoder->packet_buffer[et].exception_number = UINT32_MAX;
-	decoder->packet_buffer[et].trace_chan_id = trace_chan_id;
-
-	if (decoder->packet_count == MAX_BUFFER - 1)
+	et = packet_queue->tail;
+	et = (et + 1) & (CS_ETM_PACKET_MAX_BUFFER - 1);
+	packet_queue->tail = et;
+	packet_queue->packet_count++;
+
+	packet_queue->packet_buffer[et].sample_type = sample_type;
+	packet_queue->packet_buffer[et].isa = CS_ETM_ISA_UNKNOWN;
+	packet_queue->packet_buffer[et].cpu = cpu;
+	packet_queue->packet_buffer[et].start_addr = CS_ETM_INVAL_ADDR;
+	packet_queue->packet_buffer[et].end_addr = CS_ETM_INVAL_ADDR;
+	packet_queue->packet_buffer[et].instr_count = 0;
+	packet_queue->packet_buffer[et].last_instr_taken_branch = false;
+	packet_queue->packet_buffer[et].last_instr_size = 0;
+	packet_queue->packet_buffer[et].last_instr_type = 0;
+	packet_queue->packet_buffer[et].last_instr_subtype = 0;
+	packet_queue->packet_buffer[et].last_instr_cond = 0;
+	packet_queue->packet_buffer[et].flags = 0;
+	packet_queue->packet_buffer[et].exception_number = UINT32_MAX;
+	packet_queue->packet_buffer[et].trace_chan_id = trace_chan_id;
+
+	if (packet_queue->packet_count == CS_ETM_PACKET_MAX_BUFFER - 1)
 		return OCSD_RESP_WAIT;
 
 	return OCSD_RESP_CONT;
 }
 
 static ocsd_datapath_resp_t
-cs_etm_decoder__buffer_range(struct cs_etm_decoder *decoder,
+cs_etm_decoder__buffer_range(struct cs_etm_packet_queue *packet_queue,
 			     const ocsd_generic_trace_elem *elem,
 			     const uint8_t trace_chan_id)
 {
 	int ret = 0;
 	struct cs_etm_packet *packet;
 
-	ret = cs_etm_decoder__buffer_packet(decoder, trace_chan_id,
+	ret = cs_etm_decoder__buffer_packet(packet_queue, trace_chan_id,
 					    CS_ETM_RANGE);
 	if (ret != OCSD_RESP_CONT && ret != OCSD_RESP_WAIT)
 		return ret;
 
-	packet = &decoder->packet_buffer[decoder->tail];
+	packet = &packet_queue->packet_buffer[packet_queue->tail];
 
 	switch (elem->isa) {
 	case ocsd_isa_aarch64:
@@ -400,36 +369,36 @@ cs_etm_decoder__buffer_range(struct cs_etm_decoder *decoder,
 }
 
 static ocsd_datapath_resp_t
-cs_etm_decoder__buffer_discontinuity(struct cs_etm_decoder *decoder,
-					   const uint8_t trace_chan_id)
+cs_etm_decoder__buffer_discontinuity(struct cs_etm_packet_queue *queue,
+				     const uint8_t trace_chan_id)
 {
-	return cs_etm_decoder__buffer_packet(decoder, trace_chan_id,
+	return cs_etm_decoder__buffer_packet(queue, trace_chan_id,
 					     CS_ETM_DISCONTINUITY);
 }
 
 static ocsd_datapath_resp_t
-cs_etm_decoder__buffer_exception(struct cs_etm_decoder *decoder,
+cs_etm_decoder__buffer_exception(struct cs_etm_packet_queue *queue,
 				 const ocsd_generic_trace_elem *elem,
 				 const uint8_t trace_chan_id)
 {	int ret = 0;
 	struct cs_etm_packet *packet;
 
-	ret = cs_etm_decoder__buffer_packet(decoder, trace_chan_id,
+	ret = cs_etm_decoder__buffer_packet(queue, trace_chan_id,
 					    CS_ETM_EXCEPTION);
 	if (ret != OCSD_RESP_CONT && ret != OCSD_RESP_WAIT)
 		return ret;
 
-	packet = &decoder->packet_buffer[decoder->tail];
+	packet = &queue->packet_buffer[queue->tail];
 	packet->exception_number = elem->exception_number;
 
 	return ret;
 }
 
 static ocsd_datapath_resp_t
-cs_etm_decoder__buffer_exception_ret(struct cs_etm_decoder *decoder,
+cs_etm_decoder__buffer_exception_ret(struct cs_etm_packet_queue *queue,
 				     const uint8_t trace_chan_id)
 {
-	return cs_etm_decoder__buffer_packet(decoder, trace_chan_id,
+	return cs_etm_decoder__buffer_packet(queue, trace_chan_id,
 					     CS_ETM_EXCEPTION_RET);
 }
 
@@ -441,6 +410,13 @@ static ocsd_datapath_resp_t cs_etm_decoder__gen_trace_elem_printer(
 {
 	ocsd_datapath_resp_t resp = OCSD_RESP_CONT;
 	struct cs_etm_decoder *decoder = (struct cs_etm_decoder *) context;
+	struct cs_etm_queue *etmq = decoder->data;
+	struct cs_etm_packet_queue *packet_queue;
+
+	/* First get the packet queue */
+	packet_queue = cs_etm__etmq_get_packet_queue(etmq);
+	if (!packet_queue)
+		return OCSD_RESP_FATAL_SYS_ERR;
 
 	switch (elem->elem_type) {
 	case OCSD_GEN_TRC_ELEM_UNKNOWN:
@@ -448,19 +424,19 @@ static ocsd_datapath_resp_t cs_etm_decoder__gen_trace_elem_printer(
 	case OCSD_GEN_TRC_ELEM_EO_TRACE:
 	case OCSD_GEN_TRC_ELEM_NO_SYNC:
 	case OCSD_GEN_TRC_ELEM_TRACE_ON:
-		resp = cs_etm_decoder__buffer_discontinuity(decoder,
+		resp = cs_etm_decoder__buffer_discontinuity(packet_queue,
 							    trace_chan_id);
 		break;
 	case OCSD_GEN_TRC_ELEM_INSTR_RANGE:
-		resp = cs_etm_decoder__buffer_range(decoder, elem,
+		resp = cs_etm_decoder__buffer_range(packet_queue, elem,
 						    trace_chan_id);
 		break;
 	case OCSD_GEN_TRC_ELEM_EXCEPTION:
-		resp = cs_etm_decoder__buffer_exception(decoder, elem,
+		resp = cs_etm_decoder__buffer_exception(packet_queue, elem,
 							trace_chan_id);
 		break;
 	case OCSD_GEN_TRC_ELEM_EXCEPTION_RET:
-		resp = cs_etm_decoder__buffer_exception_ret(decoder,
+		resp = cs_etm_decoder__buffer_exception_ret(packet_queue,
 							    trace_chan_id);
 		break;
 	case OCSD_GEN_TRC_ELEM_PE_CONTEXT:
@@ -554,7 +530,6 @@ cs_etm_decoder__new(int num_cpu, struct cs_etm_decoder_params *d_params,
 
 	decoder->data = d_params->data;
 	decoder->prev_return = OCSD_RESP_CONT;
-	cs_etm_decoder__clear_buffer(decoder);
 	format = (d_params->formatted ? OCSD_TRC_SRC_FRAME_FORMATTED :
 					 OCSD_TRC_SRC_SINGLE);
 	flags = 0;
diff --git a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.h b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.h
index 3ab11dfa92ae..6ae7ab4cf5fe 100644
--- a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.h
+++ b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.h
@@ -14,38 +14,8 @@
 #include <stdio.h>
 
 struct cs_etm_decoder;
-
-enum cs_etm_sample_type {
-	CS_ETM_EMPTY,
-	CS_ETM_RANGE,
-	CS_ETM_DISCONTINUITY,
-	CS_ETM_EXCEPTION,
-	CS_ETM_EXCEPTION_RET,
-};
-
-enum cs_etm_isa {
-	CS_ETM_ISA_UNKNOWN,
-	CS_ETM_ISA_A64,
-	CS_ETM_ISA_A32,
-	CS_ETM_ISA_T32,
-};
-
-struct cs_etm_packet {
-	enum cs_etm_sample_type sample_type;
-	enum cs_etm_isa isa;
-	u64 start_addr;
-	u64 end_addr;
-	u32 instr_count;
-	u32 last_instr_type;
-	u32 last_instr_subtype;
-	u32 flags;
-	u32 exception_number;
-	u8 last_instr_cond;
-	u8 last_instr_taken_branch;
-	u8 last_instr_size;
-	u8 trace_chan_id;
-	int cpu;
-};
+struct cs_etm_packet;
+struct cs_etm_packet_queue;
 
 struct cs_etm_queue;
 
@@ -119,7 +89,7 @@ int cs_etm_decoder__add_mem_access_cb(struct cs_etm_decoder *decoder,
 				      u64 start, u64 end,
 				      cs_etm_mem_cb_type cb_func);
 
-int cs_etm_decoder__get_packet(struct cs_etm_decoder *decoder,
+int cs_etm_decoder__get_packet(struct cs_etm_packet_queue *packet_queue,
 			       struct cs_etm_packet *packet);
 
 int cs_etm_decoder__reset(struct cs_etm_decoder *decoder);
diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c
index 5322dcaaf654..a74c53a45839 100644
--- a/tools/perf/util/cs-etm.c
+++ b/tools/perf/util/cs-etm.c
@@ -78,6 +78,7 @@ struct cs_etm_queue {
 	struct cs_etm_packet *packet;
 	const unsigned char *buf;
 	size_t buf_len, buf_used;
+	struct cs_etm_packet_queue packet_queue;
 };
 
 static int cs_etm__update_queues(struct cs_etm_auxtrace *etm);
@@ -125,6 +126,36 @@ int cs_etm__get_cpu(u8 trace_chan_id, int *cpu)
 	return 0;
 }
 
+static void cs_etm__clear_packet_queue(struct cs_etm_packet_queue *queue)
+{
+	int i;
+
+	queue->head = 0;
+	queue->tail = 0;
+	queue->packet_count = 0;
+	for (i = 0; i < CS_ETM_PACKET_MAX_BUFFER; i++) {
+		queue->packet_buffer[i].isa = CS_ETM_ISA_UNKNOWN;
+		queue->packet_buffer[i].start_addr = CS_ETM_INVAL_ADDR;
+		queue->packet_buffer[i].end_addr = CS_ETM_INVAL_ADDR;
+		queue->packet_buffer[i].instr_count = 0;
+		queue->packet_buffer[i].last_instr_taken_branch = false;
+		queue->packet_buffer[i].last_instr_size = 0;
+		queue->packet_buffer[i].last_instr_type = 0;
+		queue->packet_buffer[i].last_instr_subtype = 0;
+		queue->packet_buffer[i].last_instr_cond = 0;
+		queue->packet_buffer[i].flags = 0;
+		queue->packet_buffer[i].exception_number = UINT32_MAX;
+		queue->packet_buffer[i].trace_chan_id = UINT8_MAX;
+		queue->packet_buffer[i].cpu = INT_MIN;
+	}
+}
+
+struct cs_etm_packet_queue
+*cs_etm__etmq_get_packet_queue(struct cs_etm_queue *etmq)
+{
+	return &etmq->packet_queue;
+}
+
 static void cs_etm__packet_dump(const char *pkt_string)
 {
 	const char *color = PERF_COLOR_BLUE;
@@ -513,6 +544,7 @@ static int cs_etm__setup_queue(struct cs_etm_auxtrace *etm,
 	etmq->pid = -1;
 	etmq->offset = 0;
 	etmq->period_instructions = 0;
+	cs_etm__clear_packet_queue(&etmq->packet_queue);
 
 out:
 	return ret;
@@ -1542,10 +1574,13 @@ static int cs_etm__decode_data_block(struct cs_etm_queue *etmq)
 static int cs_etm__process_decoder_queue(struct cs_etm_queue *etmq)
 {
 	int ret;
+	struct cs_etm_packet_queue *packet_queue;
+
+	packet_queue = cs_etm__etmq_get_packet_queue(etmq);
 
 		/* Process each packet in this chunk */
 		while (1) {
-			ret = cs_etm_decoder__get_packet(etmq->decoder,
+			ret = cs_etm_decoder__get_packet(packet_queue,
 							 etmq->packet);
 			if (ret <= 0)
 				/*
diff --git a/tools/perf/util/cs-etm.h b/tools/perf/util/cs-etm.h
index 826c9eedaf5c..75385e2fd283 100644
--- a/tools/perf/util/cs-etm.h
+++ b/tools/perf/util/cs-etm.h
@@ -97,12 +97,57 @@ enum {
 	CS_ETMV4_EXC_END = 31,
 };
 
+enum cs_etm_sample_type {
+	CS_ETM_EMPTY,
+	CS_ETM_RANGE,
+	CS_ETM_DISCONTINUITY,
+	CS_ETM_EXCEPTION,
+	CS_ETM_EXCEPTION_RET,
+};
+
+enum cs_etm_isa {
+	CS_ETM_ISA_UNKNOWN,
+	CS_ETM_ISA_A64,
+	CS_ETM_ISA_A32,
+	CS_ETM_ISA_T32,
+};
+
 /* RB tree for quick conversion between traceID and metadata pointers */
 struct intlist *traceid_list;
 
+struct cs_etm_queue;
+
+struct cs_etm_packet {
+	enum cs_etm_sample_type sample_type;
+	enum cs_etm_isa isa;
+	u64 start_addr;
+	u64 end_addr;
+	u32 instr_count;
+	u32 last_instr_type;
+	u32 last_instr_subtype;
+	u32 flags;
+	u32 exception_number;
+	u8 last_instr_cond;
+	u8 last_instr_taken_branch;
+	u8 last_instr_size;
+	u8 trace_chan_id;
+	int cpu;
+};
+
+#define CS_ETM_PACKET_MAX_BUFFER 1024
+
+struct cs_etm_packet_queue {
+	u32 packet_count;
+	u32 head;
+	u32 tail;
+	struct cs_etm_packet packet_buffer[CS_ETM_PACKET_MAX_BUFFER];
+};
+
 #define KiB(x) ((x) * 1024)
 #define MiB(x) ((x) * 1024 * 1024)
 
+#define CS_ETM_INVAL_ADDR 0xdeadbeefdeadbeefUL
+
 /*
  * Create a contiguous bitmask starting at bit position @l and ending at
  * position @h. For example
@@ -126,6 +171,8 @@ struct intlist *traceid_list;
 int cs_etm__process_auxtrace_info(union perf_event *event,
 				  struct perf_session *session);
 int cs_etm__get_cpu(u8 trace_chan_id, int *cpu);
+struct cs_etm_packet_queue
+*cs_etm__etmq_get_packet_queue(struct cs_etm_queue *etmq);
 #else
 static inline int
 cs_etm__process_auxtrace_info(union perf_event *event __maybe_unused,
@@ -139,6 +186,12 @@ static inline int cs_etm__get_cpu(u8 trace_chan_id __maybe_unused,
 {
 	return -1;
 }
+
+static inline struct cs_etm_packet_queue *cs_etm__etmq_get_packet_queue(
+				struct cs_etm_queue *etmq __maybe_unused)
+{
+	return NULL;
+}
 #endif
 
 #endif
-- 
2.20.1

  parent reply	other threads:[~2019-06-11 18:58 UTC|newest]

Thread overview: 87+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-11 18:57 [GIT PULL] perf/core improvements and fixes Arnaldo Carvalho de Melo
2019-06-11 18:57 ` [PATCH 01/85] perf data: Add description of header HEADER_BPF_PROG_INFO and HEADER_BPF_BTF Arnaldo Carvalho de Melo
2019-06-11 18:57 ` [PATCH 02/85] perf data: Document memory topology header: HEADER_MEM_TOPOLOGY Arnaldo Carvalho de Melo
2019-06-11 18:57 ` [PATCH 03/85] perf data: Document clockid header: HEADER_CLOCKID Arnaldo Carvalho de Melo
2019-06-11 18:57 ` [PATCH 04/85] perf data: Document directory format header: HEADER_DIR_FORMAT Arnaldo Carvalho de Melo
2019-06-11 18:57 ` [PATCH 05/85] perf symbols: Remove unused variable 'err' Arnaldo Carvalho de Melo
2019-06-11 18:57 ` [PATCH 06/85] perf record: Allow mixing --user-regs with --call-graph=dwarf Arnaldo Carvalho de Melo
2019-06-11 18:57 ` [PATCH 07/85] perf intel-pt: Factor out intel_pt_update_sample_time Arnaldo Carvalho de Melo
2019-06-11 18:57 ` [PATCH 08/85] perf intel-pt: Accumulate cycle count from CYC packets Arnaldo Carvalho de Melo
2019-06-11 18:57 ` [PATCH 09/85] perf tools: Add IPC information to perf_sample Arnaldo Carvalho de Melo
2019-06-11 18:57 ` [PATCH 10/85] perf intel-pt: Add support for samples to contain IPC ratio Arnaldo Carvalho de Melo
2019-06-11 18:57 ` [PATCH 11/85] perf script: Add output of " Arnaldo Carvalho de Melo
2019-06-11 18:57 ` [PATCH 12/85] perf intel-pt: Record when decoding PSB+ packets Arnaldo Carvalho de Melo
2019-06-11 18:57 ` [PATCH 13/85] perf intel-pt: Re-factor TIP cases in intel_pt_walk_to_ip Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 14/85] perf intel-pt: Accumulate cycle count from TSC/TMA/MTC packets Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 15/85] perf intel-pt: Document IPC usage Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 16/85] perf thread-stack: Accumulate IPC information Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 17/85] perf db-export: Add brief documentation Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 18/85] perf db-export: Export IPC information Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 19/85] perf scripts python: export-to-sqlite.py: " Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 20/85] perf scripts python: export-to-postgresql.py: " Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 21/85] perf scripts python: exported-sql-viewer.py: Add IPC information to the Branch reports Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 22/85] perf scripts python: exported-sql-viewer.py: Add CallGraphModelParams Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 23/85] perf scripts python: exported-sql-viewer.py: Add IPC information to Call Graph Graph Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 24/85] perf scripts python: exported-sql-viewer.py: Add IPC information to Call Tree Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 25/85] perf scripts python: exported-sql-viewer.py: Select find text when find bar is activated Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 26/85] perf augmented_raw_syscalls: Tell which args are filenames and how many bytes to copy Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 27/85] perf augmented_raw_syscalls: Move the probe_read_str to a separate function Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 28/85] perf augmented_raw_syscalls: Change helper to consider just the augmented_filename part Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 29/85] perf augmented_raw_syscalls: Move reading filename to the loop Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 30/85] perf jvmti: Address gcc string overflow warning for strncpy() Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 31/85] perf trace: Consume the augmented_raw_syscalls payload Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 32/85] perf trace: Associate more argument names with the filename beautifier Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 33/85] perf trace: Exit when failing to build eBPF program Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 34/85] perf config: Bail out when a handler returns failure for a key-value pair Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 35/85] perf record: Add support to collect callchains from kernel or user space only Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 36/85] perf evsel: Remove superfluous nthreads system_wide setup in alloc_fd() Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 37/85] perf cs-etm: Configure contextID tracing in CPU-wide mode Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 38/85] perf cs-etm: Configure timestamp generation " Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 39/85] perf cs-etm: Configure SWITCH_EVENTS " Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 40/85] perf cs-etm: Add handling of itrace start events Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 41/85] perf cs-etm: Add handling of switch-CPU-wide events Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 42/85] perf cs-etm: Refactor error path in cs_etm_decoder__new() Arnaldo Carvalho de Melo
2019-06-11 18:58 ` Arnaldo Carvalho de Melo [this message]
2019-06-11 18:58 ` [PATCH 44/85] perf cs-etm: Fix indentation in function cs_etm__process_decoder_queue() Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 45/85] perf cs-etm: Introduce the concept of trace ID queues Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 46/85] perf cs-etm: Get rid of unused cpu in struct cs_etm_queue Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 47/85] perf cs-etm: Move thread to traceid_queue Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 48/85] perf cs-etm: Move tid/pid " Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 49/85] perf cs-etm: Use traceID aware memory callback API Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 50/85] perf cs-etm: Add support for multiple traceID queues Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 51/85] perf cs-etm: Linking PE contextID with perf thread mechanic Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 52/85] perf cs-etm: Add notion of time to decoding code Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 53/85] perf cs-etm: Add support for CPU-wide trace scenarios Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 54/85] perf cpumap: Retrieve die id information Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 55/85] perf header: Add die information in CPU topology Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 56/85] perf stat: Support per-die aggregation Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 57/85] perf header: Rename "sibling cores" to "sibling sockets" Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 58/85] perf tools: Apply new CPU topology sysfs attributes Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 59/85] perf data: Fix perf.data documentation for HEADER_CPU_TOPOLOGY Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 60/85] perf cs-etm: Properly set the value of 'old' and 'head' in snapshot mode Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 61/85] perf cs-etm: Remove duplicate GENMASK() define, use linux/bits.h instead Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 62/85] perf config: Update default value for llvm.clang-bpf-cmd-template Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 63/85] perf auxtrace: Add perf time interval to itrace_synth_ops Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 64/85] perf script: Set perf time interval in itrace_synth_ops Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 65/85] perf report: " Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 66/85] perf intel-pt: Add lookahead callback Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 67/85] perf intel-pt: Factor out intel_pt_8b_tsc() Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 68/85] perf intel-pt: Factor out intel_pt_reposition() Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 69/85] perf intel-pt: Add reposition parameter to intel_pt_get_data() Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 70/85] perf intel-pt: Add intel_pt_fast_forward() Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 71/85] perf intel-pt: Factor out intel_pt_get_buffer() Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 72/85] perf intel-pt: Add support for lookahead Arnaldo Carvalho de Melo
2019-06-11 18:58 ` [PATCH 73/85] perf intel-pt: Add support for efficient time interval filtering Arnaldo Carvalho de Melo
2019-06-11 18:59 ` [PATCH 74/85] perf time-utils: Treat time ranges consistently Arnaldo Carvalho de Melo
2019-06-11 18:59 ` [PATCH 75/85] perf time-utils: Factor out set_percent_time() Arnaldo Carvalho de Melo
2019-06-11 18:59 ` [PATCH 76/85] perf time-utils: Prevent percentage time range overlap Arnaldo Carvalho de Melo
2019-06-11 18:59 ` [PATCH 77/85] perf time-utils: Fix --time documentation Arnaldo Carvalho de Melo
2019-06-11 18:59 ` [PATCH 78/85] perf time-utils: Simplify perf_time__parse_for_ranges() error paths slightly Arnaldo Carvalho de Melo
2019-06-11 18:59 ` [PATCH 79/85] perf time-utils: Make perf_time__parse_for_ranges() more logical Arnaldo Carvalho de Melo
2019-06-11 18:59 ` [PATCH 80/85] perf tests: Add a test for time-utils Arnaldo Carvalho de Melo
2019-06-11 18:59 ` [PATCH 81/85] perf time-utils: Add support for multiple explicit time intervals Arnaldo Carvalho de Melo
2019-06-11 18:59 ` [PATCH 82/85] perf test 6: Fix missing kvm module load for s390 Arnaldo Carvalho de Melo
2019-06-11 18:59 ` [PATCH 83/85] perf report: Fix OOM error in TUI mode on s390 Arnaldo Carvalho de Melo
2019-06-11 18:59 ` [PATCH 84/85] perf report: Support s390 diag event display on x86 Arnaldo Carvalho de Melo
2019-06-11 18:59 ` [PATCH 85/85] perf trace: Skip unknown syscalls when expanding strace like syscall groups Arnaldo Carvalho de Melo
2019-06-17 18:48 ` [GIT PULL] perf/core improvements and fixes Ingo Molnar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190611185911.11645-44-acme@kernel.org \
    --to=acme@kernel.org \
    --cc=acme@redhat.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=coresight@lists.linaro.org \
    --cc=jolsa@kernel.org \
    --cc=jolsa@redhat.com \
    --cc=leo.yan@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mathieu.poirier@linaro.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=suzuki.poulose@arm.com \
    --cc=tglx@linutronix.de \
    --cc=williams@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).