summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGleb Natapov <gleb@redhat.com>2012-01-24 15:06:05 +0200
committerAvi Kivity <avi@redhat.com>2012-03-05 14:57:30 +0200
commit242ec97c358256ad6e62dab869f63a03cd244122 (patch)
tree58dd14b9972084f95a31ea3a2fa51e226b8bef7d
parentd2a1b483a4a3f4bbb5fec1877f716c15ac7fa405 (diff)
downloadlinux-242ec97c358256ad6e62dab869f63a03cd244122.tar.gz
linux-242ec97c358256ad6e62dab869f63a03cd244122.tar.bz2
linux-242ec97c358256ad6e62dab869f63a03cd244122.zip
KVM: x86: reset edge sense circuit of i8259 on init
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>
-rw-r--r--arch/x86/kvm/i8259.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/x86/kvm/i8259.c b/arch/x86/kvm/i8259.c
index b6a73537e1ef..81cf4fa4a2be 100644
--- a/arch/x86/kvm/i8259.c
+++ b/arch/x86/kvm/i8259.c
@@ -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;