Message ID | 1456132382-25327-1-git-send-email-den@openvz.org |
---|---|
State | New |
Headers | show |
On 02/22/2016 12:13 PM, Denis V. Lunev wrote: > 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> > --- > Changes from v2: > - bit set unconditionally upon the discussion > > Changes from v1: > - dropped command line option and set the bit if HyperV is enabled and > hot_add_cpu callback is present > > target-i386/kvm.c | 1 + > 1 file changed, 1 insertion(+) > > 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; > } ping
On Tue, Mar 01, 2016 at 04:45:02PM +0300, Denis V. Lunev wrote: > On 02/22/2016 12:13 PM, Denis V. Lunev wrote: > >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> > >--- > >Changes from v2: > >- bit set unconditionally upon the discussion > > > >Changes from v1: > >- dropped command line option and set the bit if HyperV is enabled and > > hot_add_cpu callback is present > > > > target-i386/kvm.c | 1 + > > 1 file changed, 1 insertion(+) > > > >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; > > } > ping Reviewed-by: Eduardo Habkost <ehabkost@redhat.com> Applied to x86 branch. Thanks!
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; }