From: Ali Saidi <alisaidi@amazon.com> To: <linux-kernel@vger.kernel.org>, <linux-perf-users@vger.kernel.org>, <linux-arm-kernel@lists.infradead.org>, <german.gomez@arm.com>, <leo.yan@linaro.org>, <acme@kernel.org> Cc: <alisaidi@amazon.com>, <benh@kernel.crashing.org>, <Nick.Forrington@arm.com>, <alexander.shishkin@linux.intel.com>, <andrew.kilroy@arm.com>, <james.clark@arm.com>, <john.garry@huawei.com>, <jolsa@kernel.org>, <kjain@linux.ibm.com>, <lihuafei1@huawei.com>, <mark.rutland@arm.com>, <mathieu.poirier@linaro.org>, <mingo@redhat.com>, <namhyung@kernel.org>, <peterz@infradead.org>, <will@kernel.org> Subject: [PATCH v9 4/5] perf arm-spe: Don't set data source if it's not a memory operation Date: Tue, 17 May 2022 02:03:25 +0000 [thread overview] Message-ID: <20220517020326.18580-5-alisaidi@amazon.com> (raw) In-Reply-To: <20220517020326.18580-1-alisaidi@amazon.com> From: Leo Yan <leo.yan@linaro.org> Except memory load and store operations, Arm SPE records also can support other operation types, bug when set the data source field the current code assumes a record is a either load operation or store operation, this leads to wrongly synthesize memory samples. This patch strictly checks the record operation type, it only sets data source only for the operation types ARM_SPE_LD and ARM_SPE_ST, otherwise, returns zero for data source. Therefore, we can synthesize memory samples only when data source is a non-zero value, the function arm_spe__is_memory_event() is useless and removed. Fixes: e55ed3423c1b ("perf arm-spe: Synthesize memory event") Signed-off-by: Leo Yan <leo.yan@linaro.org> Reviewed-by: Ali Saidi <alisaidi@amazon.com> Tested-by: Ali Saidi <alisaidi@amazon.com> Reviewed-by: German Gomez <german.gomez@arm.com> --- tools/perf/util/arm-spe.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/tools/perf/util/arm-spe.c b/tools/perf/util/arm-spe.c index d2b64e3f588b..e032efc03274 100644 --- a/tools/perf/util/arm-spe.c +++ b/tools/perf/util/arm-spe.c @@ -387,26 +387,16 @@ static int arm_spe__synth_instruction_sample(struct arm_spe_queue *speq, return arm_spe_deliver_synth_event(spe, speq, event, &sample); } -#define SPE_MEM_TYPE (ARM_SPE_L1D_ACCESS | ARM_SPE_L1D_MISS | \ - ARM_SPE_LLC_ACCESS | ARM_SPE_LLC_MISS | \ - ARM_SPE_REMOTE_ACCESS) - -static bool arm_spe__is_memory_event(enum arm_spe_sample_type type) -{ - if (type & SPE_MEM_TYPE) - return true; - - return false; -} - static u64 arm_spe__synth_data_source(const struct arm_spe_record *record) { union perf_mem_data_src data_src = { 0 }; if (record->op == ARM_SPE_LD) data_src.mem_op = PERF_MEM_OP_LOAD; - else + else if (record->op == ARM_SPE_ST) data_src.mem_op = PERF_MEM_OP_STORE; + else + return 0; if (record->type & (ARM_SPE_LLC_ACCESS | ARM_SPE_LLC_MISS)) { data_src.mem_lvl = PERF_MEM_LVL_L3; @@ -510,7 +500,11 @@ static int arm_spe_sample(struct arm_spe_queue *speq) return err; } - if (spe->sample_memory && arm_spe__is_memory_event(record->type)) { + /* + * When data_src is zero it means the record is not a memory operation, + * skip to synthesize memory sample for this case. + */ + if (spe->sample_memory && data_src) { err = arm_spe__synth_mem_sample(speq, spe->memory_id, data_src); if (err) return err; -- 2.32.0
WARNING: multiple messages have this Message-ID (diff)
From: Ali Saidi <alisaidi@amazon.com> To: <linux-kernel@vger.kernel.org>, <linux-perf-users@vger.kernel.org>, <linux-arm-kernel@lists.infradead.org>, <german.gomez@arm.com>, <leo.yan@linaro.org>, <acme@kernel.org> Cc: <alisaidi@amazon.com>, <benh@kernel.crashing.org>, <Nick.Forrington@arm.com>, <alexander.shishkin@linux.intel.com>, <andrew.kilroy@arm.com>, <james.clark@arm.com>, <john.garry@huawei.com>, <jolsa@kernel.org>, <kjain@linux.ibm.com>, <lihuafei1@huawei.com>, <mark.rutland@arm.com>, <mathieu.poirier@linaro.org>, <mingo@redhat.com>, <namhyung@kernel.org>, <peterz@infradead.org>, <will@kernel.org> Subject: [PATCH v9 4/5] perf arm-spe: Don't set data source if it's not a memory operation Date: Tue, 17 May 2022 02:03:25 +0000 [thread overview] Message-ID: <20220517020326.18580-5-alisaidi@amazon.com> (raw) In-Reply-To: <20220517020326.18580-1-alisaidi@amazon.com> From: Leo Yan <leo.yan@linaro.org> Except memory load and store operations, Arm SPE records also can support other operation types, bug when set the data source field the current code assumes a record is a either load operation or store operation, this leads to wrongly synthesize memory samples. This patch strictly checks the record operation type, it only sets data source only for the operation types ARM_SPE_LD and ARM_SPE_ST, otherwise, returns zero for data source. Therefore, we can synthesize memory samples only when data source is a non-zero value, the function arm_spe__is_memory_event() is useless and removed. Fixes: e55ed3423c1b ("perf arm-spe: Synthesize memory event") Signed-off-by: Leo Yan <leo.yan@linaro.org> Reviewed-by: Ali Saidi <alisaidi@amazon.com> Tested-by: Ali Saidi <alisaidi@amazon.com> Reviewed-by: German Gomez <german.gomez@arm.com> --- tools/perf/util/arm-spe.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/tools/perf/util/arm-spe.c b/tools/perf/util/arm-spe.c index d2b64e3f588b..e032efc03274 100644 --- a/tools/perf/util/arm-spe.c +++ b/tools/perf/util/arm-spe.c @@ -387,26 +387,16 @@ static int arm_spe__synth_instruction_sample(struct arm_spe_queue *speq, return arm_spe_deliver_synth_event(spe, speq, event, &sample); } -#define SPE_MEM_TYPE (ARM_SPE_L1D_ACCESS | ARM_SPE_L1D_MISS | \ - ARM_SPE_LLC_ACCESS | ARM_SPE_LLC_MISS | \ - ARM_SPE_REMOTE_ACCESS) - -static bool arm_spe__is_memory_event(enum arm_spe_sample_type type) -{ - if (type & SPE_MEM_TYPE) - return true; - - return false; -} - static u64 arm_spe__synth_data_source(const struct arm_spe_record *record) { union perf_mem_data_src data_src = { 0 }; if (record->op == ARM_SPE_LD) data_src.mem_op = PERF_MEM_OP_LOAD; - else + else if (record->op == ARM_SPE_ST) data_src.mem_op = PERF_MEM_OP_STORE; + else + return 0; if (record->type & (ARM_SPE_LLC_ACCESS | ARM_SPE_LLC_MISS)) { data_src.mem_lvl = PERF_MEM_LVL_L3; @@ -510,7 +500,11 @@ static int arm_spe_sample(struct arm_spe_queue *speq) return err; } - if (spe->sample_memory && arm_spe__is_memory_event(record->type)) { + /* + * When data_src is zero it means the record is not a memory operation, + * skip to synthesize memory sample for this case. + */ + if (spe->sample_memory && data_src) { err = arm_spe__synth_mem_sample(speq, spe->memory_id, data_src); if (err) return err; -- 2.32.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:[~2022-05-17 2:03 UTC|newest] Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-05-17 2:03 [PATCH v8 0/4] perf: arm-spe: Decode SPE source and use for perf c2c Ali Saidi 2022-05-17 2:03 ` Ali Saidi 2022-05-17 2:03 ` [PATCH v9 1/5] perf: Add SNOOP_PEER flag to perf mem data struct Ali Saidi 2022-05-17 2:03 ` Ali Saidi 2022-05-17 2:03 ` [PATCH v9 2/5] perf tools: sync addition of PERF_MEM_SNOOPX_PEER Ali Saidi 2022-05-17 2:03 ` Ali Saidi 2022-05-17 2:03 ` [PATCH v9 3/5] perf mem: Print snoop peer flag Ali Saidi 2022-05-17 2:03 ` Ali Saidi 2022-05-17 2:03 ` Ali Saidi [this message] 2022-05-17 2:03 ` [PATCH v9 4/5] perf arm-spe: Don't set data source if it's not a memory operation Ali Saidi 2022-06-17 19:41 ` Arnaldo Carvalho de Melo 2022-06-17 19:41 ` Arnaldo Carvalho de Melo 2022-05-17 2:03 ` [PATCH v9 5/5] perf arm-spe: Use SPE data source for neoverse cores Ali Saidi 2022-05-17 2:03 ` Ali Saidi 2022-05-17 21:20 ` [PATCH v8 0/4] perf: arm-spe: Decode SPE source and use for perf c2c Arnaldo Carvalho de Melo 2022-05-17 21:20 ` Arnaldo Carvalho de Melo 2022-05-18 1:06 ` Leo Yan 2022-05-18 1:06 ` Leo Yan 2022-05-18 4:16 ` Leo Yan 2022-05-18 4:16 ` Leo Yan 2022-05-19 15:16 ` Joe Mario 2022-05-19 15:16 ` Joe Mario 2022-05-22 6:15 ` Leo Yan 2022-05-22 6:15 ` Leo Yan 2022-05-23 17:24 ` Joe Mario 2022-05-23 17:24 ` Joe Mario 2022-05-26 14:44 ` Leo Yan 2022-05-26 14:44 ` Leo Yan
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=20220517020326.18580-5-alisaidi@amazon.com \ --to=alisaidi@amazon.com \ --cc=Nick.Forrington@arm.com \ --cc=acme@kernel.org \ --cc=alexander.shishkin@linux.intel.com \ --cc=andrew.kilroy@arm.com \ --cc=benh@kernel.crashing.org \ --cc=german.gomez@arm.com \ --cc=james.clark@arm.com \ --cc=john.garry@huawei.com \ --cc=jolsa@kernel.org \ --cc=kjain@linux.ibm.com \ --cc=leo.yan@linaro.org \ --cc=lihuafei1@huawei.com \ --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=mathieu.poirier@linaro.org \ --cc=mingo@redhat.com \ --cc=namhyung@kernel.org \ --cc=peterz@infradead.org \ --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: linkBe 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.