On Tue, Dec 22, 2009 at 09:15:57AM +0200, Gleb Natapov wrote:
> On Mon, Dec 21, 2009 at 10:21:14PM +0000, Mikolaj Kucharski wrote:
> > On Mon, Dec 21, 2009 at 09:22:52AM +0200, Gleb Natapov wrote:
> > > > I have personal interest in resolving RedHat's bz #508801, unfortunately
> > > > I cannot do that myself, so I wanted to ask on the list for help, but 
> > > > now
> > > > I'm confused where should I go.
> > > > 
> > > Can you try kvm modules from latest kvm.git please? It looks like 
> > > emulation of
> > > "push %ds" fails and it was added after 2.6.32.
> > 
> > Having following GIT repositories:
> > 
> > git://git.kernel.org/pub/scm/virt/kvm/kvm.git
> > git://git.kernel.org/pub/scm/virt/kvm/kvm-kmod.git
> > 
> > Which one I should use to build my modules from? I would like to keep my
> > system (Fedora 12) consistent and I don't want to have any parts built
> > outside of rpm. I would like to contribute/help for RedHat's bz #508801
> > resolution, but I need some directions.
> > 
> > Is kvm.git whole Linux kernel?
> > 
> Don't bother, I already tested upstream with OpenBSD and, as Avi said,
> the problem is somewhere else.
> 
For some strange reason openbsd configures gsi 4 (com0) and gsi 12
(i8042) to be level triggered active high in ioapic. That causes KVM
to send endless stream of interrupts into the guest, so guest's stack
overflows into framebuffer area. At this point KVM start to emulate
instructions and fails. I don't know why openbsd configures those
interrupts incorrectly. It also ignores my attempts to override interrupt
polarity/type with ACPI tables. Somebody knowledgeable in openbsd should
look into why it configures interrupt controller incorrectly. If I
override wrong settings inside KVM like in the patch below openbsd boots,
but I doubt com port is usable. 


diff --git a/virt/kvm/ioapic.c b/virt/kvm/ioapic.c
index 38a2d20..fc37eac 100644
--- a/virt/kvm/ioapic.c
+++ b/virt/kvm/ioapic.c
@@ -121,6 +121,8 @@ static void ioapic_write_indirect(struct kvm_ioapic 
*ioapic, u32 val)
        default:
                index = (ioapic->ioregsel - 0x10) >> 1;
 
+               if (!(ioapic->ioregsel & 1))
+                       val &= ~0xa000;
                ioapic_debug("change redir index %x val %x\n", index, val);
                if (index >= IOAPIC_NUM_PINS)
                        return;
--
                        Gleb.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to