[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20251201-trbe_buffer_refactor_v1-1-v1-10-7da32b076b28@arm.com>
Date: Mon, 01 Dec 2025 11:22:00 +0000
From: Leo Yan <leo.yan@....com>
To: Suzuki K Poulose <suzuki.poulose@....com>,
Mike Leach <mike.leach@...aro.org>, James Clark <james.clark@...aro.org>,
Anshuman Khandual <anshuman.khandual@....com>,
Yeoreum Yun <yeoreum.yun@....com>, Will Deacon <will@...nel.org>,
Mark Rutland <mark.rutland@....com>, Tamas Petz <tamas.petz@....com>,
Tamas Zsoldos <tamas.zsoldos@....com>,
Arnaldo Carvalho de Melo <acme@...nel.org>,
Namhyung Kim <namhyung@...nel.org>, Jiri Olsa <jolsa@...nel.org>,
Ian Rogers <irogers@...gle.com>, Adrian Hunter <adrian.hunter@...el.com>
Cc: coresight@...ts.linaro.org, linux-arm-kernel@...ts.infradead.org,
linux-kernel@...r.kernel.org, linux-perf-users@...r.kernel.org,
Leo Yan <leo.yan@....com>
Subject: [PATCH 10/19] coresight: trbe: Always check fault action when
updating buffer
The current code checks the fault action only via the IRQ status bit,
which is unreliable due to possible hardware latency.
Move the fault action check out of the IRQ status condition. This also
causes the buffer size to be calculated for non-WRAP and fault cases,
which is fine since the write pointer is trusted for the calculation.
Signed-off-by: Leo Yan <leo.yan@....com>
---
drivers/hwtracing/coresight/coresight-trbe.c | 17 +++--------------
1 file changed, 3 insertions(+), 14 deletions(-)
diff --git a/drivers/hwtracing/coresight/coresight-trbe.c b/drivers/hwtracing/coresight/coresight-trbe.c
index f56ecdeaa6596afb440e4d53732e08a85f9bf89d..e579ea98523c24d23a0cd265dcdd0a46b52b52da 100644
--- a/drivers/hwtracing/coresight/coresight-trbe.c
+++ b/drivers/hwtracing/coresight/coresight-trbe.c
@@ -806,7 +806,6 @@ static unsigned long arm_trbe_update_buffer(struct coresight_device *csdev,
enum trbe_fault_action act;
unsigned long size, status;
unsigned long flags;
- bool wrap = false;
WARN_ON(buf->cpudata != cpudata);
WARN_ON(cpudata->cpu != smp_processor_id());
@@ -858,21 +857,11 @@ static unsigned long arm_trbe_update_buffer(struct coresight_device *csdev,
*/
clr_trbe_irq();
isb();
-
- act = trbe_get_fault_act(handle, status);
- /*
- * If this was not due to a WRAP event, we have some
- * errors and as such buffer is empty.
- */
- if (act != TRBE_FAULT_ACT_WRAP) {
- size = 0;
- goto done;
- }
-
- wrap = true;
}
- size = trbe_get_trace_size(handle, buf, wrap);
+ act = trbe_get_fault_act(handle, status);
+
+ size = trbe_get_trace_size(handle, buf, act == TRBE_FAULT_ACT_WRAP);
done:
local_irq_restore(flags);
--
2.34.1
Powered by blists - more mailing lists