On Thu, 2020-11-26 at 19:00 +0100, Paolo Bonzini wrote: > static int kvm_vcpu_ready_for_interrupt_injection(struct kvm_vcpu > *vcpu) > { > + WARN_ON(pic_in_kernel(vcpu->kvm)); > + But what if I *want* to inject Xen event channel interrupts while the actual PIC is in the kernel? :) Not that I'll have to once the kernel is fixed and I can enable my shiny new userspace PIC/PIT/IOAPIC code, I suppose.... > return kvm_arch_interrupt_allowed(vcpu) && > - !kvm_cpu_has_interrupt(vcpu) && > !kvm_event_needs_reinjection(vcpu) && > - kvm_cpu_accept_dm_intr(vcpu); > + (!lapic_in_kernel(vcpu) > + || (kvm_apic_accept_pic_intr(vcpu) > + && !pending_userspace_extint(v)); > } > I'll give this version a spin... static int kvm_vcpu_ready_for_interrupt_injection(struct kvm_vcpu *vcpu) { return kvm_arch_interrupt_allowed(vcpu) && !kvm_event_needs_reinjection(vcpu) && (!lapic_in_kernel(vcpu) || (kvm_apic_accept_pic_intr(vcpu) && vcpu->arch.pending_external_vector == -1)); }