diff options
-rw-r--r-- | hw/mc146818rtc.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/hw/mc146818rtc.c b/hw/mc146818rtc.c index 93ceae7..657fa10 100644 --- a/hw/mc146818rtc.c +++ b/hw/mc146818rtc.c @@ -477,10 +477,13 @@ static uint32_t cmos_ioport_read(void *opaque, uint32_t addr) case RTC_REG_C: ret = s->cmos_data[s->cmos_index]; qemu_irq_lower(s->irq); + s->cmos_data[RTC_REG_C] = 0x00; #ifdef TARGET_I386 if(s->irq_coalesced && + (s->cmos_data[RTC_REG_B] & REG_B_PIE) && s->irq_reinject_on_ack_count < RTC_REINJECT_ON_ACK_COUNT) { s->irq_reinject_on_ack_count++; + s->cmos_data[RTC_REG_C] |= REG_C_IRQF | REG_C_PF; apic_reset_irq_delivered(); DPRINTF_C("cmos: injecting on ack\n"); qemu_irq_raise(s->irq); @@ -489,11 +492,8 @@ static uint32_t cmos_ioport_read(void *opaque, uint32_t addr) DPRINTF_C("cmos: coalesced irqs decreased to %d\n", s->irq_coalesced); } - break; } #endif - - s->cmos_data[RTC_REG_C] = 0x00; break; default: ret = s->cmos_data[s->cmos_index]; |