|
|
9bac43 |
From b2f9f4fcaad9c64f4551ab1dbe9e474c3dc6b2b4 Mon Sep 17 00:00:00 2001
|
|
|
9bac43 |
From: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
9bac43 |
Date: Mon, 27 Nov 2017 12:59:13 +0100
|
|
|
9bac43 |
Subject: [PATCH 10/15] i386/cpu/hyperv: support over 64 vcpus for windows
|
|
|
9bac43 |
guests
|
|
|
9bac43 |
|
|
|
9bac43 |
RH-Author: vrozenfe <vrozenfe@redhat.com>
|
|
|
9bac43 |
Message-id: <1511256034-28105-1-git-send-email-vrozenfe@redhat.com>
|
|
|
9bac43 |
Patchwork-id: 77769
|
|
|
9bac43 |
O-Subject: [RHEL-7.5 qemu-kvm-rhev PATCH v2] i386/cpu/hyperv: support over 64 vcpus for windows guests
|
|
|
9bac43 |
Bugzilla: 1451959
|
|
|
9bac43 |
RH-Acked-by: Eduardo Habkost <ehabkost@redhat.com>
|
|
|
9bac43 |
RH-Acked-by: Thomas Huth <thuth@redhat.com>
|
|
|
9bac43 |
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
9bac43 |
|
|
|
9bac43 |
From: Gonglei <arei.gonglei@huawei.com>
|
|
|
9bac43 |
|
|
|
9bac43 |
Upstream-status: 6c69dfb67e84747cf071958594d939e845dfcc0c
|
|
|
9bac43 |
|
|
|
9bac43 |
Starting with Windows Server 2012 and Windows 8, if
|
|
|
9bac43 |
CPUID.40000005.EAX contains a value of -1, Windows assumes specific
|
|
|
9bac43 |
limit to the number of VPs. In this case, Windows Server 2012
|
|
|
9bac43 |
guest VMs may use more than 64 VPs, up to the maximum supported
|
|
|
9bac43 |
number of processors applicable to the specific Windows
|
|
|
9bac43 |
version being used.
|
|
|
9bac43 |
|
|
|
9bac43 |
https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/reference/tlfs
|
|
|
9bac43 |
|
|
|
9bac43 |
For compatibility, Let's introduce a new property for X86CPU,
|
|
|
9bac43 |
named "x-hv-max-vps" as Eduardo's suggestion, and set it
|
|
|
9bac43 |
to 0x40 before machine 2.10.
|
|
|
9bac43 |
|
|
|
9bac43 |
(The "x-" prefix indicates that the property is not supposed to
|
|
|
9bac43 |
be a stable user interface.)
|
|
|
9bac43 |
|
|
|
9bac43 |
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
|
|
|
9bac43 |
Message-Id: <1505143227-14324-1-git-send-email-arei.gonglei@huawei.com>
|
|
|
9bac43 |
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
9bac43 |
Signed-off-by: Vadim Rozenfeld <vrozenfe@redhat.com>
|
|
|
9bac43 |
---
|
|
|
9bac43 |
include/hw/i386/pc.h | 5 +++++
|
|
|
9bac43 |
target/i386/cpu.c | 13 +++++++++++++
|
|
|
9bac43 |
target/i386/cpu.h | 2 ++
|
|
|
9bac43 |
target/i386/kvm.c | 3 ++-
|
|
|
9bac43 |
4 files changed, 22 insertions(+), 1 deletion(-)
|
|
|
9bac43 |
|
|
|
9bac43 |
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
|
|
|
9bac43 |
index 7b46121..f9b7998 100644
|
|
|
9bac43 |
--- a/include/hw/i386/pc.h
|
|
|
9bac43 |
+++ b/include/hw/i386/pc.h
|
|
|
9bac43 |
@@ -1089,6 +1089,11 @@ extern void igd_passthrough_isa_bridge_create(PCIBus *bus, uint16_t gpu_dev_id);
|
|
|
9bac43 |
.driver = TYPE_X86_CPU,\
|
|
|
9bac43 |
.property = "kvm-no-smi-migration",\
|
|
|
9bac43 |
.value = "on",\
|
|
|
9bac43 |
+ },\
|
|
|
9bac43 |
+ { /* PC_RHEL7_4_COMPAT from PC_COMPAT_2_10 */ \
|
|
|
9bac43 |
+ .driver = TYPE_X86_CPU,\
|
|
|
9bac43 |
+ .property = "x-hv-max-vps",\
|
|
|
9bac43 |
+ .value = "0x40",\
|
|
|
9bac43 |
},
|
|
|
9bac43 |
|
|
|
9bac43 |
#define PC_RHEL7_2_COMPAT \
|
|
|
9bac43 |
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
|
|
|
9bac43 |
index ca95336..c2dee60 100644
|
|
|
9bac43 |
--- a/target/i386/cpu.c
|
|
|
9bac43 |
+++ b/target/i386/cpu.c
|
|
|
9bac43 |
@@ -4179,6 +4179,19 @@ static Property x86_cpu_properties[] = {
|
|
|
9bac43 |
false),
|
|
|
9bac43 |
DEFINE_PROP_BOOL("vmware-cpuid-freq", X86CPU, vmware_cpuid_freq, true),
|
|
|
9bac43 |
DEFINE_PROP_BOOL("tcg-cpuid", X86CPU, expose_tcg, true),
|
|
|
9bac43 |
+ /*
|
|
|
9bac43 |
+ * From "Requirements for Implementing the Microsoft
|
|
|
9bac43 |
+ * Hypervisor Interface":
|
|
|
9bac43 |
+ * https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/reference/tlfs
|
|
|
9bac43 |
+ *
|
|
|
9bac43 |
+ * "Starting with Windows Server 2012 and Windows 8, if
|
|
|
9bac43 |
+ * CPUID.40000005.EAX contains a value of -1, Windows assumes that
|
|
|
9bac43 |
+ * the hypervisor imposes no specific limit to the number of VPs.
|
|
|
9bac43 |
+ * In this case, Windows Server 2012 guest VMs may use more than
|
|
|
9bac43 |
+ * 64 VPs, up to the maximum supported number of processors applicable
|
|
|
9bac43 |
+ * to the specific Windows version being used."
|
|
|
9bac43 |
+ */
|
|
|
9bac43 |
+ DEFINE_PROP_INT32("x-hv-max-vps", X86CPU, hv_max_vps, -1),
|
|
|
9bac43 |
DEFINE_PROP_END_OF_LIST()
|
|
|
9bac43 |
};
|
|
|
9bac43 |
|
|
|
9bac43 |
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
|
|
|
9bac43 |
index 0518673..fd73888 100644
|
|
|
9bac43 |
--- a/target/i386/cpu.h
|
|
|
9bac43 |
+++ b/target/i386/cpu.h
|
|
|
9bac43 |
@@ -1282,6 +1282,8 @@ struct X86CPU {
|
|
|
9bac43 |
int32_t socket_id;
|
|
|
9bac43 |
int32_t core_id;
|
|
|
9bac43 |
int32_t thread_id;
|
|
|
9bac43 |
+
|
|
|
9bac43 |
+ int32_t hv_max_vps;
|
|
|
9bac43 |
};
|
|
|
9bac43 |
|
|
|
9bac43 |
static inline X86CPU *x86_env_get_cpu(CPUX86State *env)
|
|
|
9bac43 |
diff --git a/target/i386/kvm.c b/target/i386/kvm.c
|
|
|
9bac43 |
index 739334a..ee4e91f 100644
|
|
|
9bac43 |
--- a/target/i386/kvm.c
|
|
|
9bac43 |
+++ b/target/i386/kvm.c
|
|
|
9bac43 |
@@ -786,7 +786,8 @@ int kvm_arch_init_vcpu(CPUState *cs)
|
|
|
9bac43 |
|
|
|
9bac43 |
c = &cpuid_data.entries[cpuid_i++];
|
|
|
9bac43 |
c->function = HYPERV_CPUID_IMPLEMENT_LIMITS;
|
|
|
9bac43 |
- c->eax = 0x40;
|
|
|
9bac43 |
+
|
|
|
9bac43 |
+ c->eax = cpu->hv_max_vps;
|
|
|
9bac43 |
c->ebx = 0x40;
|
|
|
9bac43 |
|
|
|
9bac43 |
kvm_base = KVM_CPUID_SIGNATURE_NEXT;
|
|
|
9bac43 |
--
|
|
|
9bac43 |
1.8.3.1
|
|
|
9bac43 |
|