• Suzuki K Poulose's avatar
    coresight: etm-perf: Support PID tracing for kernel at EL2 · 88f11864
    Suzuki K Poulose authored
    When the kernel is running at EL2, the PID is stored in CONTEXTIDR_EL2.
    So, tracing CONTEXTIDR_EL1 doesn't give us the pid of the process.
    Thus we should trace the VMID with VMIDOPT set to trace CONTEXTIDR_EL2
    instead of CONTEXTIDR_EL1.  Given that we have an existing config
    option "contextid" and this will be useful for tracing virtual machines
    (when we get to support virtualization).
    
    So instead, this patch extends option CTXTID with an extra bit
    ETM_OPT_CTXTID2 (bit 15), thus on an EL2 kernel, we will have another
    bit available for the perf tool: ETM_OPT_CTXTID is for kernel running in
    EL1, ETM_OPT_CTXTID2 is used when kernel runs in EL2 with VHE enabled.
    
    The tool must be backward compatible for users, i.e, "contextid" today
    traces PID and that should remain the same; for this purpose, the perf
    tool is updated to automatically set corresponding bit for the
    "contextid" config, therefore, the user doesn't have to bother which EL
    the kernel is running.
    
      i.e, perf record -e cs_etm/contextid/u --
    
    will always do the "pid" tracing, independent of the kernel EL.
    
    The driver parses the format "contextid", which traces CONTEXTIDR_EL1
    for ETM_OPT_CTXTID (on EL1 kernel) and traces CONTEXTIDR_EL2 for
    ETM_OPT_CTXTID2 (on EL2 kernel).
    
    Besides the enhancement for format "contexid", extra two formats are
    introduced: "contextid1" and "contextid2".  This considers to support
    tracing both CONTEXTIDR_EL1 and CONTEXTIDR_EL2 when the kernel is
    running at EL2.  Finally, the PMU formats are defined as follow:
    
      "contextid1": Available on both EL1 kernel and EL2 kernel.  When the
                    kernel is running at EL1, "contextid1" enables the PID
    		tracing; when the kernel is running at EL2, this enables
    		tracing the PID of guest applications.
    
      "contextid2": Only usable when the kernel is running at EL2.  When
                    selected, enables PID tracing on EL2 kernel.
    
      "contextid":  Will be an alias for the option that enables PID
                    tracing.  I.e,
                    contextid == contextid1, on EL1 kernel.
                    contextid == contextid2, on EL2 kernel.
    
    Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
    Cc: Al Grant <al.grant@arm.com>
    Cc: Mike Leach <mike.leach@linaro.org>
    Cc: Leo Yan <leo.yan@linaro.org>
    Reviewed-by: default avatarMike Leach <mike.leach@linaro.org>
    Signed-off-by: default avatarSuzuki K Poulose <suzuki.poulose@arm.com>
    [ Added two config formats: contextid1, contextid2 ]
    Signed-off-by: default avatarLeo Yan <leo.yan@linaro.org>
    Signed-off-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
    Link: https://lore.kernel.org/r/20210206150833.42120-4-leo.yan@linaro.org
    Link: https://lore.kernel.org/r/20210211172038.2483517-3-mathieu.poirier@linaro.orgSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    88f11864
coresight-etm-perf.c 16 KB