|
@@ -188,7 +188,7 @@ void apic_deliver_pic_intr(DeviceState *dev, int level)
|
|
apic_reset_bit(s->irr, lvt & 0xff);
|
|
apic_reset_bit(s->irr, lvt & 0xff);
|
|
/* fall through */
|
|
/* fall through */
|
|
case APIC_DM_EXTINT:
|
|
case APIC_DM_EXTINT:
|
|
- cpu_reset_interrupt(CPU(s->cpu), CPU_INTERRUPT_HARD);
|
|
|
|
|
|
+ apic_update_irq(s);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -376,6 +376,8 @@ static void apic_update_irq(APICCommonState *s)
|
|
cpu_interrupt(cpu, CPU_INTERRUPT_POLL);
|
|
cpu_interrupt(cpu, CPU_INTERRUPT_POLL);
|
|
} else if (apic_irq_pending(s) > 0) {
|
|
} else if (apic_irq_pending(s) > 0) {
|
|
cpu_interrupt(cpu, CPU_INTERRUPT_HARD);
|
|
cpu_interrupt(cpu, CPU_INTERRUPT_HARD);
|
|
|
|
+ } else if (!apic_accept_pic_intr(&s->busdev.qdev) || !pic_get_output(isa_pic)) {
|
|
|
|
+ cpu_reset_interrupt(cpu, CPU_INTERRUPT_HARD);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|