From: Leo Yan <leo.yan@linaro.org>
To: James Clark <james.clark@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>,
branislav.rankov@arm.com, al.grant@arm.com, denik@chromium.org,
Mathieu Poirier <mathieu.poirier@linaro.org>,
suzuki.poulose@arm.com,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Will Deacon <will@kernel.org>,
coresight@lists.linaro.org, John Garry <john.garry@huawei.com>,
linux-kernel@vger.kernel.org, Namhyung Kim <namhyung@kernel.org>,
Jiri Olsa <jolsa@redhat.com>,
linux-arm-kernel@lists.infradead.org,
Mike Leach <mike.leach@linaro.org>
Subject: Re: [PATCH 1/7] perf cs-etm: Split up etm queue setup function
Date: Sat, 20 Feb 2021 16:11:10 +0800 [thread overview]
Message-ID: <20210220081110.GA3824@leoy-ThinkPad-X240s> (raw)
In-Reply-To: <20210212144513.31765-2-james.clark@arm.com>
Hi James,
On Fri, Feb 12, 2021 at 04:45:07PM +0200, James Clark wrote:
> Refactor the function into separate allocation and
> timestamp search parts. Later the timestamp search
> will be done multiple times.
The new introduced function cs_etm__search_first_timestamp() is to
search timestamp; if it cannot find any valid timestamp, it will
drop all packets for every queue with the logic:
cs_etm__search_first_timestamp()
{
timestamp = cs_etm__etmq_get_timestamp();
if (timestamp)
return auxtrace_heap__add(); -> heapify timestamp
cs_etm__clear_all_packet_queues(); -> clear all packets
return 0;
}
If the function cs_etm__search_first_timestamp() is invoked for multiple
times, is it possible to clear all packets in the middle of decoding?
From my understanding, it makes sense to drop the trace data at the
very early decoding so that can get the timestamp for packets,
afterwards the packets should always have valid timestamp? If so, I
don't think it's necessary to contain the function
cs_etm__clear_all_packet_queues() in cs_etm__search_first_timestamp().
I will go back to check this conclusion is correct or not after I
have better understanding for the whole patch set. Just note here.
Thanks,
Leo
> Signed-off-by: James Clark <james.clark@arm.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..27894facae5e 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__search_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__search_first_timestamp(etmq);
> }
>
> static int cs_etm__setup_queues(struct cs_etm_auxtrace *etm)
> --
> 2.28.0
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2021-02-20 8:13 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-12 14:45 [PATCH 0/7] Split Coresight decode by aux records James Clark
2021-02-12 14:45 ` [PATCH 1/7] perf cs-etm: Split up etm queue setup function James Clark
2021-02-20 8:11 ` Leo Yan [this message]
2021-02-12 14:45 ` [PATCH 2/7] perf cs-etm: Only search timestamp in current sample's queue James Clark
2021-02-20 11:50 ` Leo Yan
2021-03-01 15:28 ` James Clark
2021-03-02 11:52 ` Leo Yan
2021-05-06 10:45 ` James Clark
2021-02-12 14:45 ` [PATCH 3/7] perf cs-etm: Save aux records in each etm queue James Clark
2021-02-27 7:10 ` Leo Yan
2021-03-01 15:43 ` James Clark
2021-03-02 12:03 ` Leo Yan
2021-02-12 14:45 ` [PATCH 4/7] perf cs-etm: don't process queues until cs_etm__flush_events James Clark
2021-02-12 14:45 ` [PATCH 5/7] perf cs-etm: split decode by aux records James Clark
2021-02-12 14:45 ` [PATCH 6/7] perf cs-etm: Use existing decode code path for --dump-raw-trace James Clark
2021-02-12 14:45 ` [PATCH 7/7] perf cs-etm: Suppress printing when resetting decoder James Clark
2021-02-24 16:13 ` [PATCH 0/7] Split Coresight decode by aux records Mathieu Poirier
2021-03-01 14:05 ` James Clark
2021-04-15 20:37 ` Mathieu Poirier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210220081110.GA3824@leoy-ThinkPad-X240s \
--to=leo.yan@linaro.org \
--cc=al.grant@arm.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=branislav.rankov@arm.com \
--cc=coresight@lists.linaro.org \
--cc=denik@chromium.org \
--cc=james.clark@arm.com \
--cc=john.garry@huawei.com \
--cc=jolsa@redhat.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mathieu.poirier@linaro.org \
--cc=mike.leach@linaro.org \
--cc=namhyung@kernel.org \
--cc=suzuki.poulose@arm.com \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox