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>
fix_intr_routing.patch
Description: fix_intr_routing.patch
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|