Commit aa24822b authored by Jan Kiszka's avatar Jan Kiszka Committed by Anthony Liguori
Browse files

i8259: Do not clear level-triggered lines in IRR on init



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: default avatarJan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
parent 4aa5d285
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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,
+1 −1
Original line number Diff line number Diff line
@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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);
}