[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20210209095857.28419-2-james.clark@arm.com>
Date: Tue, 9 Feb 2021 11:58:53 +0200
From: James Clark <james.clark@....com>
To: coresight@...ts.linaro.org
Cc: al.grant@....com, branislav.rankov@....com, denik@...omium.org,
James Clark <james.clark@....com>,
John Garry <john.garry@...wei.com>,
Will Deacon <will@...nel.org>,
Mathieu Poirier <mathieu.poirier@...aro.org>,
Leo Yan <leo.yan@...aro.org>,
Mike Leach <mike.leach@...aro.org>,
Mark Rutland <mark.rutland@....com>,
Alexander Shishkin <alexander.shishkin@...ux.intel.com>,
Jiri Olsa <jolsa@...hat.com>,
Namhyung Kim <namhyung@...nel.org>,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org
Subject: [RFC PATCH 1/5] perf cs-etm: Split up etm queue setup function
Refactor the function into separate allocation and
timestamp search parts. Later the timestamp search
will be done multiple times.
Signed-off-by: James Clark <james.clark@....com>
---
tools/perf/util/cs-etm.c | 60 +++++++++++++++++++++-------------------
1 file changed, 31 insertions(+), 29 deletions(-)
diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c
index a2a369e2fbb6..440001cdd3b8 100644
--- a/tools/perf/util/cs-etm.c
+++ b/tools/perf/util/cs-etm.c
@@ -765,33 +765,12 @@ static struct cs_etm_queue *cs_etm__alloc_queue(struct cs_etm_auxtrace *etm)
return NULL;
}
-static int cs_etm__setup_queue(struct cs_etm_auxtrace *etm,
- struct auxtrace_queue *queue,
- unsigned int queue_nr)
+static int cs_etm__seach_first_timestamp(struct cs_etm_queue *etmq)
{
int ret = 0;
+ u64 timestamp;
unsigned int cs_queue_nr;
u8 trace_chan_id;
- u64 timestamp;
- struct cs_etm_queue *etmq = queue->priv;
-
- if (list_empty(&queue->head) || etmq)
- goto out;
-
- etmq = cs_etm__alloc_queue(etm);
-
- if (!etmq) {
- ret = -ENOMEM;
- goto out;
- }
-
- queue->priv = etmq;
- etmq->etm = etm;
- etmq->queue_nr = queue_nr;
- etmq->offset = 0;
-
- if (etm->timeless_decoding)
- goto out;
/*
* We are under a CPU-wide trace scenario. As such we need to know
@@ -808,7 +787,7 @@ static int cs_etm__setup_queue(struct cs_etm_auxtrace *etm,
*/
ret = cs_etm__get_data_block(etmq);
if (ret <= 0)
- goto out;
+ return ret;
/*
* Run decoder on the trace block. The decoder will stop when
@@ -817,7 +796,7 @@ static int cs_etm__setup_queue(struct cs_etm_auxtrace *etm,
*/
ret = cs_etm__decode_data_block(etmq);
if (ret)
- goto out;
+ return ret;
/*
* Function cs_etm_decoder__do_{hard|soft}_timestamp() does all
@@ -849,10 +828,33 @@ static int cs_etm__setup_queue(struct cs_etm_auxtrace *etm,
* Note that packets decoded above are still in the traceID's packet
* queue and will be processed in cs_etm__process_queues().
*/
- cs_queue_nr = TO_CS_QUEUE_NR(queue_nr, trace_chan_id);
- ret = auxtrace_heap__add(&etm->heap, cs_queue_nr, timestamp);
-out:
- return ret;
+ cs_queue_nr = TO_CS_QUEUE_NR(etmq->queue_nr, trace_chan_id);
+ return auxtrace_heap__add(&etmq->etm->heap, cs_queue_nr, timestamp);
+}
+
+static int cs_etm__setup_queue(struct cs_etm_auxtrace *etm,
+ struct auxtrace_queue *queue,
+ unsigned int queue_nr)
+{
+ struct cs_etm_queue *etmq = queue->priv;
+
+ if (list_empty(&queue->head) || etmq)
+ return 0;
+
+ etmq = cs_etm__alloc_queue(etm);
+
+ if (!etmq)
+ return -ENOMEM;
+
+ queue->priv = etmq;
+ etmq->etm = etm;
+ etmq->queue_nr = queue_nr;
+ etmq->offset = 0;
+
+ if (etm->timeless_decoding)
+ return 0;
+ else
+ return cs_etm__seach_first_timestamp(etmq);
}
static int cs_etm__setup_queues(struct cs_etm_auxtrace *etm)
--
2.28.0
Powered by blists - more mailing lists