[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [HVM] Fix interrupt routing
If HVM guest Fedora 7 uses PIT and lapic timer, it can't boot or install. The cause is: At some point, Fedora 7 disables PIT interrupt by "vioapic.redirtbl[2].mask = 1, vpic.imr.bit0 = 0 (unmasked), vlapic.lvt[LINT0].mask = 1", and enables vlapic timer interrupt generating; In vmx_intr_assist() -> pt_update_irq(), we always choose IRQ0 rather than vlapic timer interrupt, because: 1) is_isa_irq_masked(v, 0) returns false due to vpic.imr.bit0 = 0; 2) the PIT's pt->last_plt_gtime is less than vlapic timer's -- at least I can see this on my hosts; However, in pt_update_irq() -> hvm_isa_irq_assert() -> vioapic_irq_positive_edge(), we do nothing but return at once because vioapic.redirtbl[2].mask = 1; Next, in vmx_intr_assist() -> hvm_vcpu_has_pending_irq(), we can't inject vPIT interrupt because vlapic_accept_pic_intr() return false (because vlapic.lvt[LINT0].mask=1, and vlapic_hw_disabled() returns false), so vlapic_has_pending_irq() returns -1. Eventually, the pending PIT interrupts prevent the injection of lapic timer interrupts! The patch fixes the issue by rectifying is_isa_irq_masked(). Signed-off-by: Dexuan Cui <dexuan.cui@xxxxxxxxx> Attachment:
fix_intr_routing.patch _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |