mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-29 23:53:32 +00:00
5cb75f1880
ARM Neoverse-N2 (#2139208) and Cortex-A710(##2119858) suffers from an erratum, which when triggered, might cause the TRBE to overwrite the trace data already collected in FILL mode, in the event of a WRAP. i.e, the TRBE doesn't stop writing the data, instead wraps to the base and could write upto 3 cache line size worth trace. Thus, this could corrupt the trace at the "BASE" pointer. The workaround is to program the write pointer 256bytes from the base, such that if the erratum is triggered, it doesn't overwrite the trace data that was captured. This skipped region could be padded with ignore packets at the end of the session, so that the decoder sees a continuous buffer with some padding at the beginning. The trace data written at the base is considered lost as the limit could have been in the middle of the perf ring buffer, and jumping to the "base" is not acceptable. We set the flags already to indicate that some amount of trace was lost during the FILL event IRQ. So this is fine. One important change with the work around is, we program the TRBBASER_EL1 to current page where we are allowed to write. Otherwise, it could overwrite a region that may be consumed by the perf. Towards this, we always make sure that the "handle->head" and thus the trbe_write is PAGE_SIZE aligned, so that we can set the BASE to the PAGE base and move the TRBPTR to the 256bytes offset. Cc: Mike Leach <mike.leach@linaro.org> Cc: Mathieu Poirier <mathieu.poirier@linaro.org> Cc: Anshuman Khandual <anshuman.khandual@arm.com> Cc: Leo Yan <leo.yan@linaro.org> Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com> Link: https://lore.kernel.org/r/20211019163153.3692640-11-suzuki.poulose@arm.com Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org> |
||
---|---|---|
.. | ||
coresight-catu.c | ||
coresight-catu.h | ||
coresight-cfg-afdo.c | ||
coresight-cfg-preload.c | ||
coresight-cfg-preload.h | ||
coresight-config.c | ||
coresight-config.h | ||
coresight-core.c | ||
coresight-cpu-debug.c | ||
coresight-cti-core.c | ||
coresight-cti-platform.c | ||
coresight-cti-sysfs.c | ||
coresight-cti.h | ||
coresight-etb10.c | ||
coresight-etm-cp14.c | ||
coresight-etm-perf.c | ||
coresight-etm-perf.h | ||
coresight-etm.h | ||
coresight-etm3x-core.c | ||
coresight-etm3x-sysfs.c | ||
coresight-etm4x-cfg.c | ||
coresight-etm4x-cfg.h | ||
coresight-etm4x-core.c | ||
coresight-etm4x-sysfs.c | ||
coresight-etm4x.h | ||
coresight-funnel.c | ||
coresight-platform.c | ||
coresight-priv.h | ||
coresight-replicator.c | ||
coresight-self-hosted-trace.h | ||
coresight-stm.c | ||
coresight-syscfg-configfs.c | ||
coresight-syscfg-configfs.h | ||
coresight-syscfg.c | ||
coresight-syscfg.h | ||
coresight-sysfs.c | ||
coresight-tmc-core.c | ||
coresight-tmc-etf.c | ||
coresight-tmc-etr.c | ||
coresight-tmc.h | ||
coresight-tpiu.c | ||
coresight-trbe.c | ||
coresight-trbe.h | ||
Kconfig | ||
Makefile |