[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v7 12/17] target-i386: Use Hypervisor features in -m
From: |
Don Slutz |
Subject: |
[Qemu-devel] [PATCH v7 12/17] target-i386: Use Hypervisor features in -machine pc, accel=kvm. |
Date: |
Fri, 12 Oct 2012 15:56:17 -0400 |
Part of "target-i386: Add way to expose VMWare CPUID"
QEMU knows this as KVM_CPUID_FEATURES (0x40000001) in some builds.
If hypervisor features are set, then pass adjusted
cpuid_kvm_features as EAX in 0x40000101.
This is based on:
Microsoft Hypervisor CPUID Leaves:
http://msdn.microsoft.com/en-us/library/windows/hardware/ff542428%28v=vs.85%29.aspx
Linux kernel change starts with:
http://fixunix.com/kernel/538707-use-cpuid-communicate-hypervisor.html
Also:
http://lkml.indiana.edu/hypermail/linux/kernel/1205.0/00100.html
Signed-off-by: Don Slutz <address@hidden>
---
target-i386/kvm.c | 27 +++++++++++++++++++++------
1 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/target-i386/kvm.c b/target-i386/kvm.c
index 513356d..b61027f 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -409,13 +409,14 @@ int kvm_arch_init_vcpu(CPUX86State *env)
c = &cpuid_data.entries[cpuid_i++];
memset(c, 0, sizeof(*c));
c->function = KVM_CPUID_FEATURES;
- c->eax = env->cpuid_kvm_features &
- kvm_arch_get_supported_cpuid(s, KVM_CPUID_FEATURES, 0, R_EAX);
+ if (!env->cpuid_hv_features_set) {
+ c->eax = env->cpuid_kvm_features &
+ kvm_arch_get_supported_cpuid(s, KVM_CPUID_FEATURES, 0, R_EAX);
+ } else {
+ c->eax = env->cpuid_hv_features;
+ }
if (hyperv_enabled()) {
- memcpy(signature, "Hv#1\0\0\0\0\0\0\0\0", 12);
- c->eax = signature[0];
-
c = &cpuid_data.entries[cpuid_i++];
memset(c, 0, sizeof(*c));
c->function = HYPERV_CPUID_VERSION;
@@ -455,10 +456,24 @@ int kvm_arch_init_vcpu(CPUX86State *env)
memset(c, 0, sizeof(*c));
c->function = KVM_CPUID_SIGNATURE_NEXT;
memcpy(signature, "KVMKVMKVM\0\0\0", 12);
- c->eax = 0;
+ if (env->cpuid_hv_features_set) {
+ c->eax = KVM_CPUID_SIGNATURE_NEXT -
+ KVM_CPUID_SIGNATURE + KVM_CPUID_FEATURES;
+ } else {
+ c->eax = 0;
+ }
c->ebx = signature[0];
c->ecx = signature[1];
c->edx = signature[2];
+
+ if (env->cpuid_hv_features_set) {
+ c = &cpuid_data.entries[cpuid_i++];
+ memset(c, 0, sizeof(*c));
+ c->function = KVM_CPUID_SIGNATURE_NEXT -
+ KVM_CPUID_SIGNATURE + KVM_CPUID_FEATURES;
+ c->eax = env->cpuid_kvm_features &
+ kvm_arch_get_supported_cpuid(s, KVM_CPUID_FEATURES, 0, R_EAX);
+ }
}
has_msr_async_pf_en = c->eax & (1 << KVM_FEATURE_ASYNC_PF);
--
1.7.1
- [Qemu-devel] [PATCH v7 04/17] target-i386: Add cpu object access routines for Hypervisor level., (continued)
- [Qemu-devel] [PATCH v7 04/17] target-i386: Add cpu object access routines for Hypervisor level., Don Slutz, 2012/10/12
- [Qemu-devel] [PATCH v7 05/17] target-i386: Add cpu object access routines for Hypervisor vendor., Don Slutz, 2012/10/12
- [Qemu-devel] [PATCH v7 06/17] target-i386: Add cpu object access routines for Hypervisor features., Don Slutz, 2012/10/12
- [Qemu-devel] [PATCH v7 07/17] target-i386: Add x86_set_hyperv., Don Slutz, 2012/10/12
- [Qemu-devel] [PATCH v7 08/17] target-i386: Use x86_set_hyperv to set hypervisor vendor., Don Slutz, 2012/10/12
- [Qemu-devel] [PATCH v7 09/17] target-i386: Use x86_set_hyperv to set hypervisor features., Don Slutz, 2012/10/12
- [Qemu-devel] [PATCH v7 10/17] target-i386: Use Hypervisor level in -machine pc, accel=kvm., Don Slutz, 2012/10/12
- [Qemu-devel] [PATCH v7 11/17] target-i386: Use Hypervisor vendor in -machine pc, accel=kvm., Don Slutz, 2012/10/12
- [Qemu-devel] [PATCH v7 15/17] target-i386: Use Hypervisor level in -machine pc, accel=tcg., Don Slutz, 2012/10/12
- [Qemu-devel] [PATCH v7 17/17] target-i386: target-i386: Add VMWare CPUID Timing information in -machine pc, accel=tcg, Don Slutz, 2012/10/12
- [Qemu-devel] [PATCH v7 12/17] target-i386: Use Hypervisor features in -machine pc, accel=kvm.,
Don Slutz <=
- [Qemu-devel] [PATCH v7 13/17] target-i386: Add VMWare CPUID Timing information in -machine pc, accel=kvm., Don Slutz, 2012/10/12
- [Qemu-devel] [PATCH v7 16/17] target-i386: Use Hypervisor vendor in -machine pc, accel=tcg., Don Slutz, 2012/10/12
- [Qemu-devel] [PATCH v7 14/17] target-i386: Add vmare as a known name to Hypervisor vendor., Don Slutz, 2012/10/12
- Re: [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID, Marcelo Tosatti, 2012/10/29