[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v7 07/17] target-i386: Add x86_set_hyperv.
From: |
Don Slutz |
Subject: |
[Qemu-devel] [PATCH v7 07/17] target-i386: Add x86_set_hyperv. |
Date: |
Fri, 12 Oct 2012 15:56:12 -0400 |
Part of "target-i386: Add way to expose VMWare CPUID"
At this stage it is used to set the cpu object's hypervisor level to
the default for Microsoft's Hypervisor.
Also known as Paravirtualization level or maximim cpuid function
present in this leaf. This is the EAX value for 0x40000000.
This is based on:
Microsoft Hypervisor CPUID Leaves:
http://msdn.microsoft.com/en-us/library/windows/hardware/ff542428%28v=vs.85%29.aspx
which says:
"Leaf 0x40000000" (at very top of table):
EAX
The maximum input value for hypervisor CPUID information. For Microsoft
hypervisors, this value will be at least 0x40000005. The vendor ID
signature should be used only for reporting and diagnostic purposes."
QEMU already uses HYPERV_CPUID_MIN in accel=kvm mode. However this
HYPERV_CPUID_MIN is not used and a copy
(CPUID_HV_LEVEL_HYPERV_CPUID_MIN) is added so that the resulting
CPUID bits exposed to the guest should be a function of the
machine-type and command-line/config parameters, and nothing else
(otherwise the CPUID bits would change under the guest's feet when
live-migrating).
Signed-off-by: Don Slutz <address@hidden>
---
target-i386/cpu.c | 9 +++++++++
target-i386/cpu.h | 4 ++++
2 files changed, 13 insertions(+), 0 deletions(-)
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index b335a1e..283ac01 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -1253,6 +1253,12 @@ static void x86_cpuid_set_hv_features(Object *obj,
Visitor *v, void *opaque,
}
#if !defined(CONFIG_USER_ONLY)
+static void x86_set_hyperv(Object *obj, Error **errp)
+{
+ object_property_set_int(obj, CPUID_HV_LEVEL_HYPERV_CPUID_MIN,
+ "hypervisor-level", errp);
+}
+
static void x86_get_hv_spinlocks(Object *obj, Visitor *v, void *opaque,
const char *name, Error **errp)
{
@@ -1275,6 +1281,7 @@ static void x86_set_hv_spinlocks(Object *obj, Visitor *v,
void *opaque,
return;
}
hyperv_set_spinlock_retries(value);
+ x86_set_hyperv(obj, errp);
}
static void x86_get_hv_relaxed(Object *obj, Visitor *v, void *opaque,
@@ -1295,6 +1302,7 @@ static void x86_set_hv_relaxed(Object *obj, Visitor *v,
void *opaque,
return;
}
hyperv_enable_relaxed_timing(value);
+ x86_set_hyperv(obj, errp);
}
static void x86_get_hv_vapic(Object *obj, Visitor *v, void *opaque,
@@ -1315,6 +1323,7 @@ static void x86_set_hv_vapic(Object *obj, Visitor *v,
void *opaque,
return;
}
hyperv_enable_vapic_recommended(value);
+ x86_set_hyperv(obj, errp);
}
#endif
diff --git a/target-i386/cpu.h b/target-i386/cpu.h
index fbc8f66..cd4e83c 100644
--- a/target-i386/cpu.h
+++ b/target-i386/cpu.h
@@ -488,6 +488,10 @@
#define CPUID_VENDOR_VIA "CentaurHauls"
+/* The maximum input value for hypervisor CPUID information for
+ * Microsoft hypervisors. Is related to HYPERV_CPUID_MIN. */
+#define CPUID_HV_LEVEL_HYPERV_CPUID_MIN 0x40000005
+
#define CPUID_MWAIT_IBE (1 << 1) /* Interrupts can exit capability */
#define CPUID_MWAIT_EMX (1 << 0) /* enumeration supported */
--
1.7.1
- [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID, Don Slutz, 2012/10/12
- [Qemu-devel] [PATCH v7 01/17] target-i386: Add Hypervisor level., Don Slutz, 2012/10/12
- [Qemu-devel] [PATCH v7 03/17] target-i386: Add Hypervisor features., Don Slutz, 2012/10/12
- [Qemu-devel] [PATCH v7 02/17] target-i386: Add Hypervisor vendor., Don Slutz, 2012/10/12
- [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 <=
- [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, 2012/10/12
- [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