Cool! Thanks for correction, yeah, APICV_INHIBIT_REASON_HYPERV setting is per-VM while synic is per-vCPU. Since the machine with AVIC is not in my hands today, I will test it hopefully by end of this week:) BR, Kechen >-----Original Message----- >From: Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> >Sent: Thursday, February 4, 2021 7:19 AM >To: Paolo Bonzini <pbonzini@xxxxxxxxxx>; Kechen Lu <kechenl@xxxxxxxxxx> >Cc: suravee.suthikulpanit@xxxxxxx; Somdutta Roy <somduttar@xxxxxxxxxx>; >kvm@xxxxxxxxxxxxxxx; qemu-discuss@xxxxxxxxxx >Subject: Re: Optimized clocksource with AMD AVIC enabled for Windows guest > >External email: Use caution opening links or attachments > > >Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> writes: > >> + >> + auto_eoi_new = bitmap_weight(synic->auto_eoi_bitmap, 256); >> + >> + /* Hyper-V SynIC auto EOI SINT's are not compatible with APICV */ >> + if (!auto_eoi_old && auto_eoi_new) { >> + if (atomic_inc_return(&hv->synic_auto_eoi_used) == 1) >> + kvm_request_apicv_update(vcpu->kvm, false, >> + APICV_INHIBIT_REASON_HYPERV); >> + } else if (!auto_eoi_old && auto_eoi_new) { > >Sigh, this 'else' should be > >} else if (!auto_eoi_new && auto_eoi_old) { > >... > >> + if (atomic_dec_return(&hv->synic_auto_eoi_used) == 0) >> + kvm_request_apicv_update(vcpu->kvm, true, >> + APICV_INHIBIT_REASON_HYPERV); >> + } >> } >> >> static int synic_set_sint(struct kvm_vcpu_hv_synic *synic, int sint, >> @@ -903,12 +923,6 @@ int kvm_hv_activate_synic(struct kvm_vcpu *vcpu, >> bool dont_zero_synic_pages) { >> struct kvm_vcpu_hv_synic *synic = vcpu_to_synic(vcpu); >> >> - /* >> - * Hyper-V SynIC auto EOI SINT's are >> - * not compatible with APICV, so request >> - * to deactivate APICV permanently. >> - */ >> - kvm_request_apicv_update(vcpu->kvm, false, >APICV_INHIBIT_REASON_HYPERV); >> synic->active = true; >> synic->dont_zero_synic_pages = dont_zero_synic_pages; >> synic->control = HV_SYNIC_CONTROL_ENABLE; > >-- >Vitaly