On Thu, 23 Jan 2020 14:50:10 +0100 Paolo Bonzini <pbonz...@redhat.com> wrote:
> KVM can return the host microcode revision as a feature MSR. > Use it as the default value for -cpu host. > > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > Message-Id: <1579544504-3616-4-git-send-email-pbonz...@redhat.com> > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > --- > target/i386/cpu.c | 4 ++++ > target/i386/kvm.c | 5 +++++ > 2 files changed, 9 insertions(+) Hey Paolo, My Windows 10 VM boot loops with this :-\ It seems to be related to the CPU model. Now fails (host-passthrough): -cpu host,hv-time,hv-relaxed,hv-vapic,hv-spinlocks=0x1fff,hv-vendor-id=KeenlyKVM,kvm=off Works (host-model): -cpu IvyBridge-IBRS,ss=on,vmx=on,pcid=on,hypervisor=on,arat=on,tsc-adjust=on,umip=on,md-clear=on,stibp=on,arch-capabilities=on,ssbd=on,xsaveopt=on,skip-l1dfl-vmentry=on,hv-time,hv-relaxed,hv-vapic,hv-spinlocks=0x1fff,hv-vendor-id=KeenlyKVM,kvm=off Thanks, Alex > diff --git a/target/i386/cpu.c b/target/i386/cpu.c > index 790254e..ffe5de0 100644 > --- a/target/i386/cpu.c > +++ b/target/i386/cpu.c > @@ -6416,6 +6416,10 @@ static void x86_cpu_realizefn(DeviceState *dev, Error > **errp) > &cpu->mwait.ecx, &cpu->mwait.edx); > env->features[FEAT_1_ECX] |= CPUID_EXT_MONITOR; > } > + if (kvm_enabled() && cpu->ucode_rev == 0) { > + cpu->ucode_rev = kvm_arch_get_supported_msr_feature(kvm_state, > + > MSR_IA32_UCODE_REV); > + } > } > > if (cpu->ucode_rev == 0) { > diff --git a/target/i386/kvm.c b/target/i386/kvm.c > index f6dd6b7..1b67090 100644 > --- a/target/i386/kvm.c > +++ b/target/i386/kvm.c > @@ -2696,6 +2696,11 @@ static void kvm_init_msrs(X86CPU *cpu) > env->features[FEAT_CORE_CAPABILITY]); > } > > + if (kvm_arch_get_supported_msr_feature(kvm_state, > + MSR_IA32_UCODE_REV)) { > + kvm_msr_entry_add(cpu, MSR_IA32_UCODE_REV, cpu->ucode_rev); > + } > + > /* > * Older kernels do not include VMX MSRs in KVM_GET_MSR_INDEX_LIST, but > * all kernels with MSR features should have them.