On 03/11/2015 19:34, Laszlo Ersek wrote: > Commit b18d5431acc7 ("KVM: x86: fix CR0.CD virtualization") was > technically correct, but it broke OVMF guests by slowing down various > parts of the firmware. > > Commit fb279950ba02 ("KVM: vmx: obey KVM_QUIRK_CD_NW_CLEARED") quirked the > first function modified by b18d5431acc7, vmx_get_mt_mask(), for OVMF's > sake. This restored the speed of the OVMF code that runs before > PlatformPei (including the memory intensive LZMA decompression in SEC). > > This patch extends the quirk to the second function modified by > b18d5431acc7, kvm_set_cr0(). It eliminates the intrusive slowdown that > hits the EFI_MP_SERVICES_PROTOCOL implementation of edk2's > UefiCpuPkg/CpuDxe -- which is built into OVMF --, when CpuDxe starts up > all APs at once for initialization, in order to count them. > > We also carry over the kvm_arch_has_noncoherent_dma() sub-condition from > the other half of the original commit b18d5431acc7. > > Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx> > Cc: Jordan Justen <jordan.l.justen@xxxxxxxxx> > Cc: Janusz Mocek <januszmk6@xxxxxxxxx> > Cc: Alex Williamson <alex.williamson@xxxxxxxxxx> > Cc: Xiao Guangrong <guangrong.xiao@xxxxxxxxxxxxxxx> > Signed-off-by: Laszlo Ersek <lersek@xxxxxxxxxx> > --- > arch/x86/kvm/x86.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index a24bae0..30723a4 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -625,7 +625,9 @@ int kvm_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0) > if ((cr0 ^ old_cr0) & update_bits) > kvm_mmu_reset_context(vcpu); > > - if ((cr0 ^ old_cr0) & X86_CR0_CD) > + if (((cr0 ^ old_cr0) & X86_CR0_CD) && > + kvm_arch_has_noncoherent_dma(vcpu->kvm) && > + !kvm_check_has_quirk(vcpu->kvm, KVM_X86_QUIRK_CD_NW_CLEARED)) > kvm_zap_gfn_range(vcpu->kvm, 0, ~0ULL); > > return 0; > Applied, thanks. Paolo -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html