qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v5 5/6] i8259: fix so that dropping IRQ level al


From: BALATON Zoltan
Subject: Re: [Qemu-devel] [PATCH v5 5/6] i8259: fix so that dropping IRQ level always clears the interrupt request
Date: Mon, 19 Nov 2012 16:28:31 +0100 (CET)
User-agent: Alpine 2.00 (GSO 1167 2008-08-23)

On Sun, 9 Sep 2012, Matthew Ogilvie wrote:
Intel's definition of "edge triggered" means: "asserted with a
low-to-high transition at the time an interrupt is registered and
then kept high until the interrupt is served via one of the
EOI mechanisms or goes away unhandled."

So the only difference between edge triggered and level triggered
is in the leading edge, with no difference in the trailing edge.

This bug manifested itself when the guest was Microport UNIX
System V/386 v2.1 (ca. 1987), because it would sometimes mask
off IRQ14 in the slave IMR after it had already been asserted.
The master would still try to deliver an interrupt even though
IRQ2 had dropped again, resulting in a spurious interupt
(IRQ15) and a panicked kernel.

Signed-off-by: Matthew Ogilvie <address@hidden>
---

If you missed the previous thread about this, see
http://www.mail-archive.com/address@hidden/msg129071.html

hw/i8259.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/hw/i8259.c b/hw/i8259.c
index 6587666..c011787 100644
--- a/hw/i8259.c
+++ b/hw/i8259.c
@@ -157,6 +157,7 @@ static void pic_set_irq(void *opaque, int irq, int level)
            }
            s->last_irr |= mask;
        } else {
+            s->irr &= ~mask;
            s->last_irr &= ~mask;
        }
    }


What happened to this patch? Any chance it will be in 1.3?

Thanks,
BALATON Zoltan



reply via email to

[Prev in Thread] Current Thread [Next in Thread]