[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH v3 07/10] arm_gic: Fix gic_acknowledge_irq pendi
From: |
Christoffer Dall |
Subject: |
[Qemu-devel] [RFC PATCH v3 07/10] arm_gic: Fix gic_acknowledge_irq pending bit clear |
Date: |
Mon, 18 Nov 2013 22:18:13 -0800 |
The pending flags for level-triggered interrupts should not be cleared
if the interrupt input signal remains asserted.
Signed-off-by: Christoffer Dall <address@hidden>
Changelog[3]:
- New patch in the series
---
hw/intc/arm_gic.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/hw/intc/arm_gic.c b/hw/intc/arm_gic.c
index 9811161..20e926c 100644
--- a/hw/intc/arm_gic.c
+++ b/hw/intc/arm_gic.c
@@ -193,11 +193,15 @@ uint32_t gic_acknowledge_irq(GICState *s, int cpu)
return 1023;
}
s->last_active[new_irq][cpu] = s->running_irq[cpu];
- /* Clear pending flags for both level and edge triggered interrupts.
- Level triggered IRQs will be reasserted once they become inactive. */
+ /* Clear pending flags for edge-triggered and non-asserted level-triggered
+ * interrupts.
+ */
cm = GIC_TEST_MODEL(new_irq) ? ALL_CPU_MASK : cm;
GIC_CLEAR_SW_PENDING(new_irq, cm);
- gic_clear_pending(s, new_irq, cm, GIC_SGI_SRC(new_irq, cpu));
+ if (GIC_TEST_EDGE_TRIGGER(new_irq) || !GIC_TEST_LEVEL(new_irq, cm)) {
+ gic_clear_pending(s, new_irq, cm, GIC_SGI_SRC(new_irq, cpu));
+ }
+
gic_set_running_irq(s, cpu, new_irq);
DPRINTF("ACK %d\n", new_irq);
return new_irq;
--
1.8.4.3
- Re: [Qemu-devel] [RFC PATCH v3 01/10] hw: arm_gic: Fix gic_set_irq handling, (continued)
- [Qemu-devel] [RFC PATCH v3 02/10] hw: arm_gic: Introduce gic_set_priority function, Christoffer Dall, 2013/11/19
- [Qemu-devel] [RFC PATCH v3 03/10] hw: arm_gic: Keep track of SGI sources, Christoffer Dall, 2013/11/19
- [Qemu-devel] [RFC PATCH v3 04/10] arm_gic: Support setting/getting binary point reg, Christoffer Dall, 2013/11/19
- [Qemu-devel] [RFC PATCH v3 05/10] arm_gic: Rename GIC_X_TRIGGER to GIC_X_EDGE_TRIGGER, Christoffer Dall, 2013/11/19
- [Qemu-devel] [RFC PATCH v3 06/10] arm_gic: Keep track of GICD_CPENDR and GICD_SPENDR, Christoffer Dall, 2013/11/19
- [Qemu-devel] [RFC PATCH v3 07/10] arm_gic: Fix gic_acknowledge_irq pending bit clear,
Christoffer Dall <=
- [Qemu-devel] [RFC PATCH v3 08/10] vmstate: Add uint32 2D-array support, Christoffer Dall, 2013/11/19
- [Qemu-devel] [RFC PATCH v3 09/10] arm_gic: Add GICC_APRn state to the GICState, Christoffer Dall, 2013/11/19
- [Qemu-devel] [RFC PATCH v3 10/10] hw: arm_gic_kvm: Add KVM VGIC save/restore logic, Christoffer Dall, 2013/11/19