KVM: x86: reset edge sense circuit of i8259 on init
authorGleb Natapov <gleb@redhat.com>
Tue, 24 Jan 2012 13:06:05 +0000 (15:06 +0200)
committerAvi Kivity <avi@redhat.com>
Mon, 5 Mar 2012 12:57:30 +0000 (14:57 +0200)
The spec says that during initialization "The edge sense circuit is
reset which means that following initialization an interrupt request
(IR) input must make a low-to-high transition to generate an interrupt",
but currently if edge triggered interrupt is in IRR it is delivered
after i8259 initialization.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
arch/x86/kvm/i8259.c

index b6a73537e1efd2270a00d52612342ed168081b55..81cf4fa4a2bea8f35eeb8a68c30bdb3b18564271 100644 (file)
@@ -307,6 +307,7 @@ static void pic_ioport_write(void *opaque, u32 addr, u32 val)
                if (val & 0x10) {
                        s->init4 = val & 1;
                        s->last_irr = 0;
+                       s->irr &= s->elcr;
                        s->imr = 0;
                        s->priority_add = 0;
                        s->special_mask = 0;