* [PATCH v3 0/4] coresight: Add config flag to enable branch broadcast
@ 2022-05-11 14:45 James Clark
2022-05-11 14:45 ` [PATCH v3 1/4] " James Clark
` (4 more replies)
0 siblings, 5 replies; 7+ messages in thread
From: James Clark @ 2022-05-11 14:45 UTC (permalink / raw)
To: suzuki.poulose, mathieu.poirier, coresight, mike.leach
Cc: leo.yan, James Clark, Leo Yan, linux-arm-kernel, linux-doc, linux-kernel
Apologies for the delay.
Changes since v2:
* Pick up some of Mike's review tags
* Add a comment explaining rationale for not opening the event when BB isn't
supported
* Extend docs to say that Perf doesn't support decode when binaries are
modified
* Drop Perf side patches that were already merged
Thanks
James
James Clark (4):
coresight: Add config flag to enable branch broadcast
Documentation: coresight: Turn numbered subsections into real
subsections
Documentation: coresight: Link config options to existing
documentation
Documentation: coresight: Expand branch broadcast documentation
.../coresight/coresight-etm4x-reference.rst | 17 +++++-
Documentation/trace/coresight/coresight.rst | 56 +++++++++++++++++--
.../hwtracing/coresight/coresight-etm-perf.c | 2 +
.../coresight/coresight-etm4x-core.c | 14 +++++
include/linux/coresight-pmu.h | 2 +
5 files changed, 85 insertions(+), 6 deletions(-)
--
2.28.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v3 1/4] coresight: Add config flag to enable branch broadcast
2022-05-11 14:45 [PATCH v3 0/4] coresight: Add config flag to enable branch broadcast James Clark
@ 2022-05-11 14:45 ` James Clark
2022-05-11 14:45 ` [PATCH v3 2/4] Documentation: coresight: Turn numbered subsections into real subsections James Clark
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: James Clark @ 2022-05-11 14:45 UTC (permalink / raw)
To: suzuki.poulose, mathieu.poirier, coresight, mike.leach
Cc: leo.yan, James Clark, Leo Yan, linux-arm-kernel, linux-doc, linux-kernel
When enabled, all taken branch addresses are output, even if the branch
was because of a direct branch instruction. This enables reconstruction
of the program flow without having access to the memory image of the
code being executed.
Use bit 8 for the config option which would be the correct bit for
programming ETMv3. Although branch broadcast can't be enabled on ETMv3
because it's not in the define ETM3X_SUPPORTED_OPTIONS, using the
correct bit might help prevent future collisions or allow it to be
enabled if needed.
Signed-off-by: James Clark <james.clark@arm.com>
Reviewed-by: Mike Leach <mike.leach@linaro.org>
---
drivers/hwtracing/coresight/coresight-etm-perf.c | 2 ++
drivers/hwtracing/coresight/coresight-etm4x-core.c | 14 ++++++++++++++
include/linux/coresight-pmu.h | 2 ++
3 files changed, 18 insertions(+)
diff --git a/drivers/hwtracing/coresight/coresight-etm-perf.c b/drivers/hwtracing/coresight/coresight-etm-perf.c
index c039b6ae206f..43bbd5dc3d3b 100644
--- a/drivers/hwtracing/coresight/coresight-etm-perf.c
+++ b/drivers/hwtracing/coresight/coresight-etm-perf.c
@@ -52,6 +52,7 @@ static DEFINE_PER_CPU(struct coresight_device *, csdev_src);
* The PMU formats were orignally for ETMv3.5/PTM's ETMCR 'config';
* now take them as general formats and apply on all ETMs.
*/
+PMU_FORMAT_ATTR(branch_broadcast, "config:"__stringify(ETM_OPT_BRANCH_BROADCAST));
PMU_FORMAT_ATTR(cycacc, "config:" __stringify(ETM_OPT_CYCACC));
/* contextid1 enables tracing CONTEXTIDR_EL1 for ETMv4 */
PMU_FORMAT_ATTR(contextid1, "config:" __stringify(ETM_OPT_CTXTID));
@@ -97,6 +98,7 @@ static struct attribute *etm_config_formats_attr[] = {
&format_attr_sinkid.attr,
&format_attr_preset.attr,
&format_attr_configid.attr,
+ &format_attr_branch_broadcast.attr,
NULL,
};
diff --git a/drivers/hwtracing/coresight/coresight-etm4x-core.c b/drivers/hwtracing/coresight/coresight-etm4x-core.c
index 87299e99dabb..cf249ecad5a5 100644
--- a/drivers/hwtracing/coresight/coresight-etm4x-core.c
+++ b/drivers/hwtracing/coresight/coresight-etm4x-core.c
@@ -696,6 +696,20 @@ static int etm4_parse_event_config(struct coresight_device *csdev,
ret = cscfg_csdev_enable_active_config(csdev, cfg_hash, preset);
}
+ /* branch broadcast - enable if selected and supported */
+ if (attr->config & BIT(ETM_OPT_BRANCH_BROADCAST)) {
+ if (!drvdata->trcbb) {
+ /*
+ * Missing BB support could cause silent decode errors
+ * so fail to open if it's not supported.
+ */
+ ret = -EINVAL;
+ goto out;
+ } else {
+ config->cfg |= BIT(ETM4_CFG_BIT_BB);
+ }
+ }
+
out:
return ret;
}
diff --git a/include/linux/coresight-pmu.h b/include/linux/coresight-pmu.h
index 4ac5c081af93..6c2fd6cc5a98 100644
--- a/include/linux/coresight-pmu.h
+++ b/include/linux/coresight-pmu.h
@@ -18,6 +18,7 @@
* ETMv3.5/PTM doesn't define ETMCR config bits with prefix "ETM3_" and
* directly use below macros as config bits.
*/
+#define ETM_OPT_BRANCH_BROADCAST 8
#define ETM_OPT_CYCACC 12
#define ETM_OPT_CTXTID 14
#define ETM_OPT_CTXTID2 15
@@ -25,6 +26,7 @@
#define ETM_OPT_RETSTK 29
/* ETMv4 CONFIGR programming bits for the ETM OPTs */
+#define ETM4_CFG_BIT_BB 3
#define ETM4_CFG_BIT_CYCACC 4
#define ETM4_CFG_BIT_CTXTID 6
#define ETM4_CFG_BIT_VMID 7
--
2.28.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 2/4] Documentation: coresight: Turn numbered subsections into real subsections
2022-05-11 14:45 [PATCH v3 0/4] coresight: Add config flag to enable branch broadcast James Clark
2022-05-11 14:45 ` [PATCH v3 1/4] " James Clark
@ 2022-05-11 14:45 ` James Clark
2022-05-11 14:46 ` [PATCH v3 3/4] Documentation: coresight: Link config options to existing documentation James Clark
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: James Clark @ 2022-05-11 14:45 UTC (permalink / raw)
To: suzuki.poulose, mathieu.poirier, coresight, mike.leach
Cc: leo.yan, James Clark, Leo Yan, linux-arm-kernel, linux-doc, linux-kernel
This is to allow them to be referenced in a later commit. There was
also a mistake where sysFS was introduced as section 2, but numbered
as section 1. And vice versa for 'Using perf framework'. This can't
happen with unnumbered sections.
Signed-off-by: James Clark <james.clark@arm.com>
Reviewed-by: Mike Leach <mike.leach@linaro.org>
---
Documentation/trace/coresight/coresight.rst | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/Documentation/trace/coresight/coresight.rst b/Documentation/trace/coresight/coresight.rst
index a15571d96cc8..db66ff45ff4c 100644
--- a/Documentation/trace/coresight/coresight.rst
+++ b/Documentation/trace/coresight/coresight.rst
@@ -339,7 +339,8 @@ Preference is given to the former as using the sysFS interface
requires a deep understanding of the Coresight HW. The following sections
provide details on using both methods.
-1) Using the sysFS interface:
+Using the sysFS interface
+~~~~~~~~~~~~~~~~~~~~~~~~~
Before trace collection can start, a coresight sink needs to be identified.
There is no limit on the amount of sinks (nor sources) that can be enabled at
@@ -446,7 +447,8 @@ wealth of possibilities that coresight provides.
Instruction 0 0x8026B588 E8BD8000 true LDM sp!,{pc}
Timestamp Timestamp: 17107041535
-2) Using perf framework:
+Using perf framework
+~~~~~~~~~~~~~~~~~~~~
Coresight tracers are represented using the Perf framework's Performance
Monitoring Unit (PMU) abstraction. As such the perf framework takes charge of
@@ -495,7 +497,11 @@ More information on the above and other example on how to use Coresight with
the perf tools can be found in the "HOWTO.md" file of the openCSD gitHub
repository [#third]_.
-2.1) AutoFDO analysis using the perf tools:
+Advanced perf framework usage
+-----------------------------
+
+AutoFDO analysis using the perf tools
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
perf can be used to record and analyze trace of programs.
@@ -513,7 +519,8 @@ The --itrace option controls the type and frequency of synthesized events
Note that only 64-bit programs are currently supported - further work is
required to support instruction decode of 32-bit Arm programs.
-2.2) Tracing PID
+Tracing PID
+~~~~~~~~~~~
The kernel can be built to write the PID value into the PE ContextID registers.
For a kernel running at EL1, the PID is stored in CONTEXTIDR_EL1. A PE may
@@ -547,7 +554,7 @@ wants to trace PIDs for both host and guest, the two configs "contextid1" and
Generating coverage files for Feedback Directed Optimization: AutoFDO
----------------------------------------------------------------------
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'perf inject' accepts the --itrace option in which case tracing data is
removed and replaced with the synthesized events. e.g.
--
2.28.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 3/4] Documentation: coresight: Link config options to existing documentation
2022-05-11 14:45 [PATCH v3 0/4] coresight: Add config flag to enable branch broadcast James Clark
2022-05-11 14:45 ` [PATCH v3 1/4] " James Clark
2022-05-11 14:45 ` [PATCH v3 2/4] Documentation: coresight: Turn numbered subsections into real subsections James Clark
@ 2022-05-11 14:46 ` James Clark
2022-05-11 14:46 ` [PATCH v3 4/4] Documentation: coresight: Expand branch broadcast documentation James Clark
2022-05-25 10:06 ` [PATCH v3 0/4] coresight: Add config flag to enable branch broadcast Suzuki K Poulose
4 siblings, 0 replies; 7+ messages in thread
From: James Clark @ 2022-05-11 14:46 UTC (permalink / raw)
To: suzuki.poulose, mathieu.poirier, coresight, mike.leach
Cc: leo.yan, James Clark, Leo Yan, linux-arm-kernel, linux-doc, linux-kernel
In order to document the newly added branch_broadcast option, create a
table that links all of the config option formats to any existing docs.
That way when the branch broadcast docs are expanded they are accessible
from both places.
Signed-off-by: James Clark <james.clark@arm.com>
Reviewed-by: Mike Leach <mike.leach@linaro.org>
---
.../coresight/coresight-etm4x-reference.rst | 4 ++
Documentation/trace/coresight/coresight.rst | 39 +++++++++++++++++++
2 files changed, 43 insertions(+)
diff --git a/Documentation/trace/coresight/coresight-etm4x-reference.rst b/Documentation/trace/coresight/coresight-etm4x-reference.rst
index d25dfe86af9b..0439b4006227 100644
--- a/Documentation/trace/coresight/coresight-etm4x-reference.rst
+++ b/Documentation/trace/coresight/coresight-etm4x-reference.rst
@@ -650,6 +650,7 @@ Bit assignments shown below:-
parameter is set this value is applied to the currently indexed
address range.
+.. _coresight-branch-broadcast:
**bit (4):**
ETM_MODE_BB
@@ -657,6 +658,7 @@ Bit assignments shown below:-
**description:**
Set to enable branch broadcast if supported in hardware [IDR0].
+.. _coresight-cycle-accurate:
**bit (5):**
ETMv4_MODE_CYCACC
@@ -678,6 +680,7 @@ Bit assignments shown below:-
**description:**
Set to enable virtual machine ID tracing if supported [IDR2].
+.. _coresight-timestamp:
**bit (11):**
ETMv4_MODE_TIMESTAMP
@@ -685,6 +688,7 @@ Bit assignments shown below:-
**description:**
Set to enable timestamp generation if supported [IDR0].
+.. _coresight-return-stack:
**bit (12):**
ETM_MODE_RETURNSTACK
diff --git a/Documentation/trace/coresight/coresight.rst b/Documentation/trace/coresight/coresight.rst
index db66ff45ff4c..803a224dbb0e 100644
--- a/Documentation/trace/coresight/coresight.rst
+++ b/Documentation/trace/coresight/coresight.rst
@@ -585,6 +585,45 @@ sort example is from the AutoFDO tutorial (https://gcc.gnu.org/wiki/AutoFDO/Tuto
Bubble sorting array of 30000 elements
5806 ms
+Config option formats
+~~~~~~~~~~~~~~~~~~~~~
+
+The following strings can be provided between // on the perf command line to enable various options.
+They are also listed in the folder /sys/bus/event_source/devices/cs_etm/format/
+
+.. list-table::
+ :header-rows: 1
+
+ * - Option
+ - Description
+ * - branch_broadcast
+ - Session local version of the system wide setting:
+ :ref:`ETM_MODE_BB <coresight-branch-broadcast>`
+ * - contextid
+ - See `Tracing PID`_
+ * - contextid1
+ - See `Tracing PID`_
+ * - contextid2
+ - See `Tracing PID`_
+ * - configid
+ - Selection for a custom configuration. This is an implementation detail and not used directly,
+ see :ref:`trace/coresight/coresight-config:Using Configurations in perf`
+ * - preset
+ - Override for parameters in a custom configuration, see
+ :ref:`trace/coresight/coresight-config:Using Configurations in perf`
+ * - sinkid
+ - Hashed version of the string to select a sink, automatically set when using the @ notation.
+ This is an internal implementation detail and is not used directly, see `Using perf
+ framework`_.
+ * - cycacc
+ - Session local version of the system wide setting: :ref:`ETMv4_MODE_CYCACC
+ <coresight-cycle-accurate>`
+ * - retstack
+ - Session local version of the system wide setting: :ref:`ETM_MODE_RETURNSTACK
+ <coresight-return-stack>`
+ * - timestamp
+ - Session local version of the system wide setting: :ref:`ETMv4_MODE_TIMESTAMP
+ <coresight-timestamp>`
How to use the STM module
-------------------------
--
2.28.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 4/4] Documentation: coresight: Expand branch broadcast documentation
2022-05-11 14:45 [PATCH v3 0/4] coresight: Add config flag to enable branch broadcast James Clark
` (2 preceding siblings ...)
2022-05-11 14:46 ` [PATCH v3 3/4] Documentation: coresight: Link config options to existing documentation James Clark
@ 2022-05-11 14:46 ` James Clark
2022-05-18 9:28 ` Mike Leach
2022-05-25 10:06 ` [PATCH v3 0/4] coresight: Add config flag to enable branch broadcast Suzuki K Poulose
4 siblings, 1 reply; 7+ messages in thread
From: James Clark @ 2022-05-11 14:46 UTC (permalink / raw)
To: suzuki.poulose, mathieu.poirier, coresight, mike.leach
Cc: leo.yan, James Clark, Leo Yan, linux-arm-kernel, linux-doc, linux-kernel
Now that there is a way of enabling branch broadcast via perf, mention
the possible use cases and known limitations.
Signed-off-by: James Clark <james.clark@arm.com>
---
.../trace/coresight/coresight-etm4x-reference.rst | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/Documentation/trace/coresight/coresight-etm4x-reference.rst b/Documentation/trace/coresight/coresight-etm4x-reference.rst
index 0439b4006227..fb7578fd9372 100644
--- a/Documentation/trace/coresight/coresight-etm4x-reference.rst
+++ b/Documentation/trace/coresight/coresight-etm4x-reference.rst
@@ -656,7 +656,18 @@ Bit assignments shown below:-
ETM_MODE_BB
**description:**
- Set to enable branch broadcast if supported in hardware [IDR0].
+ Set to enable branch broadcast if supported in hardware [IDR0]. The primary use for this feature
+ is when code is patched dynamically at run time and the full program flow may not be able to be
+ reconstructed using only conditional branches.
+
+ There is currently no support in Perf for supplying modified binaries to the decoder, so this
+ feature is only inteded to be used for debugging purposes or with a 3rd party tool.
+
+ Choosing this option will result in a significant increase in the amount of trace generated -
+ possible danger of overflows, or fewer instructions covered. Note, that this option also
+ overrides any setting of :ref:`ETM_MODE_RETURNSTACK <coresight-return-stack>`, so where a branch
+ broadcast range overlaps a return stack range, return stacks will not be available for that
+ range.
.. _coresight-cycle-accurate:
--
2.28.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v3 4/4] Documentation: coresight: Expand branch broadcast documentation
2022-05-11 14:46 ` [PATCH v3 4/4] Documentation: coresight: Expand branch broadcast documentation James Clark
@ 2022-05-18 9:28 ` Mike Leach
0 siblings, 0 replies; 7+ messages in thread
From: Mike Leach @ 2022-05-18 9:28 UTC (permalink / raw)
To: James Clark
Cc: suzuki.poulose, mathieu.poirier, coresight, leo.yan, Leo Yan,
linux-arm-kernel, linux-doc, linux-kernel
On Wed, 11 May 2022 at 15:46, James Clark <james.clark@arm.com> wrote:
>
> Now that there is a way of enabling branch broadcast via perf, mention
> the possible use cases and known limitations.
>
> Signed-off-by: James Clark <james.clark@arm.com>
> ---
> .../trace/coresight/coresight-etm4x-reference.rst | 13 ++++++++++++-
> 1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/trace/coresight/coresight-etm4x-reference.rst b/Documentation/trace/coresight/coresight-etm4x-reference.rst
> index 0439b4006227..fb7578fd9372 100644
> --- a/Documentation/trace/coresight/coresight-etm4x-reference.rst
> +++ b/Documentation/trace/coresight/coresight-etm4x-reference.rst
> @@ -656,7 +656,18 @@ Bit assignments shown below:-
> ETM_MODE_BB
>
> **description:**
> - Set to enable branch broadcast if supported in hardware [IDR0].
> + Set to enable branch broadcast if supported in hardware [IDR0]. The primary use for this feature
> + is when code is patched dynamically at run time and the full program flow may not be able to be
> + reconstructed using only conditional branches.
> +
> + There is currently no support in Perf for supplying modified binaries to the decoder, so this
> + feature is only inteded to be used for debugging purposes or with a 3rd party tool.
> +
> + Choosing this option will result in a significant increase in the amount of trace generated -
> + possible danger of overflows, or fewer instructions covered. Note, that this option also
> + overrides any setting of :ref:`ETM_MODE_RETURNSTACK <coresight-return-stack>`, so where a branch
> + broadcast range overlaps a return stack range, return stacks will not be available for that
> + range.
>
> .. _coresight-cycle-accurate:
>
> --
> 2.28.0
>
Reviewed-by: Mike Leach<mike.leach@linaro.org>
--
Mike Leach
Principal Engineer, ARM Ltd.
Manchester Design Centre. UK
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 0/4] coresight: Add config flag to enable branch broadcast
2022-05-11 14:45 [PATCH v3 0/4] coresight: Add config flag to enable branch broadcast James Clark
` (3 preceding siblings ...)
2022-05-11 14:46 ` [PATCH v3 4/4] Documentation: coresight: Expand branch broadcast documentation James Clark
@ 2022-05-25 10:06 ` Suzuki K Poulose
4 siblings, 0 replies; 7+ messages in thread
From: Suzuki K Poulose @ 2022-05-25 10:06 UTC (permalink / raw)
To: James Clark, mathieu.poirier, coresight, mike.leach
Cc: leo.yan, Leo Yan, linux-arm-kernel, linux-doc, linux-kernel
Hi James,
On 11/05/2022 15:45, James Clark wrote:
> Apologies for the delay.
>
> Changes since v2:
>
> * Pick up some of Mike's review tags
> * Add a comment explaining rationale for not opening the event when BB isn't
> supported
> * Extend docs to say that Perf doesn't support decode when binaries are
> modified
> * Drop Perf side patches that were already merged
>
> Thanks
> James
>
> James Clark (4):
> coresight: Add config flag to enable branch broadcast
> Documentation: coresight: Turn numbered subsections into real
> subsections
> Documentation: coresight: Link config options to existing
> documentation
> Documentation: coresight: Expand branch broadcast documentation
The series looks good to me. Apologies, this missed the 5.19 window.
I will queue this for 5.20 at -rc1.
Suzuki
>
> .../coresight/coresight-etm4x-reference.rst | 17 +++++-
> Documentation/trace/coresight/coresight.rst | 56 +++++++++++++++++--
> .../hwtracing/coresight/coresight-etm-perf.c | 2 +
> .../coresight/coresight-etm4x-core.c | 14 +++++
> include/linux/coresight-pmu.h | 2 +
> 5 files changed, 85 insertions(+), 6 deletions(-)
>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2022-05-25 10:06 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-11 14:45 [PATCH v3 0/4] coresight: Add config flag to enable branch broadcast James Clark
2022-05-11 14:45 ` [PATCH v3 1/4] " James Clark
2022-05-11 14:45 ` [PATCH v3 2/4] Documentation: coresight: Turn numbered subsections into real subsections James Clark
2022-05-11 14:46 ` [PATCH v3 3/4] Documentation: coresight: Link config options to existing documentation James Clark
2022-05-11 14:46 ` [PATCH v3 4/4] Documentation: coresight: Expand branch broadcast documentation James Clark
2022-05-18 9:28 ` Mike Leach
2022-05-25 10:06 ` [PATCH v3 0/4] coresight: Add config flag to enable branch broadcast Suzuki K Poulose
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).