From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:33914) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RpiJQ-0001wl-FQ for qemu-devel@nongnu.org; Tue, 24 Jan 2012 10:29:38 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RpiJP-00012F-El for qemu-devel@nongnu.org; Tue, 24 Jan 2012 10:29:32 -0500 Received: from goliath.siemens.de ([192.35.17.28]:20427) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RpiJP-000129-3G for qemu-devel@nongnu.org; Tue, 24 Jan 2012 10:29:31 -0500 Message-ID: <4F1ECE59.5020803@siemens.com> Date: Tue, 24 Jan 2012 16:29:29 +0100 From: Jan Kiszka MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] [PATCH] i8259: Do not clear level-triggered lines in IRR on init List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel , Anthony Liguori Cc: Gleb Natapov When an input line is handled as level-triggered, it will immediately raise an IRQ on the output of a PIC again that goes through an init reset. So only clear the edge-triggered inputs from IRR in that scenario. Signed-off-by: Jan Kiszka --- hw/i8259.c | 2 +- hw/i8259_common.c | 2 +- hw/kvm/i8259.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hw/i8259.c b/hw/i8259.c index 3005ce2..264bfc6 100644 --- a/hw/i8259.c +++ b/hw/i8259.c @@ -231,8 +231,8 @@ static void pic_reset(DeviceState *dev) { PICCommonState *s = DO_UPCAST(PICCommonState, dev.qdev, dev); - pic_init_reset(s); s->elcr = 0; + pic_init_reset(s); } static void pic_ioport_write(void *opaque, target_phys_addr_t addr64, diff --git a/hw/i8259_common.c b/hw/i8259_common.c index e515876..37aeee2 100644 --- a/hw/i8259_common.c +++ b/hw/i8259_common.c @@ -28,7 +28,7 @@ void pic_reset_common(PICCommonState *s) { s->last_irr = 0; - s->irr = 0; + s->irr &= s->elcr; s->imr = 0; s->isr = 0; s->priority_add = 0; diff --git a/hw/kvm/i8259.c b/hw/kvm/i8259.c index 64bb5c2..298d9ca 100644 --- a/hw/kvm/i8259.c +++ b/hw/kvm/i8259.c @@ -84,8 +84,8 @@ static void kvm_pic_reset(DeviceState *dev) { PICCommonState *s = DO_UPCAST(PICCommonState, dev.qdev, dev); - pic_reset_common(s); s->elcr = 0; + pic_reset_common(s); kvm_pic_put(s); } -- 1.7.3.4