All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mathieu Poirier <mathieu.poirier@linaro.org>
To: James Clark <james.clark@arm.com>
Cc: acme@kernel.org, coresight@lists.linaro.org, leo.yan@linaro.org,
	al.grant@arm.com, branislav.rankov@arm.com,
	suzuki.poulose@arm.com, anshuman.khandual@arm.com,
	Mike Leach <mike.leach@linaro.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
	John Garry <john.garry@huawei.com>, Will Deacon <will@kernel.org>,
	linux-arm-kernel@lists.infradead.org,
	linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 5/6] perf cs-etm: Use existing decoder instead of resetting it
Date: Mon, 19 Jul 2021 13:39:52 -0600	[thread overview]
Message-ID: <20210719193952.GF2255168@p14s> (raw)
In-Reply-To: <20210713154008.29656-6-james.clark@arm.com>

On Tue, Jul 13, 2021 at 04:40:07PM +0100, James Clark wrote:
> When dumping trace, the decoder is continually deleted and recreated to
> decode each buffer. To support both formatted and unformatted trace in
> a later commit, the decoder will be configured in advance.
> 
> This commit removes the deletion of the decoder and allows the
> formatted/unformatted setting to persist.
> 
> Signed-off-by: James Clark <james.clark@arm.com>
> ---

Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>

