From: Leo Yan <leo.yan@linux.dev>
To: Ian Rogers <irogers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Namhyung Kim <namhyung@kernel.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@kernel.org>,
Adrian Hunter <adrian.hunter@intel.com>,
James Clark <james.clark@linaro.org>,
John Garry <john.g.garry@oracle.com>,
Will Deacon <will@kernel.org>, Mike Leach <mike.leach@linaro.org>,
Paul Walmsley <pjw@kernel.org>,
Palmer Dabbelt <palmer@dabbelt.com>,
Albert Ou <aou@eecs.berkeley.edu>,
Alexandre Ghiti <alex@ghiti.fr>,
Shimin Guo <shimin.guo@skydio.com>,
Yunseong Kim <ysk@kzalloc.com>,
Athira Rajeev <atrajeev@linux.ibm.com>,
Quan Zhou <zhouquan@iscas.ac.cn>,
Andrew Jones <ajones@ventanamicro.com>,
Anup Patel <anup@brainfault.org>,
Dapeng Mi <dapeng1.mi@linux.intel.com>,
Thomas Falcon <thomas.falcon@intel.com>,
Blake Jones <blakejones@google.com>,
Swapnil Sapkal <swapnil.sapkal@amd.com>,
Kan Liang <kan.liang@linux.intel.com>,
Howard Chu <howardchu95@gmail.com>,
Anubhav Shelat <ashelat@redhat.com>,
Aditya Bodkhe <aditya.b1@linux.ibm.com>,
Chun-Tse Shao <ctshao@google.com>,
Andi Kleen <ak@linux.intel.com>,
Dmitry Vyukov <dvyukov@google.com>,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-riscv@lists.infradead.org
Subject: Re: [PATCH v2 2/6] perf kvm stat: Remove use of the arch directory
Date: Mon, 2 Feb 2026 01:04:59 +0800 [thread overview]
Message-ID: <20260201170459.GA584@debian-dev> (raw)
In-Reply-To: <20260131200224.1296136-3-irogers@google.com>
On Sat, Jan 31, 2026 at 12:02:20PM -0800, Ian Rogers wrote:
[...]
> @@ -1666,7 +1661,7 @@ kvm_events_record(struct perf_kvm_stat *kvm, int argc, const char **argv)
> return ret;
> }
>
> - for (events_tp = kvm_events_tp; *events_tp; events_tp++)
> + for (events_tp = kvm_events_tp(); *events_tp; events_tp++)
> events_tp_size++;
>
> rec_argc = ARRAY_SIZE(record_args) + argc + 2 +
> @@ -1681,7 +1676,7 @@ kvm_events_record(struct perf_kvm_stat *kvm, int argc, const char **argv)
>
> for (j = 0; j < events_tp_size; j++) {
> rec_argv[i++] = STRDUP_FAIL_EXIT("-e");
> - rec_argv[i++] = STRDUP_FAIL_EXIT(kvm_events_tp[j]);
> + rec_argv[i++] = STRDUP_FAIL_EXIT(kvm_events_tp()[j]);
> }
Nitpick: we can assign reuse events_tp throughout the
kvm_events_record(). Something like:
events_tp = kvm_events_tp();
for (j = 0; events_tp[j]; j++)
events_tp_size++;
...
for (j = 0; j < events_tp_size; j++) {
rec_argv[i++] = STRDUP_FAIL_EXIT("-e");
rec_argv[i++] = STRDUP_FAIL_EXIT(events_tp[j]);
}
[...]
> +int setup_kvm_events_tp(struct perf_kvm_stat *kvm)
> +{
> + switch (EM_HOST) {
> + case EM_PPC:
> + case EM_PPC64:
> + return __setup_kvm_events_tp_powerpc(kvm);
> + default:
> + return 0;
> + }
> +}
> +
> +int cpu_isa_init(struct perf_kvm_stat *kvm, const char *cpuid)
> +{
> + switch (EM_HOST) {
> + case EM_AARCH64:
> + return __cpu_isa_init_arm64(kvm);
> + case EM_LOONGARCH:
> + return __cpu_isa_init_loongarch(kvm);
> + case EM_PPC:
> + case EM_PPC64:
> + return __cpu_isa_init_powerpc(kvm);
> + case EM_RISCV:
> + return __cpu_isa_init_riscv(kvm);
> + case EM_S390:
> + return __cpu_isa_init_s390(kvm, cpuid);
> + case EM_X86_64:
> + case EM_386:
> + return __cpu_isa_init_x86(kvm, cpuid);
> + default:
> + pr_err("Unsupported kvm-stat host %d\n", EM_HOST);
> + return -1;
> + }
> +}
For a general solution, I'd prefer to use "install" + callback methods
rather than the opened code. E.g., each arch installs a structure
with callbacks:
struct kvm_stat_arch kvm_stat_aarch64 {
.setup_events_tp = NULL;
.cpu_isa_init = __cpu_isa_init_arm64;
...
};
Then at the init phase, we can install arch's structure:
switch (EM_HOST) {
case EM_AARCH64:
kvm_stat_arch_init(&kvm_stat_aarch64);
break;
...
}
Afterwards, it is no need to check EM_HOST anymore, it can simply
invoke the arch's callback:
int cpu_isa_init(struct perf_kvm_stat *kvm, const char *cpuid)
{
if (!arch_kvm_stat || !arch_kvm_stat->cpu_isa_init)
return -1;
return arch_kvm_stat->cpu_isa_init(kvm, cpuid);
}
As a result, we can avoid spreading "switch (EM_HOST)" everywhere.
Thanks,
Leo
WARNING: multiple messages have this Message-ID (diff)
From: Leo Yan <leo.yan@linux.dev>
To: Ian Rogers <irogers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Namhyung Kim <namhyung@kernel.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@kernel.org>,
Adrian Hunter <adrian.hunter@intel.com>,
James Clark <james.clark@linaro.org>,
John Garry <john.g.garry@oracle.com>,
Will Deacon <will@kernel.org>, Mike Leach <mike.leach@linaro.org>,
Paul Walmsley <pjw@kernel.org>,
Palmer Dabbelt <palmer@dabbelt.com>,
Albert Ou <aou@eecs.berkeley.edu>,
Alexandre Ghiti <alex@ghiti.fr>,
Shimin Guo <shimin.guo@skydio.com>,
Yunseong Kim <ysk@kzalloc.com>,
Athira Rajeev <atrajeev@linux.ibm.com>,
Quan Zhou <zhouquan@iscas.ac.cn>,
Andrew Jones <ajones@ventanamicro.com>,
Anup Patel <anup@brainfault.org>,
Dapeng Mi <dapeng1.mi@linux.intel.com>,
Thomas Falcon <thomas.falcon@intel.com>,
Blake Jones <blakejones@google.com>,
Swapnil Sapkal <swapnil.sapkal@amd.com>,
Kan Liang <kan.liang@linux.intel.com>,
Howard Chu <howardchu95@gmail.com>,
Anubhav Shelat <ashelat@redhat.com>,
Aditya Bodkhe <aditya.b1@linux.ibm.com>,
Chun-Tse Shao <ctshao@google.com>,
Andi Kleen <ak@linux.intel.com>,
Dmitry Vyukov <dvyukov@google.com>,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-riscv@lists.infradead.org
Subject: Re: [PATCH v2 2/6] perf kvm stat: Remove use of the arch directory
Date: Mon, 2 Feb 2026 01:04:59 +0800 [thread overview]
Message-ID: <20260201170459.GA584@debian-dev> (raw)
In-Reply-To: <20260131200224.1296136-3-irogers@google.com>
On Sat, Jan 31, 2026 at 12:02:20PM -0800, Ian Rogers wrote:
[...]
> @@ -1666,7 +1661,7 @@ kvm_events_record(struct perf_kvm_stat *kvm, int argc, const char **argv)
> return ret;
> }
>
> - for (events_tp = kvm_events_tp; *events_tp; events_tp++)
> + for (events_tp = kvm_events_tp(); *events_tp; events_tp++)
> events_tp_size++;
>
> rec_argc = ARRAY_SIZE(record_args) + argc + 2 +
> @@ -1681,7 +1676,7 @@ kvm_events_record(struct perf_kvm_stat *kvm, int argc, const char **argv)
>
> for (j = 0; j < events_tp_size; j++) {
> rec_argv[i++] = STRDUP_FAIL_EXIT("-e");
> - rec_argv[i++] = STRDUP_FAIL_EXIT(kvm_events_tp[j]);
> + rec_argv[i++] = STRDUP_FAIL_EXIT(kvm_events_tp()[j]);
> }
Nitpick: we can assign reuse events_tp throughout the
kvm_events_record(). Something like:
events_tp = kvm_events_tp();
for (j = 0; events_tp[j]; j++)
events_tp_size++;
...
for (j = 0; j < events_tp_size; j++) {
rec_argv[i++] = STRDUP_FAIL_EXIT("-e");
rec_argv[i++] = STRDUP_FAIL_EXIT(events_tp[j]);
}
[...]
> +int setup_kvm_events_tp(struct perf_kvm_stat *kvm)
> +{
> + switch (EM_HOST) {
> + case EM_PPC:
> + case EM_PPC64:
> + return __setup_kvm_events_tp_powerpc(kvm);
> + default:
> + return 0;
> + }
> +}
> +
> +int cpu_isa_init(struct perf_kvm_stat *kvm, const char *cpuid)
> +{
> + switch (EM_HOST) {
> + case EM_AARCH64:
> + return __cpu_isa_init_arm64(kvm);
> + case EM_LOONGARCH:
> + return __cpu_isa_init_loongarch(kvm);
> + case EM_PPC:
> + case EM_PPC64:
> + return __cpu_isa_init_powerpc(kvm);
> + case EM_RISCV:
> + return __cpu_isa_init_riscv(kvm);
> + case EM_S390:
> + return __cpu_isa_init_s390(kvm, cpuid);
> + case EM_X86_64:
> + case EM_386:
> + return __cpu_isa_init_x86(kvm, cpuid);
> + default:
> + pr_err("Unsupported kvm-stat host %d\n", EM_HOST);
> + return -1;
> + }
> +}
For a general solution, I'd prefer to use "install" + callback methods
rather than the opened code. E.g., each arch installs a structure
with callbacks:
struct kvm_stat_arch kvm_stat_aarch64 {
.setup_events_tp = NULL;
.cpu_isa_init = __cpu_isa_init_arm64;
...
};
Then at the init phase, we can install arch's structure:
switch (EM_HOST) {
case EM_AARCH64:
kvm_stat_arch_init(&kvm_stat_aarch64);
break;
...
}
Afterwards, it is no need to check EM_HOST anymore, it can simply
invoke the arch's callback:
int cpu_isa_init(struct perf_kvm_stat *kvm, const char *cpuid)
{
if (!arch_kvm_stat || !arch_kvm_stat->cpu_isa_init)
return -1;
return arch_kvm_stat->cpu_isa_init(kvm, cpuid);
}
As a result, we can avoid spreading "switch (EM_HOST)" everywhere.
Thanks,
Leo
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2026-02-01 17:05 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-31 20:02 [PATCH v2 0/6] perf Cross platform KVM support Ian Rogers
2026-01-31 20:02 ` Ian Rogers
2026-01-31 20:02 ` [PATCH v2 1/6] perf test kvm: Add stat live testing Ian Rogers
2026-01-31 20:02 ` Ian Rogers
2026-01-31 20:02 ` [PATCH v2 2/6] perf kvm stat: Remove use of the arch directory Ian Rogers
2026-01-31 20:02 ` Ian Rogers
2026-02-01 17:04 ` Leo Yan [this message]
2026-02-01 17:04 ` Leo Yan
2026-02-02 1:55 ` Ian Rogers
2026-02-02 1:55 ` Ian Rogers
2026-01-31 20:02 ` [PATCH v2 3/6] perf kvm: Wire up e_machine Ian Rogers
2026-01-31 20:02 ` Ian Rogers
2026-01-31 20:02 ` [PATCH v2 4/6] perf session: Add e_flags to the e_machine helper Ian Rogers
2026-01-31 20:02 ` Ian Rogers
2026-01-31 20:02 ` [PATCH v2 5/6] perf header: Add e_machine/e_flags to the header Ian Rogers
2026-01-31 20:02 ` Ian Rogers
2026-01-31 20:02 ` [PATCH v2 6/6] perf thread: Don't require machine to compute the e_machine Ian Rogers
2026-01-31 20:02 ` Ian Rogers
2026-02-03 14:42 ` [PATCH v2 0/6] perf Cross platform KVM support Arnaldo Carvalho de Melo
2026-02-03 14:42 ` Arnaldo Carvalho de Melo
2026-02-03 14:57 ` Arnaldo Carvalho de Melo
2026-02-03 14:57 ` Arnaldo Carvalho de Melo
2026-02-03 15:03 ` Arnaldo Carvalho de Melo
2026-02-03 15:03 ` Arnaldo Carvalho de Melo
2026-02-03 18:26 ` [PATCH v3 0/5] " Ian Rogers
2026-02-03 18:26 ` Ian Rogers
2026-02-03 18:26 ` [PATCH v3 1/5] perf kvm stat: Remove use of the arch directory Ian Rogers
2026-02-03 18:26 ` Ian Rogers
2026-03-24 6:07 ` patchwork-bot+linux-riscv
2026-03-24 6:07 ` patchwork-bot+linux-riscv
2026-02-03 18:26 ` [PATCH v3 2/5] perf kvm: Wire up e_machine Ian Rogers
2026-02-03 18:26 ` Ian Rogers
2026-02-03 18:26 ` [PATCH v3 3/5] perf session: Add e_flags to the e_machine helper Ian Rogers
2026-02-03 18:26 ` Ian Rogers
2026-02-03 18:26 ` [PATCH v3 4/5] perf header: Add e_machine/e_flags to the header Ian Rogers
2026-02-03 18:26 ` Ian Rogers
2026-02-03 18:26 ` [PATCH v3 5/5] perf thread: Don't require machine to compute the e_machine Ian Rogers
2026-02-03 18:26 ` Ian Rogers
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=20260201170459.GA584@debian-dev \
--to=leo.yan@linux.dev \
--cc=acme@kernel.org \
--cc=aditya.b1@linux.ibm.com \
--cc=adrian.hunter@intel.com \
--cc=ajones@ventanamicro.com \
--cc=ak@linux.intel.com \
--cc=alex@ghiti.fr \
--cc=alexander.shishkin@linux.intel.com \
--cc=anup@brainfault.org \
--cc=aou@eecs.berkeley.edu \
--cc=ashelat@redhat.com \
--cc=atrajeev@linux.ibm.com \
--cc=blakejones@google.com \
--cc=ctshao@google.com \
--cc=dapeng1.mi@linux.intel.com \
--cc=dvyukov@google.com \
--cc=howardchu95@gmail.com \
--cc=irogers@google.com \
--cc=james.clark@linaro.org \
--cc=john.g.garry@oracle.com \
--cc=jolsa@kernel.org \
--cc=kan.liang@linux.intel.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=mike.leach@linaro.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=palmer@dabbelt.com \
--cc=peterz@infradead.org \
--cc=pjw@kernel.org \
--cc=shimin.guo@skydio.com \
--cc=swapnil.sapkal@amd.com \
--cc=thomas.falcon@intel.com \
--cc=will@kernel.org \
--cc=ysk@kzalloc.com \
--cc=zhouquan@iscas.ac.cn \
/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.