From: Like Xu <like.xu@linux.intel.com>
To: qemu-devel@nongnu.org, Eduardo Habkost <ehabkost@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
"Dr . David Alan Gilbert" <dgilbert@redhat.com>,
like.xu@linux.intel.com
Subject: [Qemu-devel] [PATCH v3 7/9] target/i386: Support multi-dies when host doesn't support CPUID.1F
Date: Wed, 12 Jun 2019 16:41:02 +0800 [thread overview]
Message-ID: <20190612084104.34984-8-like.xu@linux.intel.com> (raw)
In-Reply-To: <20190612084104.34984-1-like.xu@linux.intel.com>
In guest CPUID generation process, the cpuid_min_level would be adjusted to
the maximum passed value for basic CPUID configuration and it should not be
restricted by the limited value returned from cpu_x86_cpuid(). After the basic
cpu_x86_cpuid() loop is finished, the cpuid_0_entry.eax needs to be configured
again by the last adjusted cpuid_min_level value.
If a user wants to expose CPUID.1F by passing dies > 1 for any reason without
host support, a per-cpu smp topology warning will appear but it's not blocked.
Signed-off-by: Like Xu <like.xu@linux.intel.com>
---
target/i386/kvm.c | 24 ++++++++++++++++++++++--
1 file changed, 22 insertions(+), 2 deletions(-)
diff --git a/target/i386/kvm.c b/target/i386/kvm.c
index 9b4da9b265..8bf1604d2b 100644
--- a/target/i386/kvm.c
+++ b/target/i386/kvm.c
@@ -931,12 +931,12 @@ int kvm_arch_init_vcpu(CPUState *cs)
struct kvm_cpuid_entry2 *c;
uint32_t signature[3];
int kvm_base = KVM_CPUID_SIGNATURE;
- int r;
+ int r, cpuid_0_entry, cpuid_min_level;
Error *local_err = NULL;
memset(&cpuid_data, 0, sizeof(cpuid_data));
- cpuid_i = 0;
+ cpuid_i = cpuid_0_entry = cpuid_min_level = 0;
r = kvm_arch_set_tsc_khz(cs);
if (r < 0) {
@@ -1050,6 +1050,12 @@ int kvm_arch_init_vcpu(CPUState *cs)
cpu_x86_cpuid(env, 0, 0, &limit, &unused, &unused, &unused);
+ /* Allow 0x1f setting regardless of kvm support if nr_dies > 1 */
+ if (limit < 0x1f && env->nr_dies > 1 && cpu->enable_cpuid_0x1f) {
+ limit = env->cpuid_level = env->cpuid_min_level = 0x1f;
+ warn_report("CPU topology: the CPUID.1F isn't supported on the host.");
+ }
+
for (i = 0; i <= limit; i++) {
if (cpuid_i == KVM_MAX_CPUID_ENTRIES) {
fprintf(stderr, "unsupported level value: 0x%x\n", limit);
@@ -1151,8 +1157,22 @@ int kvm_arch_init_vcpu(CPUState *cs)
cpu_x86_cpuid(env, i, 0, &c->eax, &c->ebx, &c->ecx, &c->edx);
break;
}
+
+ /* Remember the index of cpuid.0 leaf for reconfiguration. */
+ cpuid_0_entry = (i == 0) ? (cpuid_i - 1) : cpuid_0_entry;
+
+ /* Adjust cpuid_min_level to the maximum index of valid basic cpuids. */
+ cpuid_min_level =
+ ((c->eax | c->ebx | c->ecx | c->edx | c->flags | c->index) &&
+ (i > cpuid_min_level)) ? i : cpuid_min_level;
}
+ env->cpuid_level = env->cpuid_min_level = cpuid_min_level;
+
+ /* Reconfigure cpuid_0_eax value to follow CPUID.0 instruction spec.*/
+ c = &cpuid_data.entries[cpuid_0_entry];
+ cpu_x86_cpuid(env, 0, 0, &c->eax, &c->ebx, &c->ecx, &c->edx);
+
if (limit >= 0x0a) {
uint32_t eax, edx;
--
2.21.0
next prev parent reply other threads:[~2019-06-12 8:48 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-12 8:40 [Qemu-devel] [PATCH v3 0/9] Introduce cpu die topology and enable CPUID.1F for i386 Like Xu
2019-06-12 8:40 ` [Qemu-devel] [PATCH v3 1/9] i386: Add die-level cpu topology to x86CPU on PCMachine Like Xu
2019-06-19 18:50 ` Eduardo Habkost
2019-06-12 8:40 ` [Qemu-devel] [PATCH v3 2/9] hw/i386: Adjust nr_dies with configured smp_dies for PCMachine Like Xu
2019-06-19 18:51 ` Eduardo Habkost
2019-06-12 8:40 ` [Qemu-devel] [PATCH v3 3/9] i386/cpu: Consolidate die-id validity in smp context Like Xu
2019-06-19 19:04 ` Eduardo Habkost
2019-06-12 8:40 ` [Qemu-devel] [PATCH v3 4/9] i386: Update new x86_apicid parsing rules with die_offset support Like Xu
2019-06-19 19:09 ` Eduardo Habkost
2019-06-12 8:41 ` [Qemu-devel] [PATCH v3 5/9] tests/x86-cpuid: Update testcases in test_topo_bits() with multiple dies Like Xu
2019-06-19 19:10 ` Eduardo Habkost
2019-06-12 8:41 ` [Qemu-devel] [PATCH v3 6/9] i386/cpu: Add CPUID.1F generation support for multi-dies PCMachine Like Xu
2019-06-19 19:11 ` Eduardo Habkost
2019-06-19 23:21 ` Eduardo Habkost
2019-06-12 8:41 ` Like Xu [this message]
2019-06-19 19:15 ` [Qemu-devel] [PATCH v3 7/9] target/i386: Support multi-dies when host doesn't support CPUID.1F Eduardo Habkost
2019-06-19 23:36 ` Eduardo Habkost
2019-06-20 2:03 ` Like Xu
2019-06-20 3:29 ` Eduardo Habkost
2019-06-12 8:41 ` [Qemu-devel] [PATCH v3 8/9] machine: Refactor smp_parse() in vl.c as MachineClass::smp_parse() Like Xu
2019-06-19 19:24 ` Eduardo Habkost
2019-06-12 8:41 ` [Qemu-devel] [PATCH v3 9/9] vl.c: Add -smp, dies=* command line support and update doc Like Xu
2019-06-19 19:25 ` Eduardo Habkost
2019-06-19 3:05 ` [Qemu-devel] [PATCH v3 0/9] Introduce cpu die topology and enable CPUID.1F for i386 Like Xu
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=20190612084104.34984-8-like.xu@linux.intel.com \
--to=like.xu@linux.intel.com \
--cc=dgilbert@redhat.com \
--cc=ehabkost@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.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.