From: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
To: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>,
linux-kernel@vger.kernel.org, Wei Li <liwei391@huawei.com>,
Leo Yan <leo.yan@linaro.org>,
Mathieu Poirier <mathieu.poirier@linaro.org>,
Kim Phillips <kim.phillips@arm.com>
Subject: Re: [PATCH V2 5/5] perf auxtrace: Add auxtrace_record__read_finish()
Date: Mon, 17 Feb 2020 11:42:32 -0300 [thread overview]
Message-ID: <20200217144232.GB19953@kernel.org> (raw)
In-Reply-To: <20200217082300.6301-1-adrian.hunter@intel.com>
Em Mon, Feb 17, 2020 at 10:23:00AM +0200, Adrian Hunter escreveu:
> All ->read_finish() implementations are doing the same thing. Add a
> helper function so that they can share the same implementation.
>
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> Reviewed-and-Tested-by: Leo Yan <leo.yan@linaro.org>
> Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
> ---
>
>
> Changes in V2:
>
> Change ptr->itr.cs_etm_pmu to ptr->itr.pmu
Series applied to perf/urgent, thanks,
- Arnaldo
>
> tools/perf/arch/arm/util/cs-etm.c | 21 ++-------------------
> tools/perf/arch/arm64/util/arm-spe.c | 20 ++------------------
> tools/perf/arch/x86/util/intel-bts.c | 20 ++------------------
> tools/perf/arch/x86/util/intel-pt.c | 20 ++------------------
> tools/perf/util/auxtrace.c | 22 +++++++++++++++++++++-
> tools/perf/util/auxtrace.h | 6 ++++++
> 6 files changed, 35 insertions(+), 74 deletions(-)
>
> diff --git a/tools/perf/arch/arm/util/cs-etm.c b/tools/perf/arch/arm/util/cs-etm.c
> index 60141c3007a9..941f814820b8 100644
> --- a/tools/perf/arch/arm/util/cs-etm.c
> +++ b/tools/perf/arch/arm/util/cs-etm.c
> @@ -858,24 +858,6 @@ static void cs_etm_recording_free(struct auxtrace_record *itr)
> free(ptr);
> }
>
> -static int cs_etm_read_finish(struct auxtrace_record *itr, int idx)
> -{
> - struct cs_etm_recording *ptr =
> - container_of(itr, struct cs_etm_recording, itr);
> - struct evsel *evsel;
> -
> - evlist__for_each_entry(ptr->evlist, evsel) {
> - if (evsel->core.attr.type == ptr->cs_etm_pmu->type) {
> - if (evsel->disabled)
> - return 0;
> - return perf_evlist__enable_event_idx(ptr->evlist,
> - evsel, idx);
> - }
> - }
> -
> - return -EINVAL;
> -}
> -
> struct auxtrace_record *cs_etm_record_init(int *err)
> {
> struct perf_pmu *cs_etm_pmu;
> @@ -895,6 +877,7 @@ struct auxtrace_record *cs_etm_record_init(int *err)
> }
>
> ptr->cs_etm_pmu = cs_etm_pmu;
> + ptr->itr.pmu = cs_etm_pmu;
> ptr->itr.parse_snapshot_options = cs_etm_parse_snapshot_options;
> ptr->itr.recording_options = cs_etm_recording_options;
> ptr->itr.info_priv_size = cs_etm_info_priv_size;
> @@ -904,7 +887,7 @@ struct auxtrace_record *cs_etm_record_init(int *err)
> ptr->itr.snapshot_finish = cs_etm_snapshot_finish;
> ptr->itr.reference = cs_etm_reference;
> ptr->itr.free = cs_etm_recording_free;
> - ptr->itr.read_finish = cs_etm_read_finish;
> + ptr->itr.read_finish = auxtrace_record__read_finish;
>
> *err = 0;
> return &ptr->itr;
> diff --git a/tools/perf/arch/arm64/util/arm-spe.c b/tools/perf/arch/arm64/util/arm-spe.c
> index 1d993c27242b..8d6821d9c3f6 100644
> --- a/tools/perf/arch/arm64/util/arm-spe.c
> +++ b/tools/perf/arch/arm64/util/arm-spe.c
> @@ -158,23 +158,6 @@ static void arm_spe_recording_free(struct auxtrace_record *itr)
> free(sper);
> }
>
> -static int arm_spe_read_finish(struct auxtrace_record *itr, int idx)
> -{
> - struct arm_spe_recording *sper =
> - container_of(itr, struct arm_spe_recording, itr);
> - struct evsel *evsel;
> -
> - evlist__for_each_entry(sper->evlist, evsel) {
> - if (evsel->core.attr.type == sper->arm_spe_pmu->type) {
> - if (evsel->disabled)
> - return 0;
> - return perf_evlist__enable_event_idx(sper->evlist,
> - evsel, idx);
> - }
> - }
> - return -EINVAL;
> -}
> -
> struct auxtrace_record *arm_spe_recording_init(int *err,
> struct perf_pmu *arm_spe_pmu)
> {
> @@ -192,12 +175,13 @@ struct auxtrace_record *arm_spe_recording_init(int *err,
> }
>
> sper->arm_spe_pmu = arm_spe_pmu;
> + sper->itr.pmu = arm_spe_pmu;
> sper->itr.recording_options = arm_spe_recording_options;
> sper->itr.info_priv_size = arm_spe_info_priv_size;
> sper->itr.info_fill = arm_spe_info_fill;
> sper->itr.free = arm_spe_recording_free;
> sper->itr.reference = arm_spe_reference;
> - sper->itr.read_finish = arm_spe_read_finish;
> + sper->itr.read_finish = auxtrace_record__read_finish;
> sper->itr.alignment = 0;
>
> *err = 0;
> diff --git a/tools/perf/arch/x86/util/intel-bts.c b/tools/perf/arch/x86/util/intel-bts.c
> index 39e363151ad7..26cee1052179 100644
> --- a/tools/perf/arch/x86/util/intel-bts.c
> +++ b/tools/perf/arch/x86/util/intel-bts.c
> @@ -413,23 +413,6 @@ static int intel_bts_find_snapshot(struct auxtrace_record *itr, int idx,
> return err;
> }
>
> -static int intel_bts_read_finish(struct auxtrace_record *itr, int idx)
> -{
> - struct intel_bts_recording *btsr =
> - container_of(itr, struct intel_bts_recording, itr);
> - struct evsel *evsel;
> -
> - evlist__for_each_entry(btsr->evlist, evsel) {
> - if (evsel->core.attr.type == btsr->intel_bts_pmu->type) {
> - if (evsel->disabled)
> - return 0;
> - return perf_evlist__enable_event_idx(btsr->evlist,
> - evsel, idx);
> - }
> - }
> - return -EINVAL;
> -}
> -
> struct auxtrace_record *intel_bts_recording_init(int *err)
> {
> struct perf_pmu *intel_bts_pmu = perf_pmu__find(INTEL_BTS_PMU_NAME);
> @@ -450,6 +433,7 @@ struct auxtrace_record *intel_bts_recording_init(int *err)
> }
>
> btsr->intel_bts_pmu = intel_bts_pmu;
> + btsr->itr.pmu = intel_bts_pmu;
> btsr->itr.recording_options = intel_bts_recording_options;
> btsr->itr.info_priv_size = intel_bts_info_priv_size;
> btsr->itr.info_fill = intel_bts_info_fill;
> @@ -459,7 +443,7 @@ struct auxtrace_record *intel_bts_recording_init(int *err)
> btsr->itr.find_snapshot = intel_bts_find_snapshot;
> btsr->itr.parse_snapshot_options = intel_bts_parse_snapshot_options;
> btsr->itr.reference = intel_bts_reference;
> - btsr->itr.read_finish = intel_bts_read_finish;
> + btsr->itr.read_finish = auxtrace_record__read_finish;
> btsr->itr.alignment = sizeof(struct branch);
> return &btsr->itr;
> }
> diff --git a/tools/perf/arch/x86/util/intel-pt.c b/tools/perf/arch/x86/util/intel-pt.c
> index 2f0a0832907f..acadaa10c65d 100644
> --- a/tools/perf/arch/x86/util/intel-pt.c
> +++ b/tools/perf/arch/x86/util/intel-pt.c
> @@ -1170,23 +1170,6 @@ static u64 intel_pt_reference(struct auxtrace_record *itr __maybe_unused)
> return rdtsc();
> }
>
> -static int intel_pt_read_finish(struct auxtrace_record *itr, int idx)
> -{
> - struct intel_pt_recording *ptr =
> - container_of(itr, struct intel_pt_recording, itr);
> - struct evsel *evsel;
> -
> - evlist__for_each_entry(ptr->evlist, evsel) {
> - if (evsel->core.attr.type == ptr->intel_pt_pmu->type) {
> - if (evsel->disabled)
> - return 0;
> - return perf_evlist__enable_event_idx(ptr->evlist, evsel,
> - idx);
> - }
> - }
> - return -EINVAL;
> -}
> -
> struct auxtrace_record *intel_pt_recording_init(int *err)
> {
> struct perf_pmu *intel_pt_pmu = perf_pmu__find(INTEL_PT_PMU_NAME);
> @@ -1207,6 +1190,7 @@ struct auxtrace_record *intel_pt_recording_init(int *err)
> }
>
> ptr->intel_pt_pmu = intel_pt_pmu;
> + ptr->itr.pmu = intel_pt_pmu;
> ptr->itr.recording_options = intel_pt_recording_options;
> ptr->itr.info_priv_size = intel_pt_info_priv_size;
> ptr->itr.info_fill = intel_pt_info_fill;
> @@ -1216,7 +1200,7 @@ struct auxtrace_record *intel_pt_recording_init(int *err)
> ptr->itr.find_snapshot = intel_pt_find_snapshot;
> ptr->itr.parse_snapshot_options = intel_pt_parse_snapshot_options;
> ptr->itr.reference = intel_pt_reference;
> - ptr->itr.read_finish = intel_pt_read_finish;
> + ptr->itr.read_finish = auxtrace_record__read_finish;
> /*
> * Decoding starts at a PSB packet. Minimum PSB period is 2K so 4K
> * should give at least 1 PSB per sample.
> diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
> index eb087e7df6f4..3571ce72ca28 100644
> --- a/tools/perf/util/auxtrace.c
> +++ b/tools/perf/util/auxtrace.c
> @@ -629,8 +629,10 @@ int auxtrace_record__options(struct auxtrace_record *itr,
> struct evlist *evlist,
> struct record_opts *opts)
> {
> - if (itr)
> + if (itr) {
> + itr->evlist = evlist;
> return itr->recording_options(itr, evlist, opts);
> + }
> return 0;
> }
>
> @@ -664,6 +666,24 @@ int auxtrace_parse_snapshot_options(struct auxtrace_record *itr,
> return -EINVAL;
> }
>
> +int auxtrace_record__read_finish(struct auxtrace_record *itr, int idx)
> +{
> + struct evsel *evsel;
> +
> + if (!itr->evlist || !itr->pmu)
> + return -EINVAL;
> +
> + evlist__for_each_entry(itr->evlist, evsel) {
> + if (evsel->core.attr.type == itr->pmu->type) {
> + if (evsel->disabled)
> + return 0;
> + return perf_evlist__enable_event_idx(itr->evlist, evsel,
> + idx);
> + }
> + }
> + return -EINVAL;
> +}
> +
> /*
> * Event record size is 16-bit which results in a maximum size of about 64KiB.
> * Allow about 4KiB for the rest of the sample record, to give a maximum
> diff --git a/tools/perf/util/auxtrace.h b/tools/perf/util/auxtrace.h
> index 749d72cd9c7b..e58ef160b599 100644
> --- a/tools/perf/util/auxtrace.h
> +++ b/tools/perf/util/auxtrace.h
> @@ -29,6 +29,7 @@ struct record_opts;
> struct perf_record_auxtrace_error;
> struct perf_record_auxtrace_info;
> struct events_stats;
> +struct perf_pmu;
>
> enum auxtrace_error_type {
> PERF_AUXTRACE_ERROR_ITRACE = 1,
> @@ -322,6 +323,8 @@ struct auxtrace_mmap_params {
> * @read_finish: called after reading from an auxtrace mmap
> * @alignment: alignment (if any) for AUX area data
> * @default_aux_sample_size: default sample size for --aux sample option
> + * @pmu: associated pmu
> + * @evlist: selected events list
> */
> struct auxtrace_record {
> int (*recording_options)(struct auxtrace_record *itr,
> @@ -346,6 +349,8 @@ struct auxtrace_record {
> int (*read_finish)(struct auxtrace_record *itr, int idx);
> unsigned int alignment;
> unsigned int default_aux_sample_size;
> + struct perf_pmu *pmu;
> + struct evlist *evlist;
> };
>
> /**
> @@ -537,6 +542,7 @@ int auxtrace_record__find_snapshot(struct auxtrace_record *itr, int idx,
> struct auxtrace_mmap *mm,
> unsigned char *data, u64 *head, u64 *old);
> u64 auxtrace_record__reference(struct auxtrace_record *itr);
> +int auxtrace_record__read_finish(struct auxtrace_record *itr, int idx);
>
> int auxtrace_index__auxtrace_event(struct list_head *head, union perf_event *event,
> off_t file_offset);
> --
> 2.17.1
>
--
- Arnaldo
next prev parent reply other threads:[~2020-02-17 14:42 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-14 13:26 [PATCH 0/5] perf tools: fix endless record after being terminated Adrian Hunter
2020-02-14 13:26 ` [PATCH V2 1/5] perf tools: intel-pt: " Adrian Hunter
2020-02-26 14:20 ` [tip: perf/urgent] perf intel-pt: Fix " tip-bot2 for Wei Li
2020-02-14 13:26 ` [PATCH V2 2/5] perf tools: intel-bts: fix " Adrian Hunter
2020-02-26 14:20 ` [tip: perf/urgent] perf intel-bts: Fix " tip-bot2 for Wei Li
2020-02-14 13:26 ` [PATCH V2 3/5] perf tools: cs-etm: fix " Adrian Hunter
2020-02-14 14:07 ` Adrian Hunter
2020-02-14 14:43 ` Leo Yan
2020-02-14 18:24 ` Mathieu Poirier
2020-02-26 14:20 ` [tip: perf/urgent] perf cs-etm: Fix " tip-bot2 for Wei Li
2020-02-14 13:26 ` [PATCH 4/5] perf tools: arm-spe: fix " Adrian Hunter
2020-02-26 14:20 ` [tip: perf/urgent] perf arm-spe: Fix " tip-bot2 for Adrian Hunter
2020-02-14 13:26 ` [PATCH 5/5] perf auxtrace: Add auxtrace_record__read_finish() Adrian Hunter
2020-02-14 14:08 ` Adrian Hunter
2020-02-14 14:48 ` Leo Yan
2020-02-17 8:23 ` [PATCH V2 " Adrian Hunter
2020-02-17 14:42 ` Arnaldo Carvalho de Melo [this message]
2020-02-26 14:20 ` [tip: perf/urgent] " tip-bot2 for Adrian Hunter
2020-02-14 18:27 ` [PATCH 5/5] " 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=20200217144232.GB19953@kernel.org \
--to=arnaldo.melo@gmail.com \
--cc=adrian.hunter@intel.com \
--cc=jolsa@redhat.com \
--cc=kim.phillips@arm.com \
--cc=leo.yan@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=liwei391@huawei.com \
--cc=mathieu.poirier@linaro.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.