From: Peter Crosthwaite Date: Tue, 11 Jun 2013 00:58:25 +0000 (+1000) Subject: intc/xilinx_intc: Don't clear level sens. IRQs without ACK X-Git-Tag: qemu-xen-4.4.0-rc1~6^2~279 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=6327c221fff955ee979559ec85c148963e06d78f;p=qemu-upstream-4.5-testing.git intc/xilinx_intc: Don't clear level sens. IRQs without ACK For level sensitive interrupts, ISR bits are cleared when the input pin is lowered. This is incorrect. Only software can clear ISR bits (via IAR or direct write to ISR with !MER(2)). Signed-off-by: Peter Crosthwaite Signed-off-by: Edgar E. Iglesias --- diff --git a/hw/intc/xilinx_intc.c b/hw/intc/xilinx_intc.c index 5df7008e2..d243a0015 100644 --- a/hw/intc/xilinx_intc.c +++ b/hw/intc/xilinx_intc.c @@ -135,13 +135,7 @@ static void irq_handler(void *opaque, int irq, int level) return; } - /* Update source flops. Don't clear unless level triggered. - Edge triggered interrupts only go away when explicitely acked to - the interrupt controller. */ - if (!(p->c_kind_of_intr & (1 << irq)) || level) { - p->regs[R_ISR] &= ~(1 << irq); - p->regs[R_ISR] |= (level << irq); - } + p->regs[R_ISR] |= (level << irq); update_irq(p); }