* [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID
@ 2012-10-12 19:56 Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 01/17] target-i386: Add Hypervisor level Don Slutz
` (17 more replies)
0 siblings, 18 replies; 19+ messages in thread
From: Don Slutz @ 2012-10-12 19:56 UTC (permalink / raw)
To: qemu-devel, kvm, mtosatti, ehabkost, imammedo, avi, afaerber,
peter.maydell, anthony
Cc: Don Slutz
Also known as Paravirtualization CPUIDs.
This is primarily done so that the guest will think it is running
under vmware when hypervisor-vendor=vmware is specified as a
property of a cpu.
Patches 1 to 3 define new cpu properties.
Patches 4 to 6 Add QOM access to the new properties.
Patches 7 to 9 Add setting of these when cpu features hv_spinlocks,
hv_relaxed, or hv_vapic are specified.
Patches 10 to 12 Change kvm to use these.
Patch 13 Add VMware timing info to kvm.
Patch 14 Makes it easier to use hypervisor-vendor=vmware.
Patches 15 to 17 Change tcg to use the new properties.
This depends on:
http://lists.gnu.org/archive/html/qemu-devel/2012-09/msg01400.html
As far as I know it is #4. It depends on (1) and (2) and (3).
This change 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
VMware documention on CPUIDs (Mechanisms to determine if software is
running in a VMware virtual machine):
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1009458
Changes from v6 to v7:
Subject changed from "Allow changing of Hypervisor CPUIDs." to "target-i386: Add way to expose VMWare CPUID"
Split out 01/16 target-i386: Add missing kvm bits.
It is no longer related to this patch set. Will be top posted as a seperate patch.
Marcelo Tosatti:
Better commit messages.
Reorder patches.
Changes from v5 to v6:
Split out 01/17: target-i386: Allow tsc-frequency to be larger then 2.147G
It has been accepted as a trivial patch:
http://lists.gnu.org/archive/html/qemu-devel/2012-09/msg03959.html
Blue Swirl:
Fix 2 checkpatch.pl "WARNING: line over 80 characters".
Changes from v4 to v5:
Undo kvm_clock2 change.
Add cpuid_hv_level_set; cpuid_hv_level == 0 is now valid.
Add cpuid_hv_vendor_set; the null string is now valid.
Handle kvm and cpuid_hv_level == 0.
hypervisor-vendor=kvm,hypervisor-level=0 and hypervisor-level=0,hypervisor-vendor=kvm
now do the same thing.
Changes from v3 to v4:
Added CPUID_HV_LEVEL_HYPERV, CPUID_HV_LEVEL_KVM.
Added CPUID_HV_VENDOR_HYPERV.
Added hyperv as known hypservisor-vendor.
Allow hypervisor-level to be 0.
Changes from v2 to v3:
Clean post to qemu-devel.
Changes from v1 to v2:
1) Added 1/4 from http://lists.gnu.org/archive/html/qemu-devel/2012-08/msg05153.html
Because Fred is changing jobs and so will not be pushing to get
this in. It needed to be rebased, And I needed it to complete the
testing of this change.
2) Added 2/4 because of the re-work I needed a way to clear all KVM bits,
3) The rework of v1. Make it fit into the object model re-work of cpu.c for x86.
4) Added 3/4 -- The split out of the code that is not needed for accel=kvm.
Changes from v2 to v3:
Marcelo Tosatti:
Its one big patch, better split in logically correlated patches
(with better changelog). This would help reviewers.
So split 3 and 4 into 3 to 17. More info in change log.
No code change.
Don Slutz (17):
target-i386: Add Hypervisor level.
target-i386: Add Hypervisor vendor.
target-i386: Add Hypervisor features.
target-i386: Add cpu object access routines for Hypervisor level.
target-i386: Add cpu object access routines for Hypervisor vendor.
target-i386: Add cpu object access routines for Hypervisor features.
target-i386: Add x86_set_hyperv.
target-i386: Use x86_set_hyperv to set hypervisor vendor.
target-i386: Use x86_set_hyperv to set hypervisor features.
target-i386: Use Hypervisor level in -machine pc,accel=kvm.
target-i386: Use Hypervisor vendor in -machine pc,accel=kvm.
target-i386: Use Hypervisor features in -machine pc,accel=kvm.
target-i386: Add VMWare CPUID Timing information in -machine
pc,accel=kvm.
target-i386: Add vmare as a known name to Hypervisor vendor.
target-i386: Use Hypervisor level in -machine pc,accel=tcg.
target-i386: Use Hypervisor vendor in -machine pc,accel=tcg.
target-i386: target-i386: Add VMWare CPUID Timing information in
-machine pc,accel=tcg
target-i386/cpu.c | 205 +++++++++++++++++++++++++++++++++++++++++++++++++++++
target-i386/cpu.h | 29 ++++++++
target-i386/kvm.c | 69 +++++++++++++++----
3 files changed, 290 insertions(+), 13 deletions(-)
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v7 01/17] target-i386: Add Hypervisor level.
2012-10-12 19:56 [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID Don Slutz
@ 2012-10-12 19:56 ` Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 02/17] target-i386: Add Hypervisor vendor Don Slutz
` (16 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: Don Slutz @ 2012-10-12 19:56 UTC (permalink / raw)
To: qemu-devel, kvm, mtosatti, ehabkost, imammedo, avi, afaerber,
peter.maydell, anthony
Cc: Don Slutz
Part of "target-i386: Add way to expose VMWare CPUID"
Also known as Paravirtualization level or maximim cpuid function present in this leaf.
This is the EAX value for 0x40000000.
QEMU knows this is KVM_CPUID_SIGNATURE (0x40000000).
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
VMware documention on CPUIDs (Mechanisms to determine if software is
running in a VMware virtual machine):
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1009458
Signed-off-by: Don Slutz <Don@CloudSwitch.com>
---
target-i386/cpu.h | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/target-i386/cpu.h b/target-i386/cpu.h
index 5265c5a..1899f69 100644
--- a/target-i386/cpu.h
+++ b/target-i386/cpu.h
@@ -777,11 +777,14 @@ typedef struct CPUX86State {
uint32_t cpuid_ext3_features;
uint32_t cpuid_apic_id;
bool cpuid_vendor_override;
+ bool cpuid_hv_level_set;
/* Store the results of Centaur's CPUID instructions */
uint32_t cpuid_xlevel2;
uint32_t cpuid_ext4_features;
/* Flags from CPUID[EAX=7,ECX=0].EBX */
uint32_t cpuid_7_0_ebx;
+ /* Hypervisor CPUIDs */
+ uint32_t cpuid_hv_level;
/* MTRRs */
uint64_t mtrr_fixed[11];
--
1.7.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v7 02/17] target-i386: Add Hypervisor vendor.
2012-10-12 19:56 [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 01/17] target-i386: Add Hypervisor level Don Slutz
@ 2012-10-12 19:56 ` Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 03/17] target-i386: Add Hypervisor features Don Slutz
` (15 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: Don Slutz @ 2012-10-12 19:56 UTC (permalink / raw)
To: qemu-devel, kvm, mtosatti, ehabkost, imammedo, avi, afaerber,
peter.maydell, anthony
Cc: Don Slutz
Part of "target-i386: Add way to expose VMWare CPUID"
Also known as Paravirtualization vendor.
This is EBX, ECX, and EDX data for 0x40000000.
QEMU knows this is KVM_CPUID_SIGNATURE (0x40000000).
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
VMware documention on CPUIDs (Mechanisms to determine if software is
running in a VMware virtual machine):
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1009458
Signed-off-by: Don Slutz <Don@CloudSwitch.com>
---
target-i386/cpu.h | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/target-i386/cpu.h b/target-i386/cpu.h
index 1899f69..e76ddc0 100644
--- a/target-i386/cpu.h
+++ b/target-i386/cpu.h
@@ -778,6 +778,7 @@ typedef struct CPUX86State {
uint32_t cpuid_apic_id;
bool cpuid_vendor_override;
bool cpuid_hv_level_set;
+ bool cpuid_hv_vendor_set;
/* Store the results of Centaur's CPUID instructions */
uint32_t cpuid_xlevel2;
uint32_t cpuid_ext4_features;
@@ -785,6 +786,9 @@ typedef struct CPUX86State {
uint32_t cpuid_7_0_ebx;
/* Hypervisor CPUIDs */
uint32_t cpuid_hv_level;
+ uint32_t cpuid_hv_vendor1;
+ uint32_t cpuid_hv_vendor2;
+ uint32_t cpuid_hv_vendor3;
/* MTRRs */
uint64_t mtrr_fixed[11];
--
1.7.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v7 03/17] target-i386: Add Hypervisor features.
2012-10-12 19:56 [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 01/17] target-i386: Add Hypervisor level Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 02/17] target-i386: Add Hypervisor vendor Don Slutz
@ 2012-10-12 19:56 ` Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 04/17] target-i386: Add cpu object access routines for Hypervisor level Don Slutz
` (14 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: Don Slutz @ 2012-10-12 19:56 UTC (permalink / raw)
To: qemu-devel, kvm, mtosatti, ehabkost, imammedo, avi, afaerber,
peter.maydell, anthony
Cc: Don Slutz
Part of "target-i386: Add way to expose VMWare CPUID"
Also known as kvm festures or Hypervisor vendor-neutral interface identification.
This is the EAX value for 0x40000001.
QEMU knows this is KVM_CPUID_FEATURES (0x40000001) in some builds.
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
VMware documention on CPUIDs (Mechanisms to determine if software is
running in a VMware virtual machine):
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1009458
Signed-off-by: Don Slutz <Don@CloudSwitch.com>
---
target-i386/cpu.h | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/target-i386/cpu.h b/target-i386/cpu.h
index e76ddc0..fbc8f66 100644
--- a/target-i386/cpu.h
+++ b/target-i386/cpu.h
@@ -779,6 +779,7 @@ typedef struct CPUX86State {
bool cpuid_vendor_override;
bool cpuid_hv_level_set;
bool cpuid_hv_vendor_set;
+ bool cpuid_hv_features_set;
/* Store the results of Centaur's CPUID instructions */
uint32_t cpuid_xlevel2;
uint32_t cpuid_ext4_features;
@@ -789,6 +790,8 @@ typedef struct CPUX86State {
uint32_t cpuid_hv_vendor1;
uint32_t cpuid_hv_vendor2;
uint32_t cpuid_hv_vendor3;
+ /* Hypervisor features */
+ uint32_t cpuid_hv_features;
/* MTRRs */
uint64_t mtrr_fixed[11];
--
1.7.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v7 04/17] target-i386: Add cpu object access routines for Hypervisor level.
2012-10-12 19:56 [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID Don Slutz
` (2 preceding siblings ...)
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 03/17] target-i386: Add Hypervisor features Don Slutz
@ 2012-10-12 19:56 ` Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 05/17] target-i386: Add cpu object access routines for Hypervisor vendor Don Slutz
` (13 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: Don Slutz @ 2012-10-12 19:56 UTC (permalink / raw)
To: qemu-devel, kvm, mtosatti, ehabkost, imammedo, avi, afaerber,
peter.maydell, anthony
Cc: Don Slutz
Part of "target-i386: Add way to expose VMWare CPUID"
These are modeled after x86_cpuid_get_xlevel and x86_cpuid_set_xlevel.
Signed-off-by: Don Slutz <Don@CloudSwitch.com>
---
target-i386/cpu.c | 29 +++++++++++++++++++++++++++++
1 files changed, 29 insertions(+), 0 deletions(-)
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index b8f431a..c4bd6cf 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -1162,6 +1162,32 @@ static void x86_cpuid_set_tsc_freq(Object *obj, Visitor *v, void *opaque,
cpu->env.tsc_khz = value / 1000;
}
+static void x86_cpuid_get_hv_level(Object *obj, Visitor *v, void *opaque,
+ const char *name, Error **errp)
+{
+ X86CPU *cpu = X86_CPU(obj);
+
+ visit_type_uint32(v, &cpu->env.cpuid_hv_level, name, errp);
+}
+
+static void x86_cpuid_set_hv_level(Object *obj, Visitor *v, void *opaque,
+ const char *name, Error **errp)
+{
+ X86CPU *cpu = X86_CPU(obj);
+ uint32_t value;
+
+ visit_type_uint32(v, &value, name, errp);
+ if (error_is_set(errp)) {
+ return;
+ }
+
+ if (value != 0 && value < 0x40000000) {
+ value += 0x40000000;
+ }
+ cpu->env.cpuid_hv_level = value;
+ cpu->env.cpuid_hv_level_set = true;
+}
+
#if !defined(CONFIG_USER_ONLY)
static void x86_get_hv_spinlocks(Object *obj, Visitor *v, void *opaque,
const char *name, Error **errp)
@@ -2053,6 +2079,9 @@ static void x86_cpu_initfn(Object *obj)
object_property_add(obj, "enforce", "bool",
x86_cpuid_get_enforce,
x86_cpuid_set_enforce, NULL, NULL, NULL);
+ object_property_add(obj, "hypervisor-level", "int",
+ x86_cpuid_get_hv_level,
+ x86_cpuid_set_hv_level, NULL, NULL, NULL);
#if !defined(CONFIG_USER_ONLY)
object_property_add(obj, "hv_spinlocks", "int",
x86_get_hv_spinlocks,
--
1.7.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v7 05/17] target-i386: Add cpu object access routines for Hypervisor vendor.
2012-10-12 19:56 [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID Don Slutz
` (3 preceding siblings ...)
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 04/17] target-i386: Add cpu object access routines for Hypervisor level Don Slutz
@ 2012-10-12 19:56 ` Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 06/17] target-i386: Add cpu object access routines for Hypervisor features Don Slutz
` (12 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: Don Slutz @ 2012-10-12 19:56 UTC (permalink / raw)
To: qemu-devel, kvm, mtosatti, ehabkost, imammedo, avi, afaerber,
peter.maydell, anthony
Cc: Don Slutz
Part of "target-i386: Add way to expose VMWare CPUID"
These are modeled after x86_cpuid_set_vendor and x86_cpuid_get_vendor.
Since kvm's vendor is shorter, the test for correct size is removed and zero padding is added.
See http://lkml.indiana.edu/hypermail/linux/kernel/1205.0/00100.html for definition of kvm's vendor.
Signed-off-by: Don Slutz <Don@CloudSwitch.com>
---
target-i386/cpu.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 44 insertions(+), 0 deletions(-)
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index c4bd6cf..a87527c 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -1188,6 +1188,47 @@ static void x86_cpuid_set_hv_level(Object *obj, Visitor *v, void *opaque,
cpu->env.cpuid_hv_level_set = true;
}
+static char *x86_cpuid_get_hv_vendor(Object *obj, Error **errp)
+{
+ X86CPU *cpu = X86_CPU(obj);
+ CPUX86State *env = &cpu->env;
+ char *value;
+ int i;
+
+ value = (char *)g_malloc(CPUID_VENDOR_SZ + 1);
+ for (i = 0; i < 4; i++) {
+ value[i + 0] = env->cpuid_hv_vendor1 >> (8 * i);
+ value[i + 4] = env->cpuid_hv_vendor2 >> (8 * i);
+ value[i + 8] = env->cpuid_hv_vendor3 >> (8 * i);
+ }
+ value[CPUID_VENDOR_SZ] = '\0';
+
+ return value;
+}
+
+static void x86_cpuid_set_hv_vendor(Object *obj, const char *value,
+ Error **errp)
+{
+ X86CPU *cpu = X86_CPU(obj);
+ CPUX86State *env = &cpu->env;
+ int i;
+ char adj_value[CPUID_VENDOR_SZ + 1];
+
+ memset(adj_value, 0, sizeof(adj_value));
+
+ pstrcpy(adj_value, sizeof(adj_value), value);
+
+ env->cpuid_hv_vendor1 = 0;
+ env->cpuid_hv_vendor2 = 0;
+ env->cpuid_hv_vendor3 = 0;
+ for (i = 0; i < 4; i++) {
+ env->cpuid_hv_vendor1 |= ((uint8_t)adj_value[i + 0]) << (8 * i);
+ env->cpuid_hv_vendor2 |= ((uint8_t)adj_value[i + 4]) << (8 * i);
+ env->cpuid_hv_vendor3 |= ((uint8_t)adj_value[i + 8]) << (8 * i);
+ }
+ env->cpuid_hv_vendor_set = true;
+}
+
#if !defined(CONFIG_USER_ONLY)
static void x86_get_hv_spinlocks(Object *obj, Visitor *v, void *opaque,
const char *name, Error **errp)
@@ -2082,6 +2123,9 @@ static void x86_cpu_initfn(Object *obj)
object_property_add(obj, "hypervisor-level", "int",
x86_cpuid_get_hv_level,
x86_cpuid_set_hv_level, NULL, NULL, NULL);
+ object_property_add_str(obj, "hypervisor-vendor",
+ x86_cpuid_get_hv_vendor,
+ x86_cpuid_set_hv_vendor, NULL);
#if !defined(CONFIG_USER_ONLY)
object_property_add(obj, "hv_spinlocks", "int",
x86_get_hv_spinlocks,
--
1.7.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v7 06/17] target-i386: Add cpu object access routines for Hypervisor features.
2012-10-12 19:56 [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID Don Slutz
` (4 preceding siblings ...)
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 05/17] target-i386: Add cpu object access routines for Hypervisor vendor Don Slutz
@ 2012-10-12 19:56 ` Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 07/17] target-i386: Add x86_set_hyperv Don Slutz
` (11 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: Don Slutz @ 2012-10-12 19:56 UTC (permalink / raw)
To: qemu-devel, kvm, mtosatti, ehabkost, imammedo, avi, afaerber,
peter.maydell, anthony
Cc: Don Slutz
Part of "target-i386: Add way to expose VMWare CPUID"
Also known as kvm festures or Hypervisor vendor-neutral interface identification.
This is just the EAX value for 0x40000001.
QEMU knows this is KVM_CPUID_FEATURES (0x40000001) in some builds.
When exposing VMWare CPUID this needs to be set to zero.
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
VMware documention on CPUIDs (Mechanisms to determine if software is
running in a VMware virtual machine):
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1009458
Signed-off-by: Don Slutz <Don@CloudSwitch.com>
---
target-i386/cpu.c | 26 ++++++++++++++++++++++++++
1 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index a87527c..b335a1e 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -1229,6 +1229,29 @@ static void x86_cpuid_set_hv_vendor(Object *obj, const char *value,
env->cpuid_hv_vendor_set = true;
}
+static void x86_cpuid_get_hv_features(Object *obj, Visitor *v, void *opaque,
+ const char *name, Error **errp)
+{
+ X86CPU *cpu = X86_CPU(obj);
+
+ visit_type_uint32(v, &cpu->env.cpuid_hv_features, name, errp);
+}
+
+static void x86_cpuid_set_hv_features(Object *obj, Visitor *v, void *opaque,
+ const char *name, Error **errp)
+{
+ X86CPU *cpu = X86_CPU(obj);
+ uint32_t value;
+
+ visit_type_uint32(v, &value, name, errp);
+ if (error_is_set(errp)) {
+ return;
+ }
+
+ cpu->env.cpuid_hv_features = value;
+ cpu->env.cpuid_hv_features_set = true;
+}
+
#if !defined(CONFIG_USER_ONLY)
static void x86_get_hv_spinlocks(Object *obj, Visitor *v, void *opaque,
const char *name, Error **errp)
@@ -2126,6 +2149,9 @@ static void x86_cpu_initfn(Object *obj)
object_property_add_str(obj, "hypervisor-vendor",
x86_cpuid_get_hv_vendor,
x86_cpuid_set_hv_vendor, NULL);
+ object_property_add(obj, "hypervisor-features", "int",
+ x86_cpuid_get_hv_features,
+ x86_cpuid_set_hv_features, NULL, NULL, NULL);
#if !defined(CONFIG_USER_ONLY)
object_property_add(obj, "hv_spinlocks", "int",
x86_get_hv_spinlocks,
--
1.7.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v7 07/17] target-i386: Add x86_set_hyperv.
2012-10-12 19:56 [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID Don Slutz
` (5 preceding siblings ...)
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 06/17] target-i386: Add cpu object access routines for Hypervisor features Don Slutz
@ 2012-10-12 19:56 ` Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 08/17] target-i386: Use x86_set_hyperv to set hypervisor vendor Don Slutz
` (10 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: Don Slutz @ 2012-10-12 19:56 UTC (permalink / raw)
To: qemu-devel, kvm, mtosatti, ehabkost, imammedo, avi, afaerber,
peter.maydell, anthony
Cc: Don Slutz
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 <Don@CloudSwitch.com>
---
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
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v7 08/17] target-i386: Use x86_set_hyperv to set hypervisor vendor.
2012-10-12 19:56 [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID Don Slutz
` (6 preceding siblings ...)
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 07/17] target-i386: Add x86_set_hyperv Don Slutz
@ 2012-10-12 19:56 ` Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 09/17] target-i386: Use x86_set_hyperv to set hypervisor features Don Slutz
` (9 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: Don Slutz @ 2012-10-12 19:56 UTC (permalink / raw)
To: qemu-devel, kvm, mtosatti, ehabkost, imammedo, avi, afaerber,
peter.maydell, anthony
Cc: Don Slutz
Part of "target-i386: Add way to expose VMWare CPUID"
At this stage it is used to set the cpu object's hypervisor vendor
to the default for Microsoft's Hypervisor ("Microsoft Hv").
Also known as Paravirtualization vendor.
This is EBX, ECX, EDX data for 0x40000000.
QEMU knows this is KVM_CPUID_SIGNATURE (0x40000000).
This is based on:
Microsoft Hypervisor CPUID Leaves:
http://msdn.microsoft.com/en-us/library/windows/hardware/ff542428%28v=vs.85%29.aspx
Signed-off-by: Don Slutz <Don@CloudSwitch.com>
---
target-i386/cpu.c | 2 ++
target-i386/cpu.h | 1 +
2 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index 283ac01..958be81 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -1257,6 +1257,8 @@ static void x86_set_hyperv(Object *obj, Error **errp)
{
object_property_set_int(obj, CPUID_HV_LEVEL_HYPERV_CPUID_MIN,
"hypervisor-level", errp);
+ object_property_set_str(obj, CPUID_HV_VENDOR_HYPERV,
+ "hypervisor-vendor", errp);
}
static void x86_get_hv_spinlocks(Object *obj, Visitor *v, void *opaque,
diff --git a/target-i386/cpu.h b/target-i386/cpu.h
index cd4e83c..f2045d6 100644
--- a/target-i386/cpu.h
+++ b/target-i386/cpu.h
@@ -491,6 +491,7 @@
/* 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_HV_VENDOR_HYPERV "Microsoft Hv"
#define CPUID_MWAIT_IBE (1 << 1) /* Interrupts can exit capability */
#define CPUID_MWAIT_EMX (1 << 0) /* enumeration supported */
--
1.7.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v7 09/17] target-i386: Use x86_set_hyperv to set hypervisor features.
2012-10-12 19:56 [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID Don Slutz
` (7 preceding siblings ...)
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 08/17] target-i386: Use x86_set_hyperv to set hypervisor vendor Don Slutz
@ 2012-10-12 19:56 ` Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 10/17] target-i386: Use Hypervisor level in -machine pc, accel=kvm Don Slutz
` (8 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: Don Slutz @ 2012-10-12 19:56 UTC (permalink / raw)
To: qemu-devel, kvm, mtosatti, ehabkost, imammedo, avi, afaerber,
peter.maydell, anthony
Cc: Don Slutz
Part of "target-i386: Add way to expose VMWare CPUID"
At this stage it is used to set the cpu object's hypervisor features
to the default for Microsoft's Hypervisor ("Hv#1").
Also known as kvm festures or Hypervisor vendor-neutral interface identification.
This is the EAX value for 0x40000001.
QEMU knows this is KVM_CPUID_FEATURES (0x40000001) in some builds.
This is based on:
Microsoft Hypervisor CPUID Leaves:
http://msdn.microsoft.com/en-us/library/windows/hardware/ff542428%28v=vs.85%29.aspx
Signed-off-by: Don Slutz <Don@CloudSwitch.com>
---
target-i386/cpu.c | 2 ++
target-i386/cpu.h | 1 +
2 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index 958be81..f058add 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -1259,6 +1259,8 @@ static void x86_set_hyperv(Object *obj, Error **errp)
"hypervisor-level", errp);
object_property_set_str(obj, CPUID_HV_VENDOR_HYPERV,
"hypervisor-vendor", errp);
+ object_property_set_int(obj, CPUID_HV_FEATURES_HYPERV,
+ "hypervisor-features", errp);
}
static void x86_get_hv_spinlocks(Object *obj, Visitor *v, void *opaque,
diff --git a/target-i386/cpu.h b/target-i386/cpu.h
index f2045d6..9a34c7b 100644
--- a/target-i386/cpu.h
+++ b/target-i386/cpu.h
@@ -492,6 +492,7 @@
* Microsoft hypervisors. Is related to HYPERV_CPUID_MIN. */
#define CPUID_HV_LEVEL_HYPERV_CPUID_MIN 0x40000005
#define CPUID_HV_VENDOR_HYPERV "Microsoft Hv"
+#define CPUID_HV_FEATURES_HYPERV 0x31237648 /* "Hv#1" */
#define CPUID_MWAIT_IBE (1 << 1) /* Interrupts can exit capability */
#define CPUID_MWAIT_EMX (1 << 0) /* enumeration supported */
--
1.7.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v7 10/17] target-i386: Use Hypervisor level in -machine pc, accel=kvm.
2012-10-12 19:56 [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID Don Slutz
` (8 preceding siblings ...)
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 09/17] target-i386: Use x86_set_hyperv to set hypervisor features Don Slutz
@ 2012-10-12 19:56 ` Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 11/17] target-i386: Use Hypervisor vendor " Don Slutz
` (7 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: Don Slutz @ 2012-10-12 19:56 UTC (permalink / raw)
To: qemu-devel, kvm, mtosatti, ehabkost, imammedo, avi, afaerber,
peter.maydell, anthony
Cc: Don Slutz
Part of "target-i386: Add way to expose VMWare CPUID"
Also known as Paravirtualization level.
QEMU knows this is KVM_CPUID_SIGNATURE (0x40000000).
Signed-off-by: Don Slutz <Don@CloudSwitch.com>
---
target-i386/kvm.c | 8 ++++++--
1 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/target-i386/kvm.c b/target-i386/kvm.c
index 5b18383..30963e1 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -392,10 +392,14 @@ int kvm_arch_init_vcpu(CPUX86State *env)
c->function = KVM_CPUID_SIGNATURE;
if (!hyperv_enabled()) {
memcpy(signature, "KVMKVMKVM\0\0\0", 12);
- c->eax = 0;
+ if (!env->cpuid_hv_level_set) {
+ c->eax = 0;
+ } else {
+ c->eax = env->cpuid_hv_level;
+ }
} else {
memcpy(signature, "Microsoft Hv", 12);
- c->eax = HYPERV_CPUID_MIN;
+ c->eax = env->cpuid_hv_level;
}
c->ebx = signature[0];
c->ecx = signature[1];
--
1.7.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v7 11/17] target-i386: Use Hypervisor vendor in -machine pc, accel=kvm.
2012-10-12 19:56 [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID Don Slutz
` (9 preceding siblings ...)
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 10/17] target-i386: Use Hypervisor level in -machine pc, accel=kvm Don Slutz
@ 2012-10-12 19:56 ` Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 12/17] target-i386: Use Hypervisor features " Don Slutz
` (6 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: Don Slutz @ 2012-10-12 19:56 UTC (permalink / raw)
To: qemu-devel, kvm, mtosatti, ehabkost, imammedo, avi, afaerber,
peter.maydell, anthony
Cc: Don Slutz
Part of "target-i386: Add way to expose VMWare CPUID"
Also known as Paravirtualization vendor.
This is EBX, ECX, and EDX data for 0x40000000.
QEMU knows this is KVM_CPUID_SIGNATURE (0x40000000).
If hypervisor vendor is set then add kvm's
signature at KVM_CPUID_SIGNATURE_NEXT (0x40000100).
Signed-off-by: Don Slutz <Don@CloudSwitch.com>
---
target-i386/kvm.c | 26 ++++++++++++++------------
1 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/target-i386/kvm.c b/target-i386/kvm.c
index 30963e1..513356d 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -390,20 +390,21 @@ int kvm_arch_init_vcpu(CPUX86State *env)
c = &cpuid_data.entries[cpuid_i++];
memset(c, 0, sizeof(*c));
c->function = KVM_CPUID_SIGNATURE;
- if (!hyperv_enabled()) {
- memcpy(signature, "KVMKVMKVM\0\0\0", 12);
- if (!env->cpuid_hv_level_set) {
- c->eax = 0;
- } else {
- c->eax = env->cpuid_hv_level;
- }
+ if (!env->cpuid_hv_level_set) {
+ c->eax = 0;
} else {
- memcpy(signature, "Microsoft Hv", 12);
c->eax = env->cpuid_hv_level;
}
- c->ebx = signature[0];
- c->ecx = signature[1];
- c->edx = signature[2];
+ if (!env->cpuid_hv_vendor_set) {
+ memcpy(signature, "KVMKVMKVM\0\0\0", 12);
+ c->ebx = signature[0];
+ c->ecx = signature[1];
+ c->edx = signature[2];
+ } else {
+ c->ebx = env->cpuid_hv_vendor1;
+ c->ecx = env->cpuid_hv_vendor2;
+ c->edx = env->cpuid_hv_vendor3;
+ }
c = &cpuid_data.entries[cpuid_i++];
memset(c, 0, sizeof(*c));
@@ -448,7 +449,8 @@ int kvm_arch_init_vcpu(CPUX86State *env)
c->function = HYPERV_CPUID_IMPLEMENT_LIMITS;
c->eax = 0x40;
c->ebx = 0x40;
-
+ }
+ if (env->cpuid_hv_vendor_set) {
c = &cpuid_data.entries[cpuid_i++];
memset(c, 0, sizeof(*c));
c->function = KVM_CPUID_SIGNATURE_NEXT;
--
1.7.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v7 12/17] target-i386: Use Hypervisor features in -machine pc, accel=kvm.
2012-10-12 19:56 [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID Don Slutz
` (10 preceding siblings ...)
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 11/17] target-i386: Use Hypervisor vendor " Don Slutz
@ 2012-10-12 19:56 ` Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 13/17] target-i386: Add VMWare CPUID Timing information " Don Slutz
` (5 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: Don Slutz @ 2012-10-12 19:56 UTC (permalink / raw)
To: qemu-devel, kvm, mtosatti, ehabkost, imammedo, avi, afaerber,
peter.maydell, anthony
Cc: Don Slutz
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 <Don@CloudSwitch.com>
---
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
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v7 13/17] target-i386: Add VMWare CPUID Timing information in -machine pc, accel=kvm.
2012-10-12 19:56 [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID Don Slutz
` (11 preceding siblings ...)
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 12/17] target-i386: Use Hypervisor features " Don Slutz
@ 2012-10-12 19:56 ` Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 14/17] target-i386: Add vmare as a known name to Hypervisor vendor Don Slutz
` (4 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: Don Slutz @ 2012-10-12 19:56 UTC (permalink / raw)
To: qemu-devel, kvm, mtosatti, ehabkost, imammedo, avi, afaerber,
peter.maydell, anthony
Cc: Don Slutz
Part of "target-i386: Add way to expose VMWare CPUID"
This is EAX and EBX data for 0x40000010.
Add new #define CPUID_HV_TIMING_INFO for this.
The best documentation I have found is:
http://article.gmane.org/gmane.comp.emulators.kvm.devel/22643
And a test under ESXi 4.0 shows that VMware is setting this data.
Signed-off-by: Don Slutz <Don@CloudSwitch.com>
---
target-i386/cpu.h | 4 ++++
target-i386/kvm.c | 22 ++++++++++++++++++++++
2 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/target-i386/cpu.h b/target-i386/cpu.h
index 9a34c7b..6ceef05 100644
--- a/target-i386/cpu.h
+++ b/target-i386/cpu.h
@@ -488,6 +488,10 @@
#define CPUID_VENDOR_VIA "CentaurHauls"
+/* VMware hardware version 7 defines timing information as
+ * 0x40000010. */
+#define CPUID_HV_TIMING_INFO 0x40000010
+
/* 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
diff --git a/target-i386/kvm.c b/target-i386/kvm.c
index b61027f..81b0014 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -451,6 +451,28 @@ int kvm_arch_init_vcpu(CPUX86State *env)
c->eax = 0x40;
c->ebx = 0x40;
}
+ if (env->cpuid_hv_level >= CPUID_HV_TIMING_INFO) {
+ const uint32_t apic_khz = 1000000L;
+
+ /*
+ * From article.gmane.org/gmane.comp.emulators.kvm.devel/22643
+ *
+ * Leaf 0x40000010, Timing Information.
+ *
+ * VMware has defined the first generic leaf to provide timing
+ * information. This leaf returns the current TSC frequency and
+ * current Bus frequency in kHz.
+ *
+ * # EAX: (Virtual) TSC frequency in kHz.
+ * # EBX: (Virtual) Bus (local apic timer) frequency in kHz.
+ * # ECX, EDX: RESERVED (Per above, reserved fields are set to zero).
+ */
+ c = &cpuid_data.entries[cpuid_i++];
+ memset(c, 0, sizeof(*c));
+ c->function = CPUID_HV_TIMING_INFO;
+ c->eax = (uint32_t)env->tsc_khz;
+ c->ebx = apic_khz;
+ }
if (env->cpuid_hv_vendor_set) {
c = &cpuid_data.entries[cpuid_i++];
memset(c, 0, sizeof(*c));
--
1.7.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v7 14/17] target-i386: Add vmare as a known name to Hypervisor vendor.
2012-10-12 19:56 [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID Don Slutz
` (12 preceding siblings ...)
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 13/17] target-i386: Add VMWare CPUID Timing information " Don Slutz
@ 2012-10-12 19:56 ` Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 15/17] target-i386: Use Hypervisor level in -machine pc, accel=tcg Don Slutz
` (3 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: Don Slutz @ 2012-10-12 19:56 UTC (permalink / raw)
To: qemu-devel, kvm, mtosatti, ehabkost, imammedo, avi, afaerber,
peter.maydell, anthony
Cc: Don Slutz
Part of "target-i386: Add way to expose VMWare CPUID"
Also adds some other known names (kvm, hyperv) to Hypervisor vendor.
This allows "hypervisor-vendor=vmware3" instead of
"hypervisor-vendor=VMwareVMware,hypervisor-level=2,hypervisor-features=0".
And "hypervisor-vendor=vmware" instead of
"hypervisor-vendor=VMwareVMware,hypervisor-level=0x10,hypervisor-features=0".
This is based on:
VMware documention on CPUIDs (Mechanisms to determine if software is
running in a VMware virtual machine):
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1009458
Signed-off-by: Don Slutz <Don@CloudSwitch.com>
---
target-i386/cpu.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
target-i386/cpu.h | 9 ++++++++
2 files changed, 66 insertions(+), 1 deletions(-)
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index f058add..c8466ec 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -1203,6 +1203,23 @@ static char *x86_cpuid_get_hv_vendor(Object *obj, Error **errp)
}
value[CPUID_VENDOR_SZ] = '\0';
+ /* Convert known names */
+ if (!strcmp(value, CPUID_HV_VENDOR_HYPERV) &&
+ env->cpuid_hv_level == CPUID_HV_LEVEL_HYPERV_CPUID_MIN &&
+ env->cpuid_hv_features_set == CPUID_HV_FEATURES_HYPERV) {
+ pstrcpy(value, sizeof(value), "hyperv");
+ } else if (!strcmp(value, CPUID_HV_VENDOR_VMWARE) &&
+ env->cpuid_hv_features_set == CPUID_HV_FEATURES_VMWARE) {
+ if (env->cpuid_hv_level == CPUID_HV_LEVEL_VMWARE_4) {
+ pstrcpy(value, sizeof(value), "vmware4");
+ } else if (env->cpuid_hv_level == CPUID_HV_LEVEL_VMWARE_3) {
+ pstrcpy(value, sizeof(value), "vmware3");
+ }
+ } else if (!strcmp(value, CPUID_HV_VENDOR_KVM) &&
+ (env->cpuid_hv_level == CPUID_HV_LEVEL_KVM_0 ||
+ env->cpuid_hv_level == CPUID_HV_LEVEL_KVM_1)) {
+ pstrcpy(value, sizeof(value), "kvm");
+ }
return value;
}
@@ -1216,7 +1233,46 @@ static void x86_cpuid_set_hv_vendor(Object *obj, const char *value,
memset(adj_value, 0, sizeof(adj_value));
- pstrcpy(adj_value, sizeof(adj_value), value);
+ /* Convert known names */
+ if (!strcmp(value, "hyperv")) {
+ if (!env->cpuid_hv_level_set) {
+ object_property_set_int(obj, CPUID_HV_LEVEL_HYPERV_CPUID_MIN,
+ "hypervisor-level", errp);
+ }
+ if (!env->cpuid_hv_features_set) {
+ object_property_set_int(obj, CPUID_HV_FEATURES_HYPERV,
+ "hypervisor-features", errp);
+ }
+ pstrcpy(adj_value, sizeof(adj_value), CPUID_HV_VENDOR_HYPERV);
+ } else if (!strcmp(value, "vmware") || !strcmp(value, "vmware4")) {
+ if (!env->cpuid_hv_level_set) {
+ object_property_set_int(obj, CPUID_HV_LEVEL_VMWARE_4,
+ "hypervisor-level", errp);
+ }
+ if (!env->cpuid_hv_features_set) {
+ object_property_set_int(obj, CPUID_HV_FEATURES_VMWARE,
+ "hypervisor-features", errp);
+ }
+ pstrcpy(adj_value, sizeof(adj_value), CPUID_HV_VENDOR_VMWARE);
+ } else if (!strcmp(value, "vmware3")) {
+ if (!env->cpuid_hv_level_set) {
+ object_property_set_int(obj, CPUID_HV_LEVEL_VMWARE_3,
+ "hypervisor-level", errp);
+ }
+ if (!env->cpuid_hv_features_set) {
+ object_property_set_int(obj, CPUID_HV_FEATURES_VMWARE,
+ "hypervisor-features", errp);
+ }
+ pstrcpy(adj_value, sizeof(adj_value), CPUID_HV_VENDOR_VMWARE);
+ } else if (!strcmp(value, "kvm")) {
+ if (!env->cpuid_hv_level_set) {
+ object_property_set_int(obj, CPUID_HV_LEVEL_KVM_1,
+ "hypervisor-level", errp);
+ }
+ pstrcpy(adj_value, sizeof(adj_value), CPUID_HV_VENDOR_KVM);
+ } else {
+ pstrcpy(adj_value, sizeof(adj_value), value);
+ }
env->cpuid_hv_vendor1 = 0;
env->cpuid_hv_vendor2 = 0;
diff --git a/target-i386/cpu.h b/target-i386/cpu.h
index 6ceef05..a387d82 100644
--- a/target-i386/cpu.h
+++ b/target-i386/cpu.h
@@ -498,6 +498,15 @@
#define CPUID_HV_VENDOR_HYPERV "Microsoft Hv"
#define CPUID_HV_FEATURES_HYPERV 0x31237648 /* "Hv#1" */
+#define CPUID_HV_LEVEL_VMWARE_3 0x40000002
+#define CPUID_HV_LEVEL_VMWARE_4 0x40000010
+#define CPUID_HV_VENDOR_VMWARE "VMwareVMware"
+#define CPUID_HV_FEATURES_VMWARE 0
+
+#define CPUID_HV_LEVEL_KVM_0 0
+#define CPUID_HV_LEVEL_KVM_1 0x40000001
+#define CPUID_HV_VENDOR_KVM "KVMKVMKVM"
+
#define CPUID_MWAIT_IBE (1 << 1) /* Interrupts can exit capability */
#define CPUID_MWAIT_EMX (1 << 0) /* enumeration supported */
--
1.7.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v7 15/17] target-i386: Use Hypervisor level in -machine pc, accel=tcg.
2012-10-12 19:56 [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID Don Slutz
` (13 preceding siblings ...)
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 14/17] target-i386: Add vmare as a known name to Hypervisor vendor Don Slutz
@ 2012-10-12 19:56 ` Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 16/17] target-i386: Use Hypervisor vendor " Don Slutz
` (2 subsequent siblings)
17 siblings, 0 replies; 19+ messages in thread
From: Don Slutz @ 2012-10-12 19:56 UTC (permalink / raw)
To: qemu-devel, kvm, mtosatti, ehabkost, imammedo, avi, afaerber,
peter.maydell, anthony
Cc: Don Slutz
Part of "target-i386: Add way to expose VMWare CPUID"
Also known as Paravirtualization level.
QEMU knows this as KVM_CPUID_SIGNATURE (0x40000000) in kvm on linux.
This does not provide vendor support in tcg yet.
>From http://lkml.indiana.edu/hypermail/linux/kernel/1205.0/00100.html
kvm has this issue:
"Note also that old hosts set eax value to 0x0. This should
be interpreted as if the value was 0x40000001."
This change 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
VMware documention on CPUIDs (Mechanisms to determine if software is
running in a VMware virtual machine):
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1009458
Signed-off-by: Don Slutz <Don@CloudSwitch.com>
---
target-i386/cpu.c | 30 ++++++++++++++++++++++++++++++
1 files changed, 30 insertions(+), 0 deletions(-)
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index c8466ec..5b33b95 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -1767,6 +1767,24 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
index = env->cpuid_xlevel;
}
}
+ } else if (index & 0x40000000) {
+ /* test if maximum index reached
+ * but only if Hypervisor level is set */
+ if (env->cpuid_hv_level_set) {
+ uint32_t real_level = env->cpuid_hv_level;
+
+ /* Handle Hypervisor CPUIDs.
+ * kvm defines 0 to be the same as 0x40000001 */
+ if (real_level < 0x40000000) {
+ real_level = 0x40000001;
+ }
+ if (index > real_level) {
+ index = real_level;
+ }
+ } else {
+ if (index > env->cpuid_level)
+ index = env->cpuid_level;
+ }
} else {
if (index > env->cpuid_level)
index = env->cpuid_level;
@@ -1905,6 +1923,18 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
*edx = 0;
}
break;
+ case 0x40000000:
+ *eax = env->cpuid_hv_level;
+ *ebx = 0;
+ *ecx = 0;
+ *edx = 0;
+ break;
+ case 0x40000001:
+ *eax = env->cpuid_kvm_features;
+ *ebx = 0;
+ *ecx = 0;
+ *edx = 0;
+ break;
case 0x80000000:
*eax = env->cpuid_xlevel;
*ebx = env->cpuid_vendor1;
--
1.7.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v7 16/17] target-i386: Use Hypervisor vendor in -machine pc, accel=tcg.
2012-10-12 19:56 [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID Don Slutz
` (14 preceding siblings ...)
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 15/17] target-i386: Use Hypervisor level in -machine pc, accel=tcg Don Slutz
@ 2012-10-12 19:56 ` Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 17/17] target-i386: target-i386: Add VMWare CPUID Timing information " Don Slutz
2012-10-29 20:39 ` [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID Marcelo Tosatti
17 siblings, 0 replies; 19+ messages in thread
From: Don Slutz @ 2012-10-12 19:56 UTC (permalink / raw)
To: qemu-devel, kvm, mtosatti, ehabkost, imammedo, avi, afaerber,
peter.maydell, anthony
Cc: Don Slutz
Part of "target-i386: Add way to expose VMWare CPUID"
Also known as Paravirtualization vendor.
This change 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
This is where the 0 is the same as 0x40000001 is defined.
VMware documention on CPUIDs (Mechanisms to determine if software is
running in a VMware virtual machine):
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1009458
Signed-off-by: Don Slutz <Don@CloudSwitch.com>
---
target-i386/cpu.c | 11 ++++++-----
1 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index 5b33b95..49e5db3 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -1769,8 +1769,9 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
}
} else if (index & 0x40000000) {
/* test if maximum index reached
- * but only if Hypervisor level is set */
- if (env->cpuid_hv_level_set) {
+ * but only if Hypervisor level is set or
+ * if Hypervisor vendor is set */
+ if (env->cpuid_hv_level_set || env->cpuid_hv_vendor_set) {
uint32_t real_level = env->cpuid_hv_level;
/* Handle Hypervisor CPUIDs.
@@ -1925,9 +1926,9 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
break;
case 0x40000000:
*eax = env->cpuid_hv_level;
- *ebx = 0;
- *ecx = 0;
- *edx = 0;
+ *ebx = env->cpuid_hv_vendor1;
+ *ecx = env->cpuid_hv_vendor2;
+ *edx = env->cpuid_hv_vendor3;
break;
case 0x40000001:
*eax = env->cpuid_kvm_features;
--
1.7.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [Qemu-devel] [PATCH v7 17/17] target-i386: target-i386: Add VMWare CPUID Timing information in -machine pc, accel=tcg
2012-10-12 19:56 [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID Don Slutz
` (15 preceding siblings ...)
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 16/17] target-i386: Use Hypervisor vendor " Don Slutz
@ 2012-10-12 19:56 ` Don Slutz
2012-10-29 20:39 ` [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID Marcelo Tosatti
17 siblings, 0 replies; 19+ messages in thread
From: Don Slutz @ 2012-10-12 19:56 UTC (permalink / raw)
To: qemu-devel, kvm, mtosatti, ehabkost, imammedo, avi, afaerber,
peter.maydell, anthony
Cc: Don Slutz
Part of "target-i386: Add way to expose VMWare CPUID"
This is EAX and EBX data for 0x40000010.
Add new #define CPUID_HV_TIMING_INFO for this.
The best documentation I have found is:
http://article.gmane.org/gmane.comp.emulators.kvm.devel/22643
And a test under ESXi 4.0 shows that VMware is setting this data.
Signed-off-by: Don Slutz <Don@CloudSwitch.com>
---
target-i386/cpu.c | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index 49e5db3..924db0d 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -1936,6 +1936,12 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
*ecx = 0;
*edx = 0;
break;
+ case 0x40000010:
+ *eax = env->tsc_khz;
+ *ebx = 1000000; /* apic_khz */
+ *ecx = 0;
+ *edx = 0;
+ break;
case 0x80000000:
*eax = env->cpuid_xlevel;
*ebx = env->cpuid_vendor1;
--
1.7.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID
2012-10-12 19:56 [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID Don Slutz
` (16 preceding siblings ...)
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 17/17] target-i386: target-i386: Add VMWare CPUID Timing information " Don Slutz
@ 2012-10-29 20:39 ` Marcelo Tosatti
17 siblings, 0 replies; 19+ messages in thread
From: Marcelo Tosatti @ 2012-10-29 20:39 UTC (permalink / raw)
To: Don Slutz
Cc: peter.maydell, ehabkost, kvm, qemu-devel, avi, anthony, imammedo,
afaerber
On Fri, Oct 12, 2012 at 03:56:05PM -0400, Don Slutz wrote:
> Also known as Paravirtualization CPUIDs.
>
> This is primarily done so that the guest will think it is running
> under vmware when hypervisor-vendor=vmware is specified as a
> property of a cpu.
>
> Patches 1 to 3 define new cpu properties.
> Patches 4 to 6 Add QOM access to the new properties.
> Patches 7 to 9 Add setting of these when cpu features hv_spinlocks,
> hv_relaxed, or hv_vapic are specified.
> Patches 10 to 12 Change kvm to use these.
> Patch 13 Add VMware timing info to kvm.
> Patch 14 Makes it easier to use hypervisor-vendor=vmware.
> Patches 15 to 17 Change tcg to use the new properties.
>
> This depends on:
>
> http://lists.gnu.org/archive/html/qemu-devel/2012-09/msg01400.html
>
> As far as I know it is #4. It depends on (1) and (2) and (3).
>
> This change 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
>
> VMware documention on CPUIDs (Mechanisms to determine if software is
> running in a VMware virtual machine):
> http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1009458
>
> Changes from v6 to v7:
> Subject changed from "Allow changing of Hypervisor CPUIDs." to "target-i386: Add way to expose VMWare CPUID"
> Split out 01/16 target-i386: Add missing kvm bits.
> It is no longer related to this patch set. Will be top posted as a seperate patch.
> Marcelo Tosatti:
> Better commit messages.
> Reorder patches.
>
>
> Changes from v5 to v6:
> Split out 01/17: target-i386: Allow tsc-frequency to be larger then 2.147G
> It has been accepted as a trivial patch:
> http://lists.gnu.org/archive/html/qemu-devel/2012-09/msg03959.html
> Blue Swirl:
> Fix 2 checkpatch.pl "WARNING: line over 80 characters".
>
> Changes from v4 to v5:
> Undo kvm_clock2 change.
> Add cpuid_hv_level_set; cpuid_hv_level == 0 is now valid.
> Add cpuid_hv_vendor_set; the null string is now valid.
> Handle kvm and cpuid_hv_level == 0.
> hypervisor-vendor=kvm,hypervisor-level=0 and hypervisor-level=0,hypervisor-vendor=kvm
> now do the same thing.
>
> Changes from v3 to v4:
> Added CPUID_HV_LEVEL_HYPERV, CPUID_HV_LEVEL_KVM.
> Added CPUID_HV_VENDOR_HYPERV.
> Added hyperv as known hypservisor-vendor.
> Allow hypervisor-level to be 0.
>
> Changes from v2 to v3:
> Clean post to qemu-devel.
>
> Changes from v1 to v2:
>
> 1) Added 1/4 from http://lists.gnu.org/archive/html/qemu-devel/2012-08/msg05153.html
>
> Because Fred is changing jobs and so will not be pushing to get
> this in. It needed to be rebased, And I needed it to complete the
> testing of this change.
>
> 2) Added 2/4 because of the re-work I needed a way to clear all KVM bits,
>
> 3) The rework of v1. Make it fit into the object model re-work of cpu.c for x86.
>
> 4) Added 3/4 -- The split out of the code that is not needed for accel=kvm.
>
> Changes from v2 to v3:
>
> Marcelo Tosatti:
> Its one big patch, better split in logically correlated patches
> (with better changelog). This would help reviewers.
>
> So split 3 and 4 into 3 to 17. More info in change log.
> No code change.
>
> Don Slutz (17):
> target-i386: Add Hypervisor level.
> target-i386: Add Hypervisor vendor.
> target-i386: Add Hypervisor features.
> target-i386: Add cpu object access routines for Hypervisor level.
> target-i386: Add cpu object access routines for Hypervisor vendor.
> target-i386: Add cpu object access routines for Hypervisor features.
> target-i386: Add x86_set_hyperv.
> target-i386: Use x86_set_hyperv to set hypervisor vendor.
> target-i386: Use x86_set_hyperv to set hypervisor features.
> target-i386: Use Hypervisor level in -machine pc,accel=kvm.
> target-i386: Use Hypervisor vendor in -machine pc,accel=kvm.
> target-i386: Use Hypervisor features in -machine pc,accel=kvm.
> target-i386: Add VMWare CPUID Timing information in -machine
> pc,accel=kvm.
> target-i386: Add vmare as a known name to Hypervisor vendor.
> target-i386: Use Hypervisor level in -machine pc,accel=tcg.
> target-i386: Use Hypervisor vendor in -machine pc,accel=tcg.
> target-i386: target-i386: Add VMWare CPUID Timing information in
> -machine pc,accel=tcg
>
> target-i386/cpu.c | 205 +++++++++++++++++++++++++++++++++++++++++++++++++++++
> target-i386/cpu.h | 29 ++++++++
> target-i386/kvm.c | 69 +++++++++++++++----
> 3 files changed, 290 insertions(+), 13 deletions(-)
>
Looks good overall.
^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2012-10-29 20:39 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-12 19:56 [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 01/17] target-i386: Add Hypervisor level Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 02/17] target-i386: Add Hypervisor vendor Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 03/17] target-i386: Add Hypervisor features Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 04/17] target-i386: Add cpu object access routines for Hypervisor level Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 05/17] target-i386: Add cpu object access routines for Hypervisor vendor Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 06/17] target-i386: Add cpu object access routines for Hypervisor features Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 07/17] target-i386: Add x86_set_hyperv Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 08/17] target-i386: Use x86_set_hyperv to set hypervisor vendor Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 09/17] target-i386: Use x86_set_hyperv to set hypervisor features Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 10/17] target-i386: Use Hypervisor level in -machine pc, accel=kvm Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 11/17] target-i386: Use Hypervisor vendor " Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 12/17] target-i386: Use Hypervisor features " Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 13/17] target-i386: Add VMWare CPUID Timing information " Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 14/17] target-i386: Add vmare as a known name to Hypervisor vendor Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 15/17] target-i386: Use Hypervisor level in -machine pc, accel=tcg Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 16/17] target-i386: Use Hypervisor vendor " Don Slutz
2012-10-12 19:56 ` [Qemu-devel] [PATCH v7 17/17] target-i386: target-i386: Add VMWare CPUID Timing information " Don Slutz
2012-10-29 20:39 ` [Qemu-devel] [PATCH v7 00/17] target-i386: Add way to expose VMWare CPUID Marcelo Tosatti
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).