2016-04-07 03:20-0500, Suravee Suthikulpanit: > When enable AVIC: > * Do not intercept CR8 since this should be handled by AVIC HW. > * Also, we don't need to sync cr8/V_TPR and APIC backing page. > > Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@xxxxxxx> > --- > diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c > @@ -4069,7 +4070,8 @@ static void update_cr8_intercept(struct kvm_vcpu *vcpu, int tpr, int irr) > - if (is_guest_mode(vcpu) && (vcpu->arch.hflags & HF_VINTR_MASK)) > + if ((is_guest_mode(vcpu) && (vcpu->arch.hflags & HF_VINTR_MASK)) || > + svm_vcpu_avic_enabled(svm)) > @@ -4255,14 +4257,15 @@ static inline void sync_cr8_to_lapic(struct kvm_vcpu *vcpu) > static inline void sync_lapic_to_cr8(struct kvm_vcpu *vcpu) > { > struct vcpu_svm *svm = to_svm(vcpu); > - u64 cr8; > + struct kvm_lapic *apic = vcpu->arch.apic; > > - if (is_guest_mode(vcpu) && (vcpu->arch.hflags & HF_VINTR_MASK)) > + if (is_guest_mode(vcpu) && (vcpu->arch.hflags & HF_VINTR_MASK) && Should be "||" at the end of line, like above. (Naming this condition would reduce the chance of errors.) > + svm_vcpu_avic_enabled(svm)) > return; > > - cr8 = kvm_get_cr8(vcpu); > svm->vmcb->control.int_ctl &= ~V_TPR_MASK; > - svm->vmcb->control.int_ctl |= cr8 & V_TPR_MASK; > + svm->vmcb->control.int_ctl |= (kvm_apic_get_reg(apic, > + APIC_TASKPRI) >> 4) & V_TPR_MASK; kvm_get_cr8 takes a different path without lapic_in_kernel (when avic cannot be enabled), so the original code was better. -- 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