From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ravi Bangoria <ravi.bangoria@amd.com>
Cc: irogers@google.com, jolsa@kernel.org, namhyung@kernel.org,
mark.rutland@arm.com, peterz@infradead.org,
adrian.hunter@intel.com, kan.liang@linux.intel.com,
james.clark@arm.com, alisaidi@amazon.com, leo.yan@linaro.org,
maddy@linux.ibm.com, linux-perf-users@vger.kernel.org,
linux-kernel@vger.kernel.org, sandipan.das@amd.com,
ananth.narayan@amd.com, santosh.shukla@amd.com
Subject: Re: [PATCH 2/4] perf tool x86: Consolidate is_amd check into single function
Date: Tue, 13 Jun 2023 16:49:21 -0300 [thread overview]
Message-ID: <ZIjIQZwqWD/r7f0W@kernel.org> (raw)
In-Reply-To: <20230613095506.547-3-ravi.bangoria@amd.com>
Em Tue, Jun 13, 2023 at 03:25:04PM +0530, Ravi Bangoria escreveu:
> There are multiple places where x86 specific code determines AMD vs
> Intel arch and acts based on that. Consolidate those checks into a
> single function.
I'm cherry picking this one now.
- Arnaldo
> Signed-off-by: Ravi Bangoria <ravi.bangoria@amd.com>
> ---
> tools/perf/arch/x86/util/Build | 1 +
> tools/perf/arch/x86/util/env.c | 19 +++++++++++++++++++
> tools/perf/arch/x86/util/env.h | 7 +++++++
> tools/perf/arch/x86/util/evsel.c | 16 ++--------------
> tools/perf/arch/x86/util/mem-events.c | 19 ++-----------------
> 5 files changed, 31 insertions(+), 31 deletions(-)
> create mode 100644 tools/perf/arch/x86/util/env.c
> create mode 100644 tools/perf/arch/x86/util/env.h
>
> diff --git a/tools/perf/arch/x86/util/Build b/tools/perf/arch/x86/util/Build
> index 195ccfdef7aa..005907cb97d8 100644
> --- a/tools/perf/arch/x86/util/Build
> +++ b/tools/perf/arch/x86/util/Build
> @@ -10,6 +10,7 @@ perf-y += evlist.o
> perf-y += mem-events.o
> perf-y += evsel.o
> perf-y += iostat.o
> +perf-y += env.o
>
> perf-$(CONFIG_DWARF) += dwarf-regs.o
> perf-$(CONFIG_BPF_PROLOGUE) += dwarf-regs.o
> diff --git a/tools/perf/arch/x86/util/env.c b/tools/perf/arch/x86/util/env.c
> new file mode 100644
> index 000000000000..33b87f8ac1cc
> --- /dev/null
> +++ b/tools/perf/arch/x86/util/env.c
> @@ -0,0 +1,19 @@
> +// SPDX-License-Identifier: GPL-2.0
> +#include "linux/string.h"
> +#include "util/env.h"
> +#include "env.h"
> +
> +bool x86__is_amd_cpu(void)
> +{
> + struct perf_env env = { .total_mem = 0, };
> + static int is_amd; /* 0: Uninitialized, 1: Yes, -1: No */
> +
> + if (is_amd)
> + goto ret;
> +
> + perf_env__cpuid(&env);
> + is_amd = env.cpuid && strstarts(env.cpuid, "AuthenticAMD") ? 1 : -1;
> +
> +ret:
> + return is_amd >= 1 ? true : false;
> +}
> diff --git a/tools/perf/arch/x86/util/env.h b/tools/perf/arch/x86/util/env.h
> new file mode 100644
> index 000000000000..d78f080b6b3f
> --- /dev/null
> +++ b/tools/perf/arch/x86/util/env.h
> @@ -0,0 +1,7 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +#ifndef _X86_ENV_H
> +#define _X86_ENV_H
> +
> +bool x86__is_amd_cpu(void);
> +
> +#endif /* _X86_ENV_H */
> diff --git a/tools/perf/arch/x86/util/evsel.c b/tools/perf/arch/x86/util/evsel.c
> index 25da46c8cca9..512c2d885d24 100644
> --- a/tools/perf/arch/x86/util/evsel.c
> +++ b/tools/perf/arch/x86/util/evsel.c
> @@ -8,6 +8,7 @@
> #include "linux/string.h"
> #include "evsel.h"
> #include "util/debug.h"
> +#include "env.h"
>
> #define IBS_FETCH_L3MISSONLY (1ULL << 59)
> #define IBS_OP_L3MISSONLY (1ULL << 16)
> @@ -78,23 +79,10 @@ void arch__post_evsel_config(struct evsel *evsel, struct perf_event_attr *attr)
> {
> struct perf_pmu *evsel_pmu, *ibs_fetch_pmu, *ibs_op_pmu;
> static int warned_once;
> - /* 0: Uninitialized, 1: Yes, -1: No */
> - static int is_amd;
>
> - if (warned_once || is_amd == -1)
> + if (warned_once || !x86__is_amd_cpu())
> return;
>
> - if (!is_amd) {
> - struct perf_env *env = evsel__env(evsel);
> -
> - if (!perf_env__cpuid(env) || !env->cpuid ||
> - !strstarts(env->cpuid, "AuthenticAMD")) {
> - is_amd = -1;
> - return;
> - }
> - is_amd = 1;
> - }
> -
> evsel_pmu = evsel__find_pmu(evsel);
> if (!evsel_pmu)
> return;
> diff --git a/tools/perf/arch/x86/util/mem-events.c b/tools/perf/arch/x86/util/mem-events.c
> index 32879d12a8d5..a8a782bcb121 100644
> --- a/tools/perf/arch/x86/util/mem-events.c
> +++ b/tools/perf/arch/x86/util/mem-events.c
> @@ -5,6 +5,7 @@
> #include "map_symbol.h"
> #include "mem-events.h"
> #include "linux/string.h"
> +#include "env.h"
>
> static char mem_loads_name[100];
> static bool mem_loads_name__init;
> @@ -27,28 +28,12 @@ static struct perf_mem_event perf_mem_events_amd[PERF_MEM_EVENTS__MAX] = {
> E("mem-ldst", "ibs_op//", "ibs_op"),
> };
>
> -static int perf_mem_is_amd_cpu(void)
> -{
> - struct perf_env env = { .total_mem = 0, };
> -
> - perf_env__cpuid(&env);
> - if (env.cpuid && strstarts(env.cpuid, "AuthenticAMD"))
> - return 1;
> - return -1;
> -}
> -
> struct perf_mem_event *perf_mem_events__ptr(int i)
> {
> - /* 0: Uninitialized, 1: Yes, -1: No */
> - static int is_amd;
> -
> if (i >= PERF_MEM_EVENTS__MAX)
> return NULL;
>
> - if (!is_amd)
> - is_amd = perf_mem_is_amd_cpu();
> -
> - if (is_amd == 1)
> + if (x86__is_amd_cpu())
> return &perf_mem_events_amd[i];
>
> return &perf_mem_events_intel[i];
> --
> 2.40.1
>
--
- Arnaldo
next prev parent reply other threads:[~2023-06-13 19:49 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-13 9:55 [PATCH 0/4] perf mem amd: Fix few logic bugs Ravi Bangoria
2023-06-13 9:55 ` [PATCH 1/4] perf pmus: Describe semantics of 'core_pmus' and 'other_pmus' Ravi Bangoria
2023-06-13 9:55 ` [PATCH 2/4] perf tool x86: Consolidate is_amd check into single function Ravi Bangoria
2023-06-13 19:49 ` Arnaldo Carvalho de Melo [this message]
2023-06-13 19:49 ` Ian Rogers
2023-06-13 20:28 ` Arnaldo Carvalho de Melo
2023-06-13 9:55 ` [PATCH 3/4] perf mem amd: Fix perf_pmus__num_mem_pmus() Ravi Bangoria
2023-06-13 15:25 ` Ian Rogers
2023-06-14 3:49 ` Ravi Bangoria
2023-06-13 9:55 ` [PATCH 4/4] perf mem amd: Scan all PMUs instead of just core ones Ravi Bangoria
2023-06-13 15:34 ` Ian Rogers
2023-06-14 3:58 ` Ravi Bangoria
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=ZIjIQZwqWD/r7f0W@kernel.org \
--to=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=alisaidi@amazon.com \
--cc=ananth.narayan@amd.com \
--cc=irogers@google.com \
--cc=james.clark@arm.com \
--cc=jolsa@kernel.org \
--cc=kan.liang@linux.intel.com \
--cc=leo.yan@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=maddy@linux.ibm.com \
--cc=mark.rutland@arm.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=ravi.bangoria@amd.com \
--cc=sandipan.das@amd.com \
--cc=santosh.shukla@amd.com \
/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;
as well as URLs for NNTP newsgroup(s).