All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 4.19.y only 0/2] Fix perf build failures
@ 2020-12-27  9:27 Salvatore Bonaccorso
  2020-12-27  9:27   ` Salvatore Bonaccorso
                   ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: Salvatore Bonaccorso @ 2020-12-27  9:27 UTC (permalink / raw)
  To: stable; +Cc: Greg Kroah-Hartman, Sasha Levin, Leo Yan, Salvatore Bonaccorso

Hi Greg, Sasha and all,

This is a resubmit of the patches already done in 
https://lore.kernel.org/stable/20201125201215.26455-1-carnil@debian.org/
and
https://lore.kernel.org/stable/20201125201215.26455-2-carnil@debian.org/

The issue can be explained as this. In

https://lore.kernel.org/stable/20201014135627.GA3698844@kroah.com/

on request 168200b6d6ea ("perf cs-etm: Move definition of 'traceid_list' global
variable from header file") was queued back to 4.19.y to fix build failures for
perf with more recent GCCs.

But for 4.19.y this was wrong because it missed to pick as well a dependency
needed, and in turn it caused build failures with older GCC (8.3.0 as used in
Debian stable in that case).

The commit was reverted in a later in 4.19.159.

It as though requested to try to allow as well compilation with more recent
GCCs (while obviously not breaking older GCC builds) and found that the cause
was just the missing dependency to pick up, namely pick 95c6fe970a01 ("perf
cs-etm: Change tuple from traceID-CPU# to traceID-metadata") before
168200b6d6ea ("perf cs-etm: Move definition of 'traceid_list' global variable
from header file").

Regards,
Salvatore

Leo Yan (2):
  perf cs-etm: Change tuple from traceID-CPU# to traceID-metadata
  perf cs-etm: Move definition of 'traceid_list' global variable from
    header file

 .../perf/util/cs-etm-decoder/cs-etm-decoder.c |  8 ++---
 tools/perf/util/cs-etm.c                      | 29 +++++++++++++++----
 tools/perf/util/cs-etm.h                      | 10 +++++--
 3 files changed, 33 insertions(+), 14 deletions(-)

-- 
2.30.0.rc2


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

* [PATCH 1/2] perf cs-etm: Change tuple from traceID-CPU# to traceID-metadata
  2020-12-27  9:27 [PATCH 4.19.y only 0/2] Fix perf build failures Salvatore Bonaccorso
@ 2020-12-27  9:27   ` Salvatore Bonaccorso
  2020-12-27  9:27   ` Salvatore Bonaccorso
  2020-12-27 11:42 ` [PATCH 4.19.y only 0/2] Fix perf build failures Greg Kroah-Hartman
  2 siblings, 0 replies; 14+ messages in thread
From: Salvatore Bonaccorso @ 2020-12-27  9:27 UTC (permalink / raw)
  To: stable
  Cc: Greg Kroah-Hartman, Sasha Levin, Leo Yan, Mathieu Poirier,
	Alexander Shishkin, Jiri Olsa, Mike Leach, Namhyung Kim,
	Robert Walker, Suzuki K Poulouse, coresight ml, linux-arm-kernel,
	Arnaldo Carvalho de Melo, Salvatore Bonaccorso

From: Leo Yan <leo.yan@linaro.org>

commit 95c6fe970a0160cb770c5dce9f80311b42d030c0 upstream.

If packet processing wants to know the packet is bound with which ETM
version, it needs to access metadata to decide that based on metadata
magic number; but we cannot simply to use CPU logic ID number as index
to access metadata sequential array, especially when system have
hotplugged off CPUs, the metadata array are only allocated for online
CPUs but not offline CPUs, so the CPU logic number doesn't match with
its index in the array.

This patch is to change tuple from traceID-CPU# to traceID-metadata,
thus it can use the tuple to retrieve metadata pointer according to
traceID.

For safe accessing metadata fields, this patch provides helper function
cs_etm__get_cpu() which is used to return CPU number according to
traceID; cs_etm_decoder__buffer_packet() is the first consumer for this
helper function.

Signed-off-by: Leo Yan <leo.yan@linaro.org>
Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Leach <mike.leach@linaro.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Robert Walker <robert.walker@arm.com>
Cc: Suzuki K Poulouse <suzuki.poulose@arm.com>
Cc: coresight ml <coresight@lists.linaro.org>
Cc: linux-arm-kernel@lists.infradead.org
Link: http://lkml.kernel.org/r/20190129122842.32041-6-leo.yan@linaro.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
[Salvatore Bonaccorso: Adjust for context changes in
tools/perf/util/cs-etm-decoder/cs-etm-decoder.c]
Signed-off-by: Salvatore Bonaccorso <carnil@debian.org>
---
 .../perf/util/cs-etm-decoder/cs-etm-decoder.c |  8 +++---
 tools/perf/util/cs-etm.c                      | 26 ++++++++++++++-----
 tools/perf/util/cs-etm.h                      |  9 ++++++-
 3 files changed, 31 insertions(+), 12 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 938def6d0bb9..f540037eb705 100644
