Hi
On Fri, 25 Jul 2025 at 11:08, Jie Gan jie.gan@oss.qualcomm.com wrote:
Add a list to store allocated etr_buf.
The byte-cntr functionality requires two etr_buf to receive trace data. The active etr_buf collects the trace data from source device, while the byte-cntr reading function accesses the deactivated etr_buf after is has been filled and synced, transferring data to the userspace.
Signed-off-by: Jie Gan jie.gan@oss.qualcomm.com
.../hwtracing/coresight/coresight-tmc-core.c | 1 + drivers/hwtracing/coresight/coresight-tmc.h | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+)
diff --git a/drivers/hwtracing/coresight/coresight-tmc-core.c b/drivers/hwtracing/coresight/coresight-tmc-core.c index be964656be93..4d249af93097 100644 --- a/drivers/hwtracing/coresight/coresight-tmc-core.c +++ b/drivers/hwtracing/coresight/coresight-tmc-core.c @@ -830,6 +830,7 @@ static int __tmc_probe(struct device *dev, struct resource *res) idr_init(&drvdata->idr); mutex_init(&drvdata->idr_mutex); dev_list = &etr_devs;
INIT_LIST_HEAD(&drvdata->etr_buf_list); break; case TMC_CONFIG_TYPE_ETF: desc.groups = coresight_etf_groups;
diff --git a/drivers/hwtracing/coresight/coresight-tmc.h b/drivers/hwtracing/coresight/coresight-tmc.h index 6541a27a018e..52ee5f8efe8c 100644 --- a/drivers/hwtracing/coresight/coresight-tmc.h +++ b/drivers/hwtracing/coresight/coresight-tmc.h @@ -208,6 +208,21 @@ struct tmc_resrv_buf { s64 len; };
+/**
- @sysfs_buf: Allocated sysfs_buf.
- @is_free: Indicates whether the buffer is free to choose.
- @reading: Indicates whether the buffer is reading.
- @pos: Position of the buffer.
- @node: Node in etr_buf_list.
- */
+struct etr_buf_node {
struct etr_buf *sysfs_buf;
bool is_free;
bool reading;
loff_t pos;
struct list_head node;
+};
/**
- struct tmc_drvdata - specifics associated to an TMC component
- @pclk: APB clock if present, otherwise NULL
@@ -242,6 +257,8 @@ struct tmc_resrv_buf {
(after crash) by default.
- @crash_mdata: Reserved memory for storing tmc crash metadata.
Used by ETR/ETF.
- @etr_buf_list: List that is used to manage allocated etr_buf.
*/
- @reading_node: Available buffer for byte-cntr reading.
struct tmc_drvdata { struct clk *pclk; @@ -271,6 +288,8 @@ struct tmc_drvdata { struct etr_buf *perf_buf; struct tmc_resrv_buf resrv_buf; struct tmc_resrv_buf crash_mdata;
struct list_head etr_buf_list;
struct etr_buf_node *reading_node;
Potential simplification:- do you need both reading_node here and reading in the etr_buf_node? reading_node handles the logic for which buffer is being read, while is_free handles the empty/full logic - reading seems unneeded?
};
struct etr_buf_operations {
2.34.1
regards
Mike