On 04/03/2016 21:46, Suravee Suthikulpanit wrote: > + > + /* Do not do cr8 intercept if AVIC is enabled. */ No need for this comment. > + svm_x86_ops.update_cr8_intercept = NULL; > } else { > svm_x86_ops.deliver_posted_interrupt = NULL; > } > @@ -1116,7 +1119,8 @@ static void init_vmcb(struct vcpu_svm *svm) > set_cr_intercept(svm, INTERCEPT_CR0_WRITE); > set_cr_intercept(svm, INTERCEPT_CR3_WRITE); > set_cr_intercept(svm, INTERCEPT_CR4_WRITE); > - set_cr_intercept(svm, INTERCEPT_CR8_WRITE); > + if (!avic) Remember that AVIC enabled/disabled must be refreshed when the .refresh_apicv_exec_ctrl callback is invoked, so it is not enough to use the global variable. Paolo > + set_cr_intercept(svm, INTERCEPT_CR8_WRITE); > > set_dr_intercepts(svm); > > @@ -4277,7 +4281,8 @@ static void update_cr8_intercept(struct kvm_vcpu *vcpu, int tpr, int irr) > { > struct vcpu_svm *svm = to_svm(vcpu); > > - if (is_guest_mode(vcpu) && (vcpu->arch.hflags & HF_VINTR_MASK)) > + if ((is_guest_mode(vcpu) && (vcpu->arch.hflags & HF_VINTR_MASK)) || > + avic) > return; > > clr_cr_intercept(svm, INTERCEPT_CR8_WRITE); > @@ -4472,8 +4477,10 @@ static inline void sync_lapic_to_cr8(struct kvm_vcpu *vcpu) > if (is_guest_mode(vcpu) && (vcpu->arch.hflags & HF_VINTR_MASK)) > return; > > - cr8 = kvm_get_cr8(vcpu); > - svm->vmcb->control.v_tpr = cr8 & V_TPR_MASK; > + svm->vmcb->control.v_tpr = cr8 = kvm_get_cr8(vcpu) & V_TPR_MASK; > + > + if (avic) > + *(avic_get_bk_page_entry(svm, APIC_TASKPRI)) = (u32)cr8 << 4; -- 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