On 25/02/20 14:45, Vitaly Kuznetsov wrote: >> int ret; >> + struct kvm_vcpu *vcpu = &svm->vcpu; >> >> - if (!kvm_vcpu_apicv_active(&svm->vcpu)) >> + if (!avic || !irqchip_in_kernel(vcpu->kvm)) >> return 0; >> >> ret = avic_init_backing_page(&svm->vcpu); > Out of pure curiosity, > > when irqchip_in_kernel() is false, can we still get to .update_pi_irte() > (svm_update_pi_irte()) -> get_pi_vcpu_info() -> "vcpu_info->pi_desc_addr > = __sme_set(page_to_phys((*svm)->avic_backing_page));" -> crash! or is > there anything which make this impossible? No, because kvm_arch_irqfd_allowed returns false so you cannot create any irqfd (svm_update_pi_irte is called when virt/lib/irqbypass.c finds a match between two eventfds in KVM and VFIO). Paolo