--- a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c
+++ b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c
@@ -278,14 +278,12 @@ cs_etm_decoder__buffer_packet(struct cs_etm_decoder *decoder,
 			      enum cs_etm_sample_type sample_type)
 {
 	u32 et = 0;
-	struct int_node *inode = NULL;
+	int cpu;
 
 	if (decoder->packet_count >= MAX_BUFFER - 1)
 		return OCSD_RESP_FATAL_SYS_ERR;
 
-	/* Search the RB tree for the cpu associated with this traceID */
-	inode = intlist__find(traceid_list, trace_chan_id);
-	if (!inode)
+	if (cs_etm__get_cpu(trace_chan_id, &cpu) < 0)
 		return OCSD_RESP_FATAL_SYS_ERR;
 
 	et = decoder->tail;
@@ -296,7 +294,7 @@ cs_etm_decoder__buffer_packet(struct cs_etm_decoder *decoder,
 	decoder->packet_buffer[et].sample_type = sample_type;
 	decoder->packet_buffer[et].exc = false;
 	decoder->packet_buffer[et].exc_ret = false;
-	decoder->packet_buffer[et].cpu = *((int *)inode->priv);
+	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;
 
diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c
index 7b5e15cc6b71..5cde3956e19a 100644
--- a/tools/perf/util/cs-etm.c
+++ b/tools/perf/util/cs-etm.c
@@ -91,6 +91,20 @@ static int cs_etm__update_queues(struct cs_etm_auxtrace *etm);
 static int cs_etm__process_timeless_queues(struct cs_etm_auxtrace *etm,
 					   pid_t tid, u64 time_);
 
+int cs_etm__get_cpu(u8 trace_chan_id, int *cpu)
+{
+	struct int_node *inode;
+	u64 *metadata;
+
+	inode = intlist__find(traceid_list, trace_chan_id);
+	if (!inode)
+		return -EINVAL;
+
+	metadata = inode->priv;
+	*cpu = (int)metadata[CS_ETM_CPU];
+	return 0;
+}
+
 static void cs_etm__packet_dump(const char *pkt_string)
 {
 	const char *color = PERF_COLOR_BLUE;
@@ -230,7 +244,7 @@ static void cs_etm__free(struct perf_session *session)
 	cs_etm__free_events(session);
 	session->auxtrace = NULL;
 
-	/* First remove all traceID/CPU# nodes for the RB tree */
+	/* First remove all traceID/metadata nodes for the RB tree */
 	intlist__for_each_entry_safe(inode, tmp, traceid_list)
 		intlist__remove(traceid_list, inode);
 	/* Then the RB tree itself */
@@ -1316,9 +1330,9 @@ int cs_etm__process_auxtrace_info(union perf_event *event,
 				    0xffffffff);
 
 	/*
-	 * Create an RB tree for traceID-CPU# tuple. Since the conversion has
-	 * to be made for each packet that gets decoded, optimizing access in
-	 * anything other than a sequential array is worth doing.
+	 * Create an RB tree for traceID-metadata tuple.  Since the conversion
+	 * has to be made for each packet that gets decoded, optimizing access
+	 * in anything other than a sequential array is worth doing.
 	 */
 	traceid_list = intlist__new(NULL);
 	if (!traceid_list) {
@@ -1384,8 +1398,8 @@ int cs_etm__process_auxtrace_info(union perf_event *event,
 			err = -EINVAL;
 			goto err_free_metadata;
 		}
-		/* All good, associate the traceID with the CPU# */
-		inode->priv = &metadata[j][CS_ETM_CPU];
+		/* All good, associate the traceID with the metadata pointer */
+		inode->priv = metadata[j];
 	}
 
 	/*
diff --git a/tools/perf/util/cs-etm.h b/tools/perf/util/cs-etm.h
index 37f8d48179ca..fb5fc6538b7f 100644
--- a/tools/perf/util/cs-etm.h
+++ b/tools/perf/util/cs-etm.h
@@ -53,7 +53,7 @@ enum {
 	CS_ETMV4_PRIV_MAX,
 };
 
-/* RB tree for quick conversion between traceID and CPUs */
+/* RB tree for quick conversion between traceID and metadata pointers */
 struct intlist *traceid_list;
 
 #define KiB(x) ((x) * 1024)
@@ -69,6 +69,7 @@ static const u64 __perf_cs_etmv4_magic   = 0x4040404040404040ULL;
 #ifdef HAVE_CSTRACE_SUPPORT
 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);
 #else
 static inline int
 cs_etm__process_auxtrace_info(union perf_event *event __maybe_unused,
@@ -76,6 +77,12 @@ cs_etm__process_auxtrace_info(union perf_event *event __maybe_unused,
 {
 	return -1;
 }
+
+static inline int cs_etm__get_cpu(u8 trace_chan_id __maybe_unused,
+				  int *cpu __maybe_unused)
+{
+	return -1;
+}
 #endif
 
 #endif
-- 
2.30.0.rc2


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

* [PATCH 1/2] perf cs-etm: Change tuple from traceID-CPU# to traceID-metadata
@ 2020-12-27  9:27   ` Salvatore Bonaccorso
  0 siblings, 0 replies; 14+ messages in thread
From: Salvatore Bonaccorso @ 2020-12-27  9:27 UTC (permalink / raw)
  To: stable
  Cc: Sasha Levin, Mathieu Poirier, Suzuki K Poulouse,
	Alexander Shishkin, Greg Kroah-Hartman, coresight ml,
	Arnaldo Carvalho de Melo, Leo Yan, Namhyung Kim, Robert Walker,
	Salvatore Bonaccorso, Jiri Olsa, linux-arm-kernel, Mike Leach

From: Leo Yan <leo.yan@linaro.org>

commit 95c6fe970a0160cb770c5dce9f80311b42d030c0 upstream.

If packet processing wants to know the packet is bound with which ETM
version, it needs to access metadata to decide that based on metadata
magic number; but we cannot simply to use CPU logic ID number as index
to access metadata sequential array, especially when system have
hotplugged off CPUs, the metadata array are only allocated for online
CPUs but not offline CPUs, so the CPU logic number doesn't match with
its index in the array.

This patch is to change tuple from traceID-CPU# to traceID-metadata,
thus it can use the tuple to retrieve metadata pointer according to
traceID.

For safe accessing metadata fields, this patch provides helper function
cs_etm__get_cpu() which is used to return CPU number according to
traceID; cs_etm_decoder__buffer_packet() is the first consumer for this
helper function.

Signed-off-by: Leo Yan <leo.yan@linaro.org>
Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Leach <mike.leach@linaro.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Robert Walker <robert.walker@arm.com>
Cc: Suzuki K Poulouse <suzuki.poulose@arm.com>
Cc: coresight ml <coresight@lists.linaro.org>
Cc: linux-arm-kernel@lists.infradead.org
Link: http://lkml.kernel.org/r/20190129122842.32041-6-leo.yan@linaro.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
[Salvatore Bonaccorso: Adjust for context changes in
tools/perf/util/cs-etm-decoder/cs-etm-decoder.c]
Signed-off-by: Salvatore Bonaccorso <carnil@debian.org>
---
 .../perf/util/cs-etm-decoder/cs-etm-decoder.c |  8 +++---
 tools/perf/util/cs-etm.c                      | 26 ++++++++++++++-----
 tools/perf/util/cs-etm.h                      |  9 ++++++-
 3 files changed, 31 insertions(+), 12 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 938def6d0bb9..f540037eb705 100644
--- a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c
+++ b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c
@@ -278,14 +278,12 @@ cs_etm_decoder__buffer_packet(struct cs_etm_decoder *decoder,
 			      enum cs_etm_sample_type sample_type)
 {
 	u32 et = 0;
-	struct int_node *inode = NULL;
+	int cpu;
 
 	if (decoder->packet_count >= MAX_BUFFER - 1)
 		return OCSD_RESP_FATAL_SYS_ERR;
 
-	/* Search the RB tree for the cpu associated with this traceID */
-	inode = intlist__find(traceid_list, trace_chan_id);
-	if (!inode)
+	if (cs_etm__get_cpu(trace_chan_id, &cpu) < 0)
 		return OCSD_RESP_FATAL_SYS_ERR;
 
 	et = decoder->tail;
@@ -296,7 +294,7 @@ cs_etm_decoder__buffer_packet(struct cs_etm_decoder *decoder,
 	decoder->packet_buffer[et].sample_type = sample_type;
 	decoder->packet_buffer[et].exc = false;
 	decoder->packet_buffer[et].exc_ret = false;
-	decoder->packet_buffer[et].cpu = *((int *)inode->priv);
+	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;
 
diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c
index 7b5e15cc6b71..5cde3956e19a 100644
--- a/tools/perf/util/cs-etm.c
+++ b/tools/perf/util/cs-etm.c
@@ -91,6 +91,20 @@ static int cs_etm__update_queues(struct cs_etm_auxtrace *etm);
 static int cs_etm__process_timeless_queues(struct cs_etm_auxtrace *etm,
 					   pid_t tid, u64 time_);
 
+int cs_etm__get_cpu(u8 trace_chan_id, int *cpu)
+{
+	struct int_node *inode;
+	u64 *metadata;
+
+	inode = intlist__find(traceid_list, trace_chan_id);
+	if (!inode)
+		return -EINVAL;
+
+	metadata = inode->priv;
+	*cpu = (int)metadata[CS_ETM_CPU];
+	return 0;
+}
+
 static void cs_etm__packet_dump(const char *pkt_string)
 {
 	const char *color = PERF_COLOR_BLUE;
@@ -230,7 +244,7 @@ static void cs_etm__free(struct perf_session *session)
 	cs_etm__free_events(session);
 	session->auxtrace = NULL;
 
-	/* First remove all traceID/CPU# nodes for the RB tree */
+	/* First remove all traceID/metadata nodes for the RB tree */
 	intlist__for_each_entry_safe(inode, tmp, traceid_list)
 		intlist__remove(traceid_list, inode);
 	/* Then the RB tree itself */
@@ -1316,9 +1330,9 @@ int cs_etm__process_auxtrace_info(union perf_event *event,
 				    0xffffffff);
 
 	/*
-	 * Create an RB tree for traceID-CPU# tuple. Since the conversion has
-	 * to be made for each packet that gets decoded, optimizing access in
-	 * anything other than a sequential array is worth doing.
+	 * Create an RB tree for traceID-metadata tuple.  Since the conversion
+	 * has to be made for each packet that gets decoded, optimizing access
+	 * in anything other than a sequential array is worth doing.
 	 */
 	traceid_list = intlist__new(NULL);
 	if (!traceid_list) {
@@ -1384,8 +1398,8 @@ int cs_etm__process_auxtrace_info(union perf_event *event,
 			err = -EINVAL;
 			goto err_free_metadata;
 		}
-		/* All good, associate the traceID with the CPU# */
-		inode->priv = &metadata[j][CS_ETM_CPU];
+		/* All good, associate the traceID with the metadata pointer */
+		inode->priv = metadata[j];
 	}
 
 	/*
diff --git a/tools/perf/util/cs-etm.h b/tools/perf/util/cs-etm.h
index 37f8d48179ca..fb5fc6538b7f 100644
--- a/tools/perf/util/cs-etm.h
+++ b/tools/perf/util/cs-etm.h
@@ -53,7 +53,7 @@ enum {
 	CS_ETMV4_PRIV_MAX,
 };
 
-/* RB tree for quick conversion between traceID and CPUs */
+/* RB tree for quick conversion between traceID and metadata pointers */
 struct intlist *traceid_list;
 
 #define KiB(x) ((x) * 1024)
@@ -69,6 +69,7 @@ static const u64 __perf_cs_etmv4_magic   = 0x4040404040404040ULL;
 #ifdef HAVE_CSTRACE_SUPPORT
 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);
 #else
 static inline int
 cs_etm__process_auxtrace_info(union perf_event *event __maybe_unused,
@@ -76,6 +77,12 @@ cs_etm__process_auxtrace_info(union perf_event *event __maybe_unused,
 {
 	return -1;
 }
+
+static inline int cs_etm__get_cpu(u8 trace_chan_id __maybe_unused,
+				  int *cpu __maybe_unused)
+{
+	return -1;
+}
 #endif
 
 #endif
-- 
2.30.0.rc2


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH 2/2] perf cs-etm: Move definition of 'traceid_list' global variable from header file
  2020-12-27  9:27 [PATCH 4.19.y only 0/2] Fix perf build failures Salvatore Bonaccorso
@ 2020-12-27  9:27   ` Salvatore Bonaccorso
  2020-12-27  9:27   ` Salvatore Bonaccorso
  2020-12-27 11:42 ` [PATCH 4.19.y only 0/2] Fix perf build failures Greg Kroah-Hartman
  2 siblings, 0 replies; 14+ messages in thread
From: Salvatore Bonaccorso @ 2020-12-27  9:27 UTC (permalink / raw)
  To: stable
  Cc: Greg Kroah-Hartman, Sasha Levin, Leo Yan, Thomas Backlund,
	Mathieu Poirier, Mike Leach, Alexander Shishkin, Jiri Olsa,
	Mark Rutland, Namhyung Kim, Peter Zijlstra, Suzuki Poulouse,
	Tor Jeremiassen, linux-arm-kernel, Arnaldo Carvalho de Melo,
	Salvatore Bonaccorso

From: Leo Yan <leo.yan@linaro.org>

commit 168200b6d6ea0cb5765943ec5da5b8149701f36a upstream.

The variable 'traceid_list' is defined in the header file cs-etm.h,
if multiple C files include cs-etm.h the compiler might complaint for
multiple definition of 'traceid_list'.

To fix multiple definition error, move the definition of 'traceid_list'
into cs-etm.c.

Fixes: cd8bfd8c973e ("perf tools: Add processing of coresight metadata")
Reported-by: Thomas Backlund <tmb@mageia.org>
Signed-off-by: Leo Yan <leo.yan@linaro.org>
Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Reviewed-by: Mike Leach <mike.leach@linaro.org>
Tested-by: Mike Leach <mike.leach@linaro.org>
Tested-by: Thomas Backlund <tmb@mageia.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
Cc: Tor Jeremiassen <tor@ti.com>
Cc: linux-arm-kernel@lists.infradead.org
Link: http://lore.kernel.org/lkml/20200505133642.4756-1-leo.yan@linaro.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Salvatore Bonaccorso <carnil@debian.org>
---
 tools/perf/util/cs-etm.c | 3 +++
 tools/perf/util/cs-etm.h | 3 ---
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c
index 5cde3956e19a..3275b8dc9344 100644
--- a/tools/perf/util/cs-etm.c
+++ b/tools/perf/util/cs-etm.c
@@ -87,6 +87,9 @@ struct cs_etm_queue {
 	struct cs_etm_packet *packet;
 };
 
+/* RB tree for quick conversion between traceID and metadata pointers */
+static struct intlist *traceid_list;
+
 static int cs_etm__update_queues(struct cs_etm_auxtrace *etm);
 static int cs_etm__process_timeless_queues(struct cs_etm_auxtrace *etm,
 					   pid_t tid, u64 time_);
diff --git a/tools/perf/util/cs-etm.h b/tools/perf/util/cs-etm.h
index fb5fc6538b7f..97c3152f5bfd 100644
--- a/tools/perf/util/cs-etm.h
+++ b/tools/perf/util/cs-etm.h
@@ -53,9 +53,6 @@ enum {
 	CS_ETMV4_PRIV_MAX,
 };
 
-/* RB tree for quick conversion between traceID and metadata pointers */
-struct intlist *traceid_list;
-
 #define KiB(x) ((x) * 1024)
 #define MiB(x) ((x) * 1024 * 1024)
 
-- 
2.30.0.rc2


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

* [PATCH 2/2] perf cs-etm: Move definition of 'traceid_list' global variable from header file
@ 2020-12-27  9:27   ` Salvatore Bonaccorso
  0 siblings, 0 replies; 14+ messages in thread
From: Salvatore Bonaccorso @ 2020-12-27  9:27 UTC (permalink / raw)
  To: stable
  Cc: Sasha Levin, Mark Rutland, Mathieu Poirier, Suzuki Poulouse,
	Alexander Shishkin, Greg Kroah-Hartman, Tor Jeremiassen,
	Arnaldo Carvalho de Melo, Peter Zijlstra, Leo Yan, Namhyung Kim,
	Salvatore Bonaccorso, Jiri Olsa, Thomas Backlund,
	linux-arm-kernel, Mike Leach

From: Leo Yan <leo.yan@linaro.org>

commit 168200b6d6ea0cb5765943ec5da5b8149701f36a upstream.

The variable 'traceid_list' is defined in the header file cs-etm.h,
if multiple C files include cs-etm.h the compiler might complaint for
multiple definition of 'traceid_list'.

To fix multiple definition error, move the definition of 'traceid_list'
into cs-etm.c.

Fixes: cd8bfd8c973e ("perf tools: Add processing of coresight metadata")
Reported-by: Thomas Backlund <tmb@mageia.org>
Signed-off-by: Leo Yan <leo.yan@linaro.org>
Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Reviewed-by: Mike Leach <mike.leach@linaro.org>
Tested-by: Mike Leach <mike.leach@linaro.org>
Tested-by: Thomas Backlund <tmb@mageia.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
Cc: Tor Jeremiassen <tor@ti.com>
Cc: linux-arm-kernel@lists.infradead.org
Link: http://lore.kernel.org/lkml/20200505133642.4756-1-leo.yan@linaro.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Salvatore Bonaccorso <carnil@debian.org>
---
 tools/perf/util/cs-etm.c | 3 +++
 tools/perf/util/cs-etm.h | 3 ---
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c
index 5cde3956e19a..3275b8dc9344 100644
--- a/tools/perf/util/cs-etm.c
+++ b/tools/perf/util/cs-etm.c
@@ -87,6 +87,9 @@ struct cs_etm_queue {
 	struct cs_etm_packet *packet;
 };
 
+/* RB tree for quick conversion between traceID and metadata pointers */
+static struct intlist *traceid_list;
+
 static int cs_etm__update_queues(struct cs_etm_auxtrace *etm);
 static int cs_etm__process_timeless_queues(struct cs_etm_auxtrace *etm,
 					   pid_t tid, u64 time_);
diff --git a/tools/perf/util/cs-etm.h b/tools/perf/util/cs-etm.h
index fb5fc6538b7f..97c3152f5bfd 100644
--- a/tools/perf/util/cs-etm.h
+++ b/tools/perf/util/cs-etm.h
@@ -53,9 +53,6 @@ enum {
 	CS_ETMV4_PRIV_MAX,
 };
 
-/* RB tree for quick conversion between traceID and metadata pointers */
-struct intlist *traceid_list;
-
 #define KiB(x) ((x) * 1024)
 #define MiB(x) ((x) * 1024 * 1024)
 
-- 
2.30.0.rc2


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH 4.19.y only 0/2] Fix perf build failures
  2020-12-27  9:27 [PATCH 4.19.y only 0/2] Fix perf build failures Salvatore Bonaccorso
  2020-12-27  9:27   ` Salvatore Bonaccorso
  2020-12-27  9:27   ` Salvatore Bonaccorso
@ 2020-12-27 11:42 ` Greg Kroah-Hartman
  2 siblings, 0 replies; 14+ messages in thread
From: Greg Kroah-Hartman @ 2020-12-27 11:42 UTC (permalink / raw)
  To: Salvatore Bonaccorso; +Cc: stable, Sasha Levin, Leo Yan

On Sun, Dec 27, 2020 at 10:27:43AM +0100, Salvatore Bonaccorso wrote:
> Hi Greg, Sasha and all,
> 
> This is a resubmit of the patches already done in 
> https://lore.kernel.org/stable/20201125201215.26455-1-carnil@debian.org/
> and
> https://lore.kernel.org/stable/20201125201215.26455-2-carnil@debian.org/
> 
> The issue can be explained as this. In
> 
> https://lore.kernel.org/stable/20201014135627.GA3698844@kroah.com/
> 
> on request 168200b6d6ea ("perf cs-etm: Move definition of 'traceid_list' global
> variable from header file") was queued back to 4.19.y to fix build failures for
> perf with more recent GCCs.
> 
> But for 4.19.y this was wrong because it missed to pick as well a dependency
> needed, and in turn it caused build failures with older GCC (8.3.0 as used in
> Debian stable in that case).
> 
> The commit was reverted in a later in 4.19.159.
> 
> It as though requested to try to allow as well compilation with more recent
> GCCs (while obviously not breaking older GCC builds) and found that the cause
> was just the missing dependency to pick up, namely pick 95c6fe970a01 ("perf
> cs-etm: Change tuple from traceID-CPU# to traceID-metadata") before
> 168200b6d6ea ("perf cs-etm: Move definition of 'traceid_list' global variable
> from header file").

Thanks for these, both now queued up.

greg k-h

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

* Re: [PATCH 1/2] perf cs-etm: Change tuple from traceID-CPU# to traceID-metadata
  2020-11-26  1:35       ` Leo Yan
@ 2020-11-26  4:52         ` Salvatore Bonaccorso
  -1 siblings, 0 replies; 14+ messages in thread
From: Salvatore Bonaccorso @ 2020-11-26  4:52 UTC (permalink / raw)
  To: Leo Yan
  Cc: stable, Andrey Zhizhikin, Mathieu Poirier, Alexander Shishkin,
	Jiri Olsa, Mike Leach, Namhyung Kim, Robert Walker,
	Suzuki K Poulouse, coresight ml, linux-arm-kernel,
	Arnaldo Carvalho de Melo

Hi Leo,

On Thu, Nov 26, 2020 at 09:35:22AM +0800, Leo Yan wrote:
> On Wed, Nov 25, 2020 at 09:23:23PM +0100, Salvatore Bonaccorso wrote:
> > On Wed, Nov 25, 2020 at 09:12:14PM +0100, Salvatore Bonaccorso wrote:
> > > From: Leo Yan <leo.yan@linaro.org>
> > > 
> > > commit 95c6fe970a0160cb770c5dce9f80311b42d030c0 upstream.
> 
> [...]
> 
> > That's a fallout on my end. Should have said: This is for 4.19
> > specifically to be queued.
> > 
> > Background: in
> > https://lore.kernel.org/stable/20201014135627.GA3698844@kroah.com/
> > 168200b6d6ea0cb5765943ec5da5b8149701f36a was queued up for v4.19.y but
> > the prerequeisite commit was not included and so resulted in build
> > failures with gcc 8.3.0.
> > 
> > The commit was later on reverted but in this thread it was asked to
> > actually make it possible to compile the file as well with more recent
> > gcc versions.
> > 
> > Those two patches to be applied in 4.19.y only pick up a backport of
> > the rerequisite commit 95c6fe970a0160cb770c5dce9f80311b42d030c0 (PATCH
> > 1) followed up by the cherry-pick of
> > 168200b6d6ea0cb5765943ec5da5b8149701f36a again.
> 
> Since the patch 01 is minor tweaked due to context difference, I
> manually compared it with original patch and looks good to me.
> 
> Thank you for the back porting,

Welcome, given I'm unfamiliar with the codebasis for perf the explicit
acknowledgement nothing looks wrong was appreciated.

Regards,
Salvatore

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

* Re: [PATCH 1/2] perf cs-etm: Change tuple from traceID-CPU# to traceID-metadata
@ 2020-11-26  4:52         ` Salvatore Bonaccorso
  0 siblings, 0 replies; 14+ messages in thread
From: Salvatore Bonaccorso @ 2020-11-26  4:52 UTC (permalink / raw)
  To: Leo Yan
  Cc: Andrey Zhizhikin, Mathieu Poirier, Suzuki K Poulouse,
	Alexander Shishkin, coresight ml, stable,
	Arnaldo Carvalho de Melo, Namhyung Kim, Robert Walker, Jiri Olsa,
	linux-arm-kernel, Mike Leach

Hi Leo,

On Thu, Nov 26, 2020 at 09:35:22AM +0800, Leo Yan wrote:
> On Wed, Nov 25, 2020 at 09:23:23PM +0100, Salvatore Bonaccorso wrote:
> > On Wed, Nov 25, 2020 at 09:12:14PM +0100, Salvatore Bonaccorso wrote:
> > > From: Leo Yan <leo.yan@linaro.org>
> > > 
> > > commit 95c6fe970a0160cb770c5dce9f80311b42d030c0 upstream.
> 
> [...]
> 
> > That's a fallout on my end. Should have said: This is for 4.19
> > specifically to be queued.
> > 
> > Background: in
> > https://lore.kernel.org/stable/20201014135627.GA3698844@kroah.com/
> > 168200b6d6ea0cb5765943ec5da5b8149701f36a was queued up for v4.19.y but
> > the prerequeisite commit was not included and so resulted in build
> > failures with gcc 8.3.0.
> > 
> > The commit was later on reverted but in this thread it was asked to
> > actually make it possible to compile the file as well with more recent
> > gcc versions.
> > 
> > Those two patches to be applied in 4.19.y only pick up a backport of
> > the rerequisite commit 95c6fe970a0160cb770c5dce9f80311b42d030c0 (PATCH
> > 1) followed up by the cherry-pick of
> > 168200b6d6ea0cb5765943ec5da5b8149701f36a again.
> 
> Since the patch 01 is minor tweaked due to context difference, I
> manually compared it with original patch and looks good to me.
> 
> Thank you for the back porting,

Welcome, given I'm unfamiliar with the codebasis for perf the explicit
acknowledgement nothing looks wrong was appreciated.

Regards,
Salvatore

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH 1/2] perf cs-etm: Change tuple from traceID-CPU# to traceID-metadata
  2020-11-25 20:23     ` Salvatore Bonaccorso
@ 2020-11-26  1:35       ` Leo Yan
  -1 siblings, 0 replies; 14+ messages in thread
From: Leo Yan @ 2020-11-26  1:35 UTC (permalink / raw)
  To: Salvatore Bonaccorso
  Cc: stable, Andrey Zhizhikin, Mathieu Poirier, Alexander Shishkin,
	Jiri Olsa, Mike Leach, Namhyung Kim, Robert Walker,
	Suzuki K Poulouse, coresight ml, linux-arm-kernel,
	Arnaldo Carvalho de Melo

On Wed, Nov 25, 2020 at 09:23:23PM +0100, Salvatore Bonaccorso wrote:
> On Wed, Nov 25, 2020 at 09:12:14PM +0100, Salvatore Bonaccorso wrote:
> > From: Leo Yan <leo.yan@linaro.org>
> > 
> > commit 95c6fe970a0160cb770c5dce9f80311b42d030c0 upstream.

[...]

> That's a fallout on my end. Should have said: This is for 4.19
> specifically to be queued.
> 
> Background: in
> https://lore.kernel.org/stable/20201014135627.GA3698844@kroah.com/
> 168200b6d6ea0cb5765943ec5da5b8149701f36a was queued up for v4.19.y but
> the prerequeisite commit was not included and so resulted in build
> failures with gcc 8.3.0.
> 
> The commit was later on reverted but in this thread it was asked to
> actually make it possible to compile the file as well with more recent
> gcc versions.
> 
> Those two patches to be applied in 4.19.y only pick up a backport of
> the rerequisite commit 95c6fe970a0160cb770c5dce9f80311b42d030c0 (PATCH
> 1) followed up by the cherry-pick of
> 168200b6d6ea0cb5765943ec5da5b8149701f36a again.

Since the patch 01 is minor tweaked due to context difference, I
manually compared it with original patch and looks good to me.

Thank you for the back porting,
Leo

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

* Re: [PATCH 1/2] perf cs-etm: Change tuple from traceID-CPU# to traceID-metadata
@ 2020-11-26  1:35       ` Leo Yan
  0 siblings, 0 replies; 14+ messages in thread
From: Leo Yan @ 2020-11-26  1:35 UTC (permalink / raw)
  To: Salvatore Bonaccorso
  Cc: Andrey Zhizhikin, Mathieu Poirier, Suzuki K Poulouse,
	Alexander Shishkin, coresight ml, stable,
	Arnaldo Carvalho de Melo, Namhyung Kim, Robert Walker, Jiri Olsa,
	linux-arm-kernel, Mike Leach

On Wed, Nov 25, 2020 at 09:23:23PM +0100, Salvatore Bonaccorso wrote:
> On Wed, Nov 25, 2020 at 09:12:14PM +0100, Salvatore Bonaccorso wrote:
> > From: Leo Yan <leo.yan@linaro.org>
> > 
> > commit 95c6fe970a0160cb770c5dce9f80311b42d030c0 upstream.

[...]

> That's a fallout on my end. Should have said: This is for 4.19
> specifically to be queued.
> 
> Background: in
> https://lore.kernel.org/stable/20201014135627.GA3698844@kroah.com/
> 168200b6d6ea0cb5765943ec5da5b8149701f36a was queued up for v4.19.y but
> the prerequeisite commit was not included and so resulted in build
> failures with gcc 8.3.0.
> 
> The commit was later on reverted but in this thread it was asked to
> actually make it possible to compile the file as well with more recent
> gcc versions.
> 
> Those two patches to be applied in 4.19.y only pick up a backport of
> the rerequisite commit 95c6fe970a0160cb770c5dce9f80311b42d030c0 (PATCH
> 1) followed up by the cherry-pick of
> 168200b6d6ea0cb5765943ec5da5b8149701f36a again.

Since the patch 01 is minor tweaked due to context difference, I
manually compared it with original patch and looks good to me.

Thank you for the back porting,
Leo

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH 1/2] perf cs-etm: Change tuple from traceID-CPU# to traceID-metadata
  2020-11-25 20:12   ` Salvatore Bonaccorso
@ 2020-11-25 20:23     ` Salvatore Bonaccorso
  -1 siblings, 0 replies; 14+ messages in thread
From: Salvatore Bonaccorso @ 2020-11-25 20:23 UTC (permalink / raw)
  To: stable
  Cc: Andrey Zhizhikin, Leo Yan, Mathieu Poirier, Alexander Shishkin,
	Jiri Olsa, Mike Leach, Namhyung Kim, Robert Walker,
	Suzuki K Poulouse, coresight ml, linux-arm-kernel,
	Arnaldo Carvalho de Melo

On Wed, Nov 25, 2020 at 09:12:14PM +0100, Salvatore Bonaccorso wrote:
> From: Leo Yan <leo.yan@linaro.org>
> 
> commit 95c6fe970a0160cb770c5dce9f80311b42d030c0 upstream.
> 
> If packet processing wants to know the packet is bound with which ETM
> version, it needs to access metadata to decide that based on metadata
> magic number; but we cannot simply to use CPU logic ID number as index
> to access metadata sequential array, especially when system have
> hotplugged off CPUs, the metadata array are only allocated for online
> CPUs but not offline CPUs, so the CPU logic number doesn't match with
> its index in the array.
> 
> This patch is to change tuple from traceID-CPU# to traceID-metadata,
> thus it can use the tuple to retrieve metadata pointer according to
> traceID.
> 
> For safe accessing metadata fields, this patch provides helper function
> cs_etm__get_cpu() which is used to return CPU number according to
> traceID; cs_etm_decoder__buffer_packet() is the first consumer for this
> helper function.
> 
> Signed-off-by: Leo Yan <leo.yan@linaro.org>
> Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
> Cc: Jiri Olsa <jolsa@redhat.com>
> Cc: Mike Leach <mike.leach@linaro.org>
> Cc: Namhyung Kim <namhyung@kernel.org>
> Cc: Robert Walker <robert.walker@arm.com>
> Cc: Suzuki K Poulouse <suzuki.poulose@arm.com>
> Cc: coresight ml <coresight@lists.linaro.org>
> Cc: linux-arm-kernel@lists.infradead.org
> Link: http://lkml.kernel.org/r/20190129122842.32041-6-leo.yan@linaro.org
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> [Salvatore Bonaccorso: Adjust for context changes in
> tools/perf/util/cs-etm-decoder/cs-etm-decoder.c]
> Signed-off-by: Salvatore Bonaccorso <carnil@debian.org>

That's a fallout on my end. Should have said: This is for 4.19
specifically to be queued.

Background: in
https://lore.kernel.org/stable/20201014135627.GA3698844@kroah.com/
168200b6d6ea0cb5765943ec5da5b8149701f36a was queued up for v4.19.y but
the prerequeisite commit was not included and so resulted in build
failures with gcc 8.3.0.

The commit was later on reverted but in this thread it was asked to
actually make it possible to compile the file as well with more recent
gcc versions.

Those two patches to be applied in 4.19.y only pick up a backport of
the rerequisite commit 95c6fe970a0160cb770c5dce9f80311b42d030c0 (PATCH
1) followed up by the cherry-pick of
168200b6d6ea0cb5765943ec5da5b8149701f36a again.

Regards,
Salvatore

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

* Re: [PATCH 1/2] perf cs-etm: Change tuple from traceID-CPU# to traceID-metadata
@ 2020-11-25 20:23     ` Salvatore Bonaccorso
  0 siblings, 0 replies; 14+ messages in thread
From: Salvatore Bonaccorso @ 2020-11-25 20:23 UTC (permalink / raw)
  To: stable
  Cc: Andrey Zhizhikin, Mathieu Poirier, Suzuki K Poulouse,
	Alexander Shishkin, coresight ml, Arnaldo Carvalho de Melo,
	Leo Yan, Namhyung Kim, Robert Walker, Jiri Olsa,
	linux-arm-kernel, Mike Leach

On Wed, Nov 25, 2020 at 09:12:14PM +0100, Salvatore Bonaccorso wrote:
> From: Leo Yan <leo.yan@linaro.org>
> 
> commit 95c6fe970a0160cb770c5dce9f80311b42d030c0 upstream.
> 
> If packet processing wants to know the packet is bound with which ETM
> version, it needs to access metadata to decide that based on metadata
> magic number; but we cannot simply to use CPU logic ID number as index
> to access metadata sequential array, especially when system have
> hotplugged off CPUs, the metadata array are only allocated for online
> CPUs but not offline CPUs, so the CPU logic number doesn't match with
> its index in the array.
> 
> This patch is to change tuple from traceID-CPU# to traceID-metadata,
> thus it can use the tuple to retrieve metadata pointer according to
> traceID.
> 
> For safe accessing metadata fields, this patch provides helper function
> cs_etm__get_cpu() which is used to return CPU number according to
> traceID; cs_etm_decoder__buffer_packet() is the first consumer for this
> helper function.
> 
> Signed-off-by: Leo Yan <leo.yan@linaro.org>
> Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
> Cc: Jiri Olsa <jolsa@redhat.com>
> Cc: Mike Leach <mike.leach@linaro.org>
> Cc: Namhyung Kim <namhyung@kernel.org>
> Cc: Robert Walker <robert.walker@arm.com>
> Cc: Suzuki K Poulouse <suzuki.poulose@arm.com>
> Cc: coresight ml <coresight@lists.linaro.org>
> Cc: linux-arm-kernel@lists.infradead.org
> Link: http://lkml.kernel.org/r/20190129122842.32041-6-leo.yan@linaro.org
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> [Salvatore Bonaccorso: Adjust for context changes in
> tools/perf/util/cs-etm-decoder/cs-etm-decoder.c]
> Signed-off-by: Salvatore Bonaccorso <carnil@debian.org>

That's a fallout on my end. Should have said: This is for 4.19
specifically to be queued.

Background: in
https://lore.kernel.org/stable/20201014135627.GA3698844@kroah.com/
168200b6d6ea0cb5765943ec5da5b8149701f36a was queued up for v4.19.y but
the prerequeisite commit was not included and so resulted in build
failures with gcc 8.3.0.

The commit was later on reverted but in this thread it was asked to
actually make it possible to compile the file as well with more recent
gcc versions.

Those two patches to be applied in 4.19.y only pick up a backport of
the rerequisite commit 95c6fe970a0160cb770c5dce9f80311b42d030c0 (PATCH
1) followed up by the cherry-pick of
168200b6d6ea0cb5765943ec5da5b8149701f36a again.

Regards,
Salvatore

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH 1/2] perf cs-etm: Change tuple from traceID-CPU# to traceID-metadata
  2020-11-22 13:43 [PATCH] Revert "perf cs-etm: Move definition of 'traceid_list' global variable from header file" Leo Yan
@ 2020-11-25 20:12   ` Salvatore Bonaccorso
  0 siblings, 0 replies; 14+ messages in thread
From: Salvatore Bonaccorso @ 2020-11-25 20:12 UTC (permalink / raw)
  To: stable
  Cc: Andrey Zhizhikin, Leo Yan, Mathieu Poirier, Alexander Shishkin,
	Jiri Olsa, Mike Leach, Namhyung Kim, Robert Walker,
	Suzuki K Poulouse, coresight ml, linux-arm-kernel,
	Arnaldo Carvalho de Melo, Salvatore Bonaccorso

From: Leo Yan <leo.yan@linaro.org>

commit 95c6fe970a0160cb770c5dce9f80311b42d030c0 upstream.

If packet processing wants to know the packet is bound with which ETM
version, it needs to access metadata to decide that based on metadata
magic number; but we cannot simply to use CPU logic ID number as index
to access metadata sequential array, especially when system have
hotplugged off CPUs, the metadata array are only allocated for online
CPUs but not offline CPUs, so the CPU logic number doesn't match with
its index in the array.

This patch is to change tuple from traceID-CPU# to traceID-metadata,
thus it can use the tuple to retrieve metadata pointer according to
traceID.

For safe accessing metadata fields, this patch provides helper function
cs_etm__get_cpu() which is used to return CPU number according to
traceID; cs_etm_decoder__buffer_packet() is the first consumer for this
helper function.

Signed-off-by: Leo Yan <leo.yan@linaro.org>
Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Leach <mike.leach@linaro.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Robert Walker <robert.walker@arm.com>
Cc: Suzuki K Poulouse <suzuki.poulose@arm.com>
Cc: coresight ml <coresight@lists.linaro.org>
Cc: linux-arm-kernel@lists.infradead.org
Link: http://lkml.kernel.org/r/20190129122842.32041-6-leo.yan@linaro.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
[Salvatore Bonaccorso: Adjust for context changes in
tools/perf/util/cs-etm-decoder/cs-etm-decoder.c]
Signed-off-by: Salvatore Bonaccorso <carnil@debian.org>
---
 .../perf/util/cs-etm-decoder/cs-etm-decoder.c |  8 +++---
 tools/perf/util/cs-etm.c                      | 26 ++++++++++++++-----
 tools/perf/util/cs-etm.h                      |  9 ++++++-
 3 files changed, 31 insertions(+), 12 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 938def6d0bb9..f540037eb705 100644
--- a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c
+++ b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c
@@ -278,14 +278,12 @@ cs_etm_decoder__buffer_packet(struct cs_etm_decoder *decoder,
 			      enum cs_etm_sample_type sample_type)
 {
 	u32 et = 0;
-	struct int_node *inode = NULL;
+	int cpu;
 
 	if (decoder->packet_count >= MAX_BUFFER - 1)
 		return OCSD_RESP_FATAL_SYS_ERR;
 
-	/* Search the RB tree for the cpu associated with this traceID */
-	inode = intlist__find(traceid_list, trace_chan_id);
-	if (!inode)
+	if (cs_etm__get_cpu(trace_chan_id, &cpu) < 0)
 		return OCSD_RESP_FATAL_SYS_ERR;
 
 	et = decoder->tail;
@@ -296,7 +294,7 @@ cs_etm_decoder__buffer_packet(struct cs_etm_decoder *decoder,
 	decoder->packet_buffer[et].sample_type = sample_type;
 	decoder->packet_buffer[et].exc = false;
 	decoder->packet_buffer[et].exc_ret = false;
-	decoder->packet_buffer[et].cpu = *((int *)inode->priv);
+	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;
 
diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c
index 7b5e15cc6b71..5cde3956e19a 100644
--- a/tools/perf/util/cs-etm.c
+++ b/tools/perf/util/cs-etm.c
@@ -91,6 +91,20 @@ static int cs_etm__update_queues(struct cs_etm_auxtrace *etm);
 static int cs_etm__process_timeless_queues(struct cs_etm_auxtrace *etm,
 					   pid_t tid, u64 time_);
 
+int cs_etm__get_cpu(u8 trace_chan_id, int *cpu)
+{
+	struct int_node *inode;
+	u64 *metadata;
+
+	inode = intlist__find(traceid_list, trace_chan_id);
+	if (!inode)
+		return -EINVAL;
+
+	metadata = inode->priv;
+	*cpu = (int)metadata[CS_ETM_CPU];
+	return 0;
+}
+
 static void cs_etm__packet_dump(const char *pkt_string)
 {
 	const char *color = PERF_COLOR_BLUE;
@@ -230,7 +244,7 @@ static void cs_etm__free(struct perf_session *session)
 	cs_etm__free_events(session);
 	session->auxtrace = NULL;
 
-	/* First remove all traceID/CPU# nodes for the RB tree */
+	/* First remove all traceID/metadata nodes for the RB tree */
 	intlist__for_each_entry_safe(inode, tmp, traceid_list)
 		intlist__remove(traceid_list, inode);
 	/* Then the RB tree itself */
@@ -1316,9 +1330,9 @@ int cs_etm__process_auxtrace_info(union perf_event *event,
 				    0xffffffff);
 
 	/*
-	 * Create an RB tree for traceID-CPU# tuple. Since the conversion has
-	 * to be made for each packet that gets decoded, optimizing access in
-	 * anything other than a sequential array is worth doing.
+	 * Create an RB tree for traceID-metadata tuple.  Since the conversion
+	 * has to be made for each packet that gets decoded, optimizing access
+	 * in anything other than a sequential array is worth doing.
 	 */
 	traceid_list = intlist__new(NULL);
 	if (!traceid_list) {
@@ -1384,8 +1398,8 @@ int cs_etm__process_auxtrace_info(union perf_event *event,
 			err = -EINVAL;
 			goto err_free_metadata;
 		}
-		/* All good, associate the traceID with the CPU# */
-		inode->priv = &metadata[j][CS_ETM_CPU];
+		/* All good, associate the traceID with the metadata pointer */
+		inode->priv = metadata[j];
 	}
 
 	/*
diff --git a/tools/perf/util/cs-etm.h b/tools/perf/util/cs-etm.h
index 37f8d48179ca..fb5fc6538b7f 100644
--- a/tools/perf/util/cs-etm.h
+++ b/tools/perf/util/cs-etm.h
@@ -53,7 +53,7 @@ enum {
 	CS_ETMV4_PRIV_MAX,
 };
 
-/* RB tree for quick conversion between traceID and CPUs */
+/* RB tree for quick conversion between traceID and metadata pointers */
 struct intlist *traceid_list;
 
 #define KiB(x) ((x) * 1024)
@@ -69,6 +69,7 @@ static const u64 __perf_cs_etmv4_magic   = 0x4040404040404040ULL;
 #ifdef HAVE_CSTRACE_SUPPORT
 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);
 #else
 static inline int
 cs_etm__process_auxtrace_info(union perf_event *event __maybe_unused,
@@ -76,6 +77,12 @@ cs_etm__process_auxtrace_info(union perf_event *event __maybe_unused,
 {
 	return -1;
 }
+
+static inline int cs_etm__get_cpu(u8 trace_chan_id __maybe_unused,
+				  int *cpu __maybe_unused)
+{
+	return -1;
+}
 #endif
 
 #endif
-- 
2.29.2


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

* [PATCH 1/2] perf cs-etm: Change tuple from traceID-CPU# to traceID-metadata
@ 2020-11-25 20:12   ` Salvatore Bonaccorso
  0 siblings, 0 replies; 14+ messages in thread
From: Salvatore Bonaccorso @ 2020-11-25 20:12 UTC (permalink / raw)
  To: stable
  Cc: Andrey Zhizhikin, Mathieu Poirier, Suzuki K Poulouse,
	Alexander Shishkin, coresight ml, Arnaldo Carvalho de Melo,
	Leo Yan, Namhyung Kim, Robert Walker, Salvatore Bonaccorso,
	Jiri Olsa, linux-arm-kernel, Mike Leach

From: Leo Yan <leo.yan@linaro.org>

commit 95c6fe970a0160cb770c5dce9f80311b42d030c0 upstream.

If packet processing wants to know the packet is bound with which ETM
version, it needs to access metadata to decide that based on metadata
magic number; but we cannot simply to use CPU logic ID number as index
to access metadata sequential array, especially when system have
hotplugged off CPUs, the metadata array are only allocated for online
CPUs but not offline CPUs, so the CPU logic number doesn't match with
its index in the array.

This patch is to change tuple from traceID-CPU# to traceID-metadata,
thus it can use the tuple to retrieve metadata pointer according to
traceID.

For safe accessing metadata fields, this patch provides helper function
cs_etm__get_cpu() which is used to return CPU number according to
traceID; cs_etm_decoder__buffer_packet() is the first consumer for this
helper function.

Signed-off-by: Leo Yan <leo.yan@linaro.org>
Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Leach <mike.leach@linaro.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Robert Walker <robert.walker@arm.com>
Cc: Suzuki K Poulouse <suzuki.poulose@arm.com>
Cc: coresight ml <coresight@lists.linaro.org>
Cc: linux-arm-kernel@lists.infradead.org
Link: http://lkml.kernel.org/r/20190129122842.32041-6-leo.yan@linaro.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
[Salvatore Bonaccorso: Adjust for context changes in
tools/perf/util/cs-etm-decoder/cs-etm-decoder.c]
Signed-off-by: Salvatore Bonaccorso <carnil@debian.org>
---
 .../perf/util/cs-etm-decoder/cs-etm-decoder.c |  8 +++---
 tools/perf/util/cs-etm.c                      | 26 ++++++++++++++-----
 tools/perf/util/cs-etm.h                      |  9 ++++++-
 3 files changed, 31 insertions(+), 12 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 938def6d0bb9..f540037eb705 100644
--- a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c
+++ b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.c
@@ -278,14 +278,12 @@ cs_etm_decoder__buffer_packet(struct cs_etm_decoder *decoder,
 			      enum cs_etm_sample_type sample_type)
 {
 	u32 et = 0;
-	struct int_node *inode = NULL;
+	int cpu;
 
 	if (decoder->packet_count >= MAX_BUFFER - 1)
 		return OCSD_RESP_FATAL_SYS_ERR;
 
-	/* Search the RB tree for the cpu associated with this traceID */
-	inode = intlist__find(traceid_list, trace_chan_id);
-	if (!inode)
+	if (cs_etm__get_cpu(trace_chan_id, &cpu) < 0)
 		return OCSD_RESP_FATAL_SYS_ERR;
 
 	et = decoder->tail;
@@ -296,7 +294,7 @@ cs_etm_decoder__buffer_packet(struct cs_etm_decoder *decoder,
 	decoder->packet_buffer[et].sample_type = sample_type;
 	decoder->packet_buffer[et].exc = false;
 	decoder->packet_buffer[et].exc_ret = false;
-	decoder->packet_buffer[et].cpu = *((int *)inode->priv);
+	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;
 
diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c
index 7b5e15cc6b71..5cde3956e19a 100644
--- a/tools/perf/util/cs-etm.c
+++ b/tools/perf/util/cs-etm.c
@@ -91,6 +91,20 @@ static int cs_etm__update_queues(struct cs_etm_auxtrace *etm);
 static int cs_etm__process_timeless_queues(struct cs_etm_auxtrace *etm,
 					   pid_t tid, u64 time_);
 
+int cs_etm__get_cpu(u8 trace_chan_id, int *cpu)
+{
+	struct int_node *inode;
+	u64 *metadata;
+
+	inode = intlist__find(traceid_list, trace_chan_id);
+	if (!inode)
+		return -EINVAL;
+
+	metadata = inode->priv;
+	*cpu = (int)metadata[CS_ETM_CPU];
+	return 0;
+}
+
 static void cs_etm__packet_dump(const char *pkt_string)
 {
 	const char *color = PERF_COLOR_BLUE;
@@ -230,7 +244,7 @@ static void cs_etm__free(struct perf_session *session)
 	cs_etm__free_events(session);
 	session->auxtrace = NULL;
 
-	/* First remove all traceID/CPU# nodes for the RB tree */
+	/* First remove all traceID/metadata nodes for the RB tree */
 	intlist__for_each_entry_safe(inode, tmp, traceid_list)
 		intlist__remove(traceid_list, inode);
 	/* Then the RB tree itself */
@@ -1316,9 +1330,9 @@ int cs_etm__process_auxtrace_info(union perf_event *event,
 				    0xffffffff);
 
 	/*
-	 * Create an RB tree for traceID-CPU# tuple. Since the conversion has
-	 * to be made for each packet that gets decoded, optimizing access in
-	 * anything other than a sequential array is worth doing.
+	 * Create an RB tree for traceID-metadata tuple.  Since the conversion
+	 * has to be made for each packet that gets decoded, optimizing access
+	 * in anything other than a sequential array is worth doing.
 	 */
 	traceid_list = intlist__new(NULL);
 	if (!traceid_list) {
@@ -1384,8 +1398,8 @@ int cs_etm__process_auxtrace_info(union perf_event *event,
 			err = -EINVAL;
 			goto err_free_metadata;
 		}
-		/* All good, associate the traceID with the CPU# */
-		inode->priv = &metadata[j][CS_ETM_CPU];
+		/* All good, associate the traceID with the metadata pointer */
+		inode->priv = metadata[j];
 	}
 
 	/*
diff --git a/tools/perf/util/cs-etm.h b/tools/perf/util/cs-etm.h
index 37f8d48179ca..fb5fc6538b7f 100644
--- a/tools/perf/util/cs-etm.h
+++ b/tools/perf/util/cs-etm.h
@@ -53,7 +53,7 @@ enum {
 	CS_ETMV4_PRIV_MAX,
 };
 
-/* RB tree for quick conversion between traceID and CPUs */
+/* RB tree for quick conversion between traceID and metadata pointers */
 struct intlist *traceid_list;
 
 #define KiB(x) ((x) * 1024)
@@ -69,6 +69,7 @@ static const u64 __perf_cs_etmv4_magic   = 0x4040404040404040ULL;
 #ifdef HAVE_CSTRACE_SUPPORT
 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);
 #else
 static inline int
 cs_etm__process_auxtrace_info(union perf_event *event __maybe_unused,
@@ -76,6 +77,12 @@ cs_etm__process_auxtrace_info(union perf_event *event __maybe_unused,
 {
 	return -1;
 }
+
+static inline int cs_etm__get_cpu(u8 trace_chan_id __maybe_unused,
+				  int *cpu __maybe_unused)
+{
+	return -1;
+}
 #endif
 
 #endif
-- 
2.29.2


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

end of thread, other threads:[~2020-12-27 11:42 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-27  9:27 [PATCH 4.19.y only 0/2] Fix perf build failures Salvatore Bonaccorso
2020-12-27  9:27 ` [PATCH 1/2] perf cs-etm: Change tuple from traceID-CPU# to traceID-metadata Salvatore Bonaccorso
2020-12-27  9:27   ` Salvatore Bonaccorso
2020-12-27  9:27 ` [PATCH 2/2] perf cs-etm: Move definition of 'traceid_list' global variable from header file Salvatore Bonaccorso
2020-12-27  9:27   ` Salvatore Bonaccorso
2020-12-27 11:42 ` [PATCH 4.19.y only 0/2] Fix perf build failures Greg Kroah-Hartman
  -- strict thread matches above, loose matches on Subject: below --
2020-11-22 13:43 [PATCH] Revert "perf cs-etm: Move definition of 'traceid_list' global variable from header file" Leo Yan
2020-11-25 20:12 ` [PATCH 1/2] perf cs-etm: Change tuple from traceID-CPU# to traceID-metadata Salvatore Bonaccorso
2020-11-25 20:12   ` Salvatore Bonaccorso
2020-11-25 20:23   ` Salvatore Bonaccorso
2020-11-25 20:23     ` Salvatore Bonaccorso
2020-11-26  1:35     ` Leo Yan
2020-11-26  1:35       ` Leo Yan
2020-11-26  4:52       ` Salvatore Bonaccorso
2020-11-26  4:52         ` Salvatore Bonaccorso

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.