diff mbox

[PULL,1/2] hyperv: cpu hotplug fix with HyperV enabled

Message ID 1457722074-25406-2-git-send-email-ehabkost@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Eduardo Habkost March 11, 2016, 6:47 p.m. UTC
From: "Denis V. Lunev" <den@openvz.org>

With Hyper-V enabled CPU hotplug stops working. The CPU appears
in device manager on Windows but does not appear in peformance
monitor and control panel.

The root of the problem is the following. Windows checks
HV_X64_CPU_DYNAMIC_PARTITIONING_AVAILABLE bit in CPUID. The
presence of this bit is enough to cure the situation.

The bit should be set when CPU hotplug is allowed for HyperV VM.
The check that hot_add_cpu callback is defined is enough from the
protocol point of view. Though this callback is defined almost
always thus there is no need to export that knowledge in the
other way.

Signed-off-by: Denis V. Lunev <den@openvz.org>
Reviewed-by: Roman Kagan <rkagan@virtuozzo.com>
CC: Paolo Bonzini <pbonzini@redhat.com>
CC: Richard Henderson <rth@twiddle.net>
CC: Eduardo Habkost <ehabkost@redhat.com>
CC: "Andreas Färber" <afaerber@suse.de>
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 roms/SLOF         | 2 +-
 roms/openbios     | 2 +-
 target-i386/kvm.c | 1 +
 3 files changed, 3 insertions(+), 2 deletions(-)
diff mbox

Patch

diff --git a/roms/SLOF b/roms/SLOF
index e3d0572..b4c9380 160000
--- a/roms/SLOF
+++ b/roms/SLOF
@@ -1 +1 @@ 
-Subproject commit e3d05727a074619fc12d0a67f05cf2c42c875cce
+Subproject commit b4c93802a5b2c72f096649c497ec9ff5708e4456
diff --git a/roms/openbios b/roms/openbios
index 0dbda5d..bd95e4c 160000
--- a/roms/openbios
+++ b/roms/openbios
@@ -1 +1 @@ 
-Subproject commit 0dbda5d935f95391d16431cd3c079fbf53d668df
+Subproject commit bd95e4c193905d5ed867e96f1a720ce4cb53b59f
diff --git a/target-i386/kvm.c b/target-i386/kvm.c
index 7974acb..08d6444 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -639,6 +639,7 @@  int kvm_arch_init_vcpu(CPUState *cs)
         if (cpu->hyperv_crash && has_msr_hv_crash) {
             c->edx |= HV_X64_GUEST_CRASH_MSR_AVAILABLE;
         }
+        c->edx |= HV_X64_CPU_DYNAMIC_PARTITIONING_AVAILABLE;
         if (cpu->hyperv_reset && has_msr_hv_reset) {
             c->eax |= HV_X64_MSR_RESET_AVAILABLE;
         }