Thread (4 messages) 4 messages, 2 authors, 2021-06-01

Re: [RFC PATCH v3] perf cs-etm: Split Coresight decode by aux records

From: Mathieu Poirier <mathieu.poirier@linaro.org>
Date: 2021-05-27 15:38:12
Also in: linux-perf-users, lkml

On Thu, 27 May 2021 at 07:46, James Clark [off-list ref] wrote:


On 27/05/2021 13:42, James Clark wrote:
quoted
Populate the auxtrace queues using AUX records rather than whole
auxtrace buffers.
...
quoted
Snapshot mode still needs to be tested.
Snapshot mode is also working, but needs the following patch applied to reverse aux_offset
from the end of the buffer to the beginning:
It might be better to send another revision with this patch included
in to make sure everyone is looking at (and testing) the same thing.
quoted hunk ↗ jump to hunk
diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c
index 5d6c03488187..9db556e14dfa 100644
--- a/tools/perf/util/cs-etm.c
+++ b/tools/perf/util/cs-etm.c
@@ -2700,6 +2700,7 @@ static int cs_etm__queue_aux_fragment(struct perf_session *session,
        struct perf_record_auxtrace *auxtrace_event;
        union perf_event auxtrace_fragment;
        bool matchesCpuPid;
+       __u64 aux_offset;
        struct cs_etm_auxtrace *etm = container_of(session->auxtrace,
                                                   struct cs_etm_auxtrace,
                                                   auxtrace);
@@ -2730,19 +2731,26 @@ static int cs_etm__queue_aux_fragment(struct perf_session *session,
        else
                matchesCpuPid = auxtrace_event->cpu == sample->cpu;

+       /*
+        * In snapshot/overwrite mode, the head points to the end of the buffer so aux_offset needs
+        * to have the size subtracted so it points to the beginning as in normal mode.
+        */
+       if (aux_event->flags && PERF_AUX_FLAG_OVERWRITE)
+               aux_offset = aux_event->aux_offset - aux_event->aux_size;
+       else
+               aux_offset = aux_event->aux_offset;
+
        if (matchesCpuPid &&
-           aux_event->aux_offset >= auxtrace_event->offset &&
-           aux_event->aux_offset + aux_event->aux_size <=
-                       auxtrace_event->offset + auxtrace_event->size) {
+           aux_offset >= auxtrace_event->offset &&
+           aux_offset + aux_event->aux_size <= auxtrace_event->offset + auxtrace_event->size) {
                /*
                 * If this AUX event was inside this buffer somewhere, create a new auxtrace event
                 * based on the sizes of the aux event, and queue that fragment.
                 */
                auxtrace_fragment.auxtrace = *auxtrace_event;
                auxtrace_fragment.auxtrace.size = aux_event->aux_size;
-               auxtrace_fragment.auxtrace.offset = aux_event->aux_offset;
-               file_offset += aux_event->aux_offset - auxtrace_event->offset +
-                               auxtrace_event->header.size;
+               auxtrace_fragment.auxtrace.offset = aux_offset;
+               file_offset += aux_offset - auxtrace_event->offset + auxtrace_event->header.size;
                return auxtrace_queues__add_event(&etm->queues,
                                               session,
                                               &auxtrace_fragment,
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help