>  tools/perf/util/cs-etm.c | 37 +++++++------------------------------
>  1 file changed, 7 insertions(+), 30 deletions(-)
> 
> diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c
> index 2d07e52ffd3c..760050ea936d 100644
> --- a/tools/perf/util/cs-etm.c
> +++ b/tools/perf/util/cs-etm.c
> @@ -508,14 +508,11 @@ static int cs_etm__init_decoder_params(struct cs_etm_decoder_params *d_params,
>  	return ret;
>  }
>  
> -static void cs_etm__dump_event(struct cs_etm_auxtrace *etm,
> +static void cs_etm__dump_event(struct cs_etm_queue *etmq,
>  			       struct auxtrace_buffer *buffer)
>  {
>  	int ret;
>  	const char *color = PERF_COLOR_BLUE;
> -	struct cs_etm_decoder_params d_params;
> -	struct cs_etm_trace_params *t_params;
> -	struct cs_etm_decoder *decoder;
>  	size_t buffer_used = 0;
>  
>  	fprintf(stdout, "\n");
> @@ -523,29 +520,11 @@ static void cs_etm__dump_event(struct cs_etm_auxtrace *etm,
>  		     ". ... CoreSight ETM Trace data: size %zu bytes\n",
>  		     buffer->size);
>  
> -	/* Use metadata to fill in trace parameters for trace decoder */
> -	t_params = zalloc(sizeof(*t_params) * etm->num_cpu);
> -
> -	if (!t_params)
> -		return;
> -
> -	if (cs_etm__init_trace_params(t_params, etm))
> -		goto out_free;
> -
> -	/* Set decoder parameters to simply print the trace packets */
> -	if (cs_etm__init_decoder_params(&d_params, NULL,
> -					CS_ETM_OPERATION_PRINT))
> -		goto out_free;
> -
> -	decoder = cs_etm_decoder__new(etm->num_cpu, &d_params, t_params);
> -
> -	if (!decoder)
> -		goto out_free;
>  	do {
>  		size_t consumed;
>  
>  		ret = cs_etm_decoder__process_data_block(
> -				decoder, buffer->offset,
> +				etmq->decoder, buffer->offset,
>  				&((u8 *)buffer->data)[buffer_used],
>  				buffer->size - buffer_used, &consumed);
>  		if (ret)
> @@ -554,10 +533,7 @@ static void cs_etm__dump_event(struct cs_etm_auxtrace *etm,
>  		buffer_used += consumed;
>  	} while (buffer_used < buffer->size);
>  
> -	cs_etm_decoder__free(decoder);
> -
> -out_free:
> -	zfree(&t_params);
> +	cs_etm_decoder__reset(etmq->decoder);
>  }
>  
>  static int cs_etm__flush_events(struct perf_session *session,
> @@ -769,7 +745,8 @@ static struct cs_etm_queue *cs_etm__alloc_queue(struct cs_etm_auxtrace *etm)
>  
>  	/* Set decoder parameters to decode trace packets */
>  	if (cs_etm__init_decoder_params(&d_params, etmq,
> -					CS_ETM_OPERATION_DECODE))
> +					dump_trace ? CS_ETM_OPERATION_PRINT :
> +						     CS_ETM_OPERATION_DECODE))
>  		goto out_free;
>  
>  	etmq->decoder = cs_etm_decoder__new(etm->num_cpu, &d_params, t_params);
> @@ -2422,7 +2399,7 @@ static void dump_queued_data(struct cs_etm_auxtrace *etm,
>  	for (i = 0; i < etm->queues.nr_queues; ++i)
>  		list_for_each_entry(buf, &etm->queues.queue_array[i].head, list)
>  			if (buf->reference == event->reference)
> -				cs_etm__dump_event(etm, buf);
> +				cs_etm__dump_event(etm->queues.queue_array[i].priv, buf);
>  }
>  
>  static int cs_etm__process_auxtrace_event(struct perf_session *session,
> @@ -2460,7 +2437,7 @@ static int cs_etm__process_auxtrace_event(struct perf_session *session,
>  
>  		if (dump_trace)
>  			if (auxtrace_buffer__get_data(buffer, fd)) {
> -				cs_etm__dump_event(etm, buffer);
> +				cs_etm__dump_event(etm->queues.queue_array[idx].priv, buffer);
>  				auxtrace_buffer__put_data(buffer);
>  			}
>  	} else if (dump_trace)
> -- 
> 2.28.0
> 

WARNING: multiple messages have this Message-ID (diff)
From: Mathieu Poirier <mathieu.poirier@linaro.org>
To: James Clark <james.clark@arm.com>
Cc: acme@kernel.org, coresight@lists.linaro.org, leo.yan@linaro.org,
	al.grant@arm.com, branislav.rankov@arm.com,
	suzuki.poulose@arm.com, anshuman.khandual@arm.com,
	Mike Leach <mike.leach@linaro.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
	John Garry <john.garry@huawei.com>, Will Deacon <will@kernel.org>,
	linux-arm-kernel@lists.infradead.org,
	linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 5/6] perf cs-etm: Use existing decoder instead of resetting it
Date: Mon, 19 Jul 2021 13:39:52 -0600	[thread overview]
Message-ID: <20210719193952.GF2255168@p14s> (raw)
In-Reply-To: <20210713154008.29656-6-james.clark@arm.com>

On Tue, Jul 13, 2021 at 04:40:07PM +0100, James Clark wrote:
> When dumping trace, the decoder is continually deleted and recreated to
> decode each buffer. To support both formatted and unformatted trace in
> a later commit, the decoder will be configured in advance.
> 
> This commit removes the deletion of the decoder and allows the
> formatted/unformatted setting to persist.
> 
> Signed-off-by: James Clark <james.clark@arm.com>
> ---

Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>

>  tools/perf/util/cs-etm.c | 37 +++++++------------------------------
>  1 file changed, 7 insertions(+), 30 deletions(-)
> 
> diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c
> index 2d07e52ffd3c..760050ea936d 100644
> --- a/tools/perf/util/cs-etm.c
> +++ b/tools/perf/util/cs-etm.c
> @@ -508,14 +508,11 @@ static int cs_etm__init_decoder_params(struct cs_etm_decoder_params *d_params,
>  	return ret;
>  }
>  
> -static void cs_etm__dump_event(struct cs_etm_auxtrace *etm,
> +static void cs_etm__dump_event(struct cs_etm_queue *etmq,
>  			       struct auxtrace_buffer *buffer)
>  {
>  	int ret;
>  	const char *color = PERF_COLOR_BLUE;
> -	struct cs_etm_decoder_params d_params;
> -	struct cs_etm_trace_params *t_params;
> -	struct cs_etm_decoder *decoder;
>  	size_t buffer_used = 0;
>  
>  	fprintf(stdout, "\n");
> @@ -523,29 +520,11 @@ static void cs_etm__dump_event(struct cs_etm_auxtrace *etm,
>  		     ". ... CoreSight ETM Trace data: size %zu bytes\n",
>  		     buffer->size);
>  
> -	/* Use metadata to fill in trace parameters for trace decoder */
> -	t_params = zalloc(sizeof(*t_params) * etm->num_cpu);
> -
> -	if (!t_params)
> -		return;
> -
> -	if (cs_etm__init_trace_params(t_params, etm))
> -		goto out_free;
> -
> -	/* Set decoder parameters to simply print the trace packets */
> -	if (cs_etm__init_decoder_params(&d_params, NULL,
> -					CS_ETM_OPERATION_PRINT))
> -		goto out_free;
> -
> -	decoder = cs_etm_decoder__new(etm->num_cpu, &d_params, t_params);
> -
> -	if (!decoder)
> -		goto out_free;
>  	do {
>  		size_t consumed;
>  
>  		ret = cs_etm_decoder__process_data_block(
> -				decoder, buffer->offset,
> +				etmq->decoder, buffer->offset,
>  				&((u8 *)buffer->data)[buffer_used],
>  				buffer->size - buffer_used, &consumed);
>  		if (ret)
> @@ -554,10 +533,7 @@ static void cs_etm__dump_event(struct cs_etm_auxtrace *etm,
>  		buffer_used += consumed;
>  	} while (buffer_used < buffer->size);
>  
> -	cs_etm_decoder__free(decoder);
> -
> -out_free:
> -	zfree(&t_params);
> +	cs_etm_decoder__reset(etmq->decoder);
>  }
>  
>  static int cs_etm__flush_events(struct perf_session *session,
> @@ -769,7 +745,8 @@ static struct cs_etm_queue *cs_etm__alloc_queue(struct cs_etm_auxtrace *etm)
>  
>  	/* Set decoder parameters to decode trace packets */
>  	if (cs_etm__init_decoder_params(&d_params, etmq,
> -					CS_ETM_OPERATION_DECODE))
> +					dump_trace ? CS_ETM_OPERATION_PRINT :
> +						     CS_ETM_OPERATION_DECODE))
>  		goto out_free;
>  
>  	etmq->decoder = cs_etm_decoder__new(etm->num_cpu, &d_params, t_params);
> @@ -2422,7 +2399,7 @@ static void dump_queued_data(struct cs_etm_auxtrace *etm,
>  	for (i = 0; i < etm->queues.nr_queues; ++i)
>  		list_for_each_entry(buf, &etm->queues.queue_array[i].head, list)
>  			if (buf->reference == event->reference)
> -				cs_etm__dump_event(etm, buf);
> +				cs_etm__dump_event(etm->queues.queue_array[i].priv, buf);
>  }
>  
>  static int cs_etm__process_auxtrace_event(struct perf_session *session,
> @@ -2460,7 +2437,7 @@ static int cs_etm__process_auxtrace_event(struct perf_session *session,
>  
>  		if (dump_trace)
>  			if (auxtrace_buffer__get_data(buffer, fd)) {
> -				cs_etm__dump_event(etm, buffer);
> +				cs_etm__dump_event(etm->queues.queue_array[idx].priv, buffer);
>  				auxtrace_buffer__put_data(buffer);
>  			}
>  	} else if (dump_trace)
> -- 
> 2.28.0
> 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2021-07-19 23:18 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-13 15:40 [PATCH 0/6] perf cs-etm: Support TRBE (unformatted decoding) James Clark
2021-07-13 15:40 ` James Clark
2021-07-13 15:40 ` [PATCH 1/6] perf cs-etm: Refactor initialisation of kernel start address James Clark
2021-07-13 15:40   ` James Clark
2021-07-19 19:37   ` Mathieu Poirier
2021-07-19 19:37     ` Mathieu Poirier
2021-07-13 15:40 ` [PATCH 2/6] perf cs-etm: Split setup and timestamp search functions James Clark
2021-07-13 15:40   ` James Clark
2021-07-19 19:38   ` Mathieu Poirier
2021-07-19 19:38     ` Mathieu Poirier
2021-07-13 15:40 ` [PATCH 3/6] perf cs-etm: Only setup queues when they are modified James Clark
2021-07-13 15:40   ` James Clark
2021-07-19 19:38   ` Mathieu Poirier
2021-07-19 19:38     ` Mathieu Poirier
2021-07-13 15:40 ` [PATCH 4/6] perf cs-etm: Suppress printing when resetting decoder James Clark
2021-07-13 15:40   ` James Clark
2021-07-19 19:39   ` Mathieu Poirier
2021-07-19 19:39     ` Mathieu Poirier
2021-07-13 15:40 ` [PATCH 5/6] perf cs-etm: Use existing decoder instead of resetting it James Clark
2021-07-13 15:40   ` James Clark
2021-07-19 19:39   ` Mathieu Poirier [this message]
2021-07-19 19:39     ` Mathieu Poirier
2021-07-13 15:40 ` [PATCH 6/6] perf cs-etm: Pass unformatted flag to decoder James Clark
2021-07-13 15:40   ` James Clark
2021-07-19 19:40   ` Mathieu Poirier
2021-07-19 19:40     ` Mathieu Poirier
2021-07-20 15:45   ` Mathieu Poirier
2021-07-20 15:45     ` Mathieu Poirier
2021-07-21  8:35     ` James Clark
2021-07-21  8:35       ` James Clark

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=20210719193952.GF2255168@p14s \
    --to=mathieu.poirier@linaro.org \
    --cc=acme@kernel.org \
    --cc=al.grant@arm.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=anshuman.khandual@arm.com \
    --cc=branislav.rankov@arm.com \
    --cc=coresight@lists.linaro.org \
    --cc=james.clark@arm.com \
    --cc=john.garry@huawei.com \
    --cc=jolsa@redhat.com \
    --cc=leo.yan@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.