Skip to content

Commit

Permalink
perf cs-etm: Detect pid in VMID for kernel running at EL2
Browse files Browse the repository at this point in the history
The pid of the task could be traced as VMID when the kernel is
running at EL2. Teach the decoder to look for vmid when the
context_id is invalid but we have a valid VMID.

Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Cc: Mike Leach <mike.leach@linaro.org>
Cc: Leo Yan <leo.yan@linaro.org>
Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
  • Loading branch information
Suzuki K Poulose authored and Leo Yan committed Nov 16, 2020
1 parent ba70531 commit 302600d
Showing 1 changed file with 28 additions and 4 deletions.
32 changes: 28 additions & 4 deletions tools/perf/util/cs-etm-decoder/cs-etm-decoder.c
Expand Up @@ -6,6 +6,7 @@
* Author: Mathieu Poirier <mathieu.poirier@linaro.org>
*/

#include <linux/coresight-pmu.h>
#include <linux/err.h>
#include <linux/list.h>
#include <linux/zalloc.h>
Expand Down Expand Up @@ -500,13 +501,36 @@ cs_etm_decoder__set_tid(struct cs_etm_queue *etmq,
const ocsd_generic_trace_elem *elem,
const uint8_t trace_chan_id)
{
pid_t tid;
pid_t tid = -1;
u64 pid_fmt;
int ret;

/* Ignore PE_CONTEXT packets that don't have a valid contextID */
if (!elem->context.ctxt_id_valid)
ret = cs_etm__get_pid_fmt(trace_chan_id, &pid_fmt);
if (ret)
return OCSD_RESP_FATAL_SYS_ERR;

/*
* Process the PE_CONTEXT packets if we have a valid
* contextID or VMID.
* If the kernel is running at EL2, the PID is traced
* in contextidr_el2 as VMID.
*/
switch (pid_fmt) {
case BIT(ETM_OPT_CTXTID):
if (elem->context.ctxt_id_valid)
tid = elem->context.context_id;
break;
case BIT(ETM_OPT_CTXTID_IN_VMID):
if (elem->context.vmid_valid)
tid = elem->context.vmid;
break;
default:
break;
}

if (tid == -1)
return OCSD_RESP_CONT;

tid = elem->context.context_id;
if (cs_etm__etmq_set_tid(etmq, tid, trace_chan_id))
return OCSD_RESP_FATAL_SYS_ERR;

Expand Down

0 comments on commit 302600d

Please sign in to comment.