From: Zhao Liu <zhao1.liu@intel.com>
To: Dongli Zhang <dongli.zhang@oracle.com>
Cc: qemu-devel@nongnu.org, kvm@vger.kernel.org, qemu-arm@nongnu.org,
qemu-ppc@nongnu.org, qemu-riscv@nongnu.org,
qemu-s390x@nongnu.org, pbonzini@redhat.com, mtosatti@redhat.com,
sandipan.das@amd.com, babu.moger@amd.com, likexu@tencent.com,
like.xu.linux@gmail.com, groug@kaod.org, khorenko@virtuozzo.com,
alexander.ivanov@virtuozzo.com, den@virtuozzo.com,
davydov-max@yandex-team.ru, xiaoyao.li@intel.com,
dapeng1.mi@linux.intel.com, joe.jin@oracle.com,
peter.maydell@linaro.org, gaosong@loongson.cn,
chenhuacai@kernel.org, philmd@linaro.org, aurelien@aurel32.net,
jiaxun.yang@flygoat.com, arikalo@gmail.com, npiggin@gmail.com,
danielhb413@gmail.com, palmer@dabbelt.com,
alistair.francis@wdc.com, liwei1518@gmail.com,
zhiwei_liu@linux.alibaba.com, pasic@linux.ibm.com,
borntraeger@linux.ibm.com, richard.henderson@linaro.org,
david@redhat.com, iii@linux.ibm.com, thuth@redhat.com,
flavra@baylibre.com, ewanhai-oc@zhaoxin.com, ewanhai@zhaoxin.com,
cobechen@zhaoxin.com, louisqi@zhaoxin.com, liamni@zhaoxin.com,
frankzhu@zhaoxin.com, silviazhao@zhaoxin.com
Subject: Re: [PATCH v3 08/10] target/i386/kvm: reset AMD PMU registers during VM reset
Date: Thu, 10 Apr 2025 15:43:53 +0800 [thread overview]
Message-ID: <Z/d2ucu6Y5xlNh6S@intel.com> (raw)
In-Reply-To: <20250331013307.11937-9-dongli.zhang@oracle.com>
...
> TODO:
> - This patch adds is_host_compat_vendor(), while there are something
> like is_host_cpu_intel() from target/i386/kvm/vmsr_energy.c. A rework
> may help move those helpers to target/i386/cpu*.
vmsr_energy emulates RAPL in user space...but RAPL is not architectural
(no CPUID), so this case doesn't need to consider "compat" vendor.
> target/i386/cpu.h | 8 ++
> target/i386/kvm/kvm.c | 176 +++++++++++++++++++++++++++++++++++++++++-
> 2 files changed, 180 insertions(+), 4 deletions(-)
...
> +static bool is_host_compat_vendor(CPUX86State *env)
> +{
> + char host_vendor[CPUID_VENDOR_SZ + 1];
> + uint32_t host_cpuid_vendor1;
> + uint32_t host_cpuid_vendor2;
> + uint32_t host_cpuid_vendor3;
>
> + host_cpuid(0x0, 0, NULL, &host_cpuid_vendor1, &host_cpuid_vendor3,
> + &host_cpuid_vendor2);
> +
> + x86_cpu_vendor_words2str(host_vendor, host_cpuid_vendor1,
> + host_cpuid_vendor2, host_cpuid_vendor3);
We can use host_cpu_vendor_fms() (with a little change). If you like
this idea, pls feel free to pick my cleanup patch into your series.
> + /*
> + * Intel and Zhaoxin are compatible.
> + */
> + if ((g_str_equal(host_vendor, CPUID_VENDOR_INTEL) ||
> + g_str_equal(host_vendor, CPUID_VENDOR_ZHAOXIN1) ||
> + g_str_equal(host_vendor, CPUID_VENDOR_ZHAOXIN2)) &&
> + (IS_INTEL_CPU(env) || IS_ZHAOXIN_CPU(env))) {
> + return true;
> + }
> +
> + return env->cpuid_vendor1 == host_cpuid_vendor1 &&
> + env->cpuid_vendor2 == host_cpuid_vendor2 &&
> + env->cpuid_vendor3 == host_cpuid_vendor3;
Checking AMD directly makes the "compat" rule clear:
return g_str_equal(host_vendor, CPUID_VENDOR_AMD) &&
IS_AMD_CPU(env);
> +}
...
> if (env->mcg_cap) {
> kvm_msr_entry_add(cpu, MSR_MCG_STATUS, 0);
> kvm_msr_entry_add(cpu, MSR_MCG_CTL, 0);
> @@ -4871,6 +5024,21 @@ static int kvm_get_msrs(X86CPU *cpu)
> case MSR_P6_EVNTSEL0 ... MSR_P6_EVNTSEL0 + MAX_GP_COUNTERS - 1:
> env->msr_gp_evtsel[index - MSR_P6_EVNTSEL0] = msrs[i].data;
> break;
> + case MSR_K7_EVNTSEL0 ... MSR_K7_EVNTSEL0 + AMD64_NUM_COUNTERS - 1:
> + env->msr_gp_evtsel[index - MSR_K7_EVNTSEL0] = msrs[i].data;
> + break;
> + case MSR_K7_PERFCTR0 ... MSR_K7_PERFCTR0 + AMD64_NUM_COUNTERS - 1:
> + env->msr_gp_counters[index - MSR_K7_PERFCTR0] = msrs[i].data;
> + break;
> + case MSR_F15H_PERF_CTL0 ...
> + MSR_F15H_PERF_CTL0 + AMD64_NUM_COUNTERS_CORE * 2 - 1:
> + index = index - MSR_F15H_PERF_CTL0;
> + if (index & 0x1) {
> + env->msr_gp_counters[index] = msrs[i].data;
> + } else {
> + env->msr_gp_evtsel[index] = msrs[i].data;
This msr_gp_evtsel[] array's size is 18:
#define MAX_GP_COUNTERS (MSR_IA32_PERF_STATUS - MSR_P6_EVNTSEL0)
This formula is based on Intel's MSR, it's best to add a note that the
current size also meets AMD's needs. (No need to adjust the size, as
it will affect migration).
> + }
> + break;
> case HV_X64_MSR_HYPERCALL:
> env->msr_hv_hypercall = msrs[i].data;
> break;
Others LGTM!
Thanks,
Zhao
next prev parent reply other threads:[~2025-04-10 7:23 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-31 1:32 [PATCH v3 00/10] target/i386/kvm/pmu: PMU Enhancement, Bugfix and Cleanup Dongli Zhang
2025-03-31 1:32 ` [PATCH v3 01/10] target/i386: disable PerfMonV2 when PERFCORE unavailable Dongli Zhang
2025-03-31 1:32 ` [PATCH v3 02/10] target/i386: disable PERFCORE when "-pmu" is configured Dongli Zhang
2025-03-31 1:32 ` [PATCH v3 03/10] kvm: Introduce kvm_arch_pre_create_vcpu() Dongli Zhang
2025-03-31 1:32 ` [PATCH v3 04/10] target/i386/kvm: set KVM_PMU_CAP_DISABLE if "-pmu" is configured Dongli Zhang
2025-03-31 1:32 ` [PATCH v3 05/10] target/i386/kvm: extract unrelated code out of kvm_x86_build_cpuid() Dongli Zhang
2025-04-10 2:41 ` Zhao Liu
2025-03-31 1:32 ` [PATCH v3 06/10] target/i386/kvm: rename architectural PMU variables Dongli Zhang
2025-03-31 1:32 ` [PATCH v3 07/10] target/i386/kvm: query kvm.enable_pmu parameter Dongli Zhang
2025-04-10 5:05 ` Zhao Liu
2025-04-10 20:16 ` Dongli Zhang
2025-04-16 7:48 ` Dongli Zhang
2025-03-31 1:32 ` [PATCH v3 08/10] target/i386/kvm: reset AMD PMU registers during VM reset Dongli Zhang
2025-04-10 7:43 ` Zhao Liu [this message]
2025-04-10 21:17 ` Dongli Zhang
2025-03-31 1:32 ` [PATCH v3 09/10] target/i386/kvm: support perfmon-v2 for reset Dongli Zhang
2025-04-10 8:21 ` Zhao Liu
2025-04-10 21:19 ` Dongli Zhang
2025-03-31 1:32 ` [PATCH v3 10/10] target/i386/kvm: don't stop Intel PMU counters Dongli Zhang
2025-04-10 9:45 ` Zhao Liu
2025-04-10 22:25 ` Dongli Zhang
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=Z/d2ucu6Y5xlNh6S@intel.com \
--to=zhao1.liu@intel.com \
--cc=alexander.ivanov@virtuozzo.com \
--cc=alistair.francis@wdc.com \
--cc=arikalo@gmail.com \
--cc=aurelien@aurel32.net \
--cc=babu.moger@amd.com \
--cc=borntraeger@linux.ibm.com \
--cc=chenhuacai@kernel.org \
--cc=cobechen@zhaoxin.com \
--cc=danielhb413@gmail.com \
--cc=dapeng1.mi@linux.intel.com \
--cc=david@redhat.com \
--cc=davydov-max@yandex-team.ru \
--cc=den@virtuozzo.com \
--cc=dongli.zhang@oracle.com \
--cc=ewanhai-oc@zhaoxin.com \
--cc=ewanhai@zhaoxin.com \
--cc=flavra@baylibre.com \
--cc=frankzhu@zhaoxin.com \
--cc=gaosong@loongson.cn \
--cc=groug@kaod.org \
--cc=iii@linux.ibm.com \
--cc=jiaxun.yang@flygoat.com \
--cc=joe.jin@oracle.com \
--cc=khorenko@virtuozzo.com \
--cc=kvm@vger.kernel.org \
--cc=liamni@zhaoxin.com \
--cc=like.xu.linux@gmail.com \
--cc=likexu@tencent.com \
--cc=liwei1518@gmail.com \
--cc=louisqi@zhaoxin.com \
--cc=mtosatti@redhat.com \
--cc=npiggin@gmail.com \
--cc=palmer@dabbelt.com \
--cc=pasic@linux.ibm.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=philmd@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=qemu-riscv@nongnu.org \
--cc=qemu-s390x@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=sandipan.das@amd.com \
--cc=silviazhao@zhaoxin.com \
--cc=thuth@redhat.com \
--cc=xiaoyao.li@intel.com \
--cc=zhiwei_liu@linux.alibaba.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 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.