On Tue, Nov 6, 2018 at 5:41 PM Peter Maydell <peter.mayd...@linaro.org> wrote: > > Remove a TODO comment about implementing the vectored interrupt > controller. We have had an implementation of that for a decade; > it's in hw/intc/pl190.c. > > Signed-off-by: Peter Maydell <peter.mayd...@linaro.org>
On Fri, Nov 9, 2018 at 2:49 PM Peter Maydell <peter.mayd...@linaro.org> wrote: > > Currently we track the state of the four irq lines from the GIC > only via the cs->interrupt_request or KVM irq state. That means > that we assume that an interrupt is asserted if and only if the > external line is set. This assumption is incorrect for VIRQ > and VFIQ, because the HCR_EL2.{VI,VF} bits allow assertion > of VIRQ and VFIQ separately from the state of the external line. > > To handle this, start tracking the state of the external lines > explicitly in a CPU state struct field, as is common practice > for devices. > > The complicated part of this is dealing with inbound migration > from an older QEMU which didn't have this state. We assume in > that case that the older QEMU did not implement the HCR_EL2.{VI,VF} > bits as generating interrupts, and so the line state matches > the current state in cs->interrupt_request. (This is not quite > true between commit 8a0fc3a29fc2315325400c7 and its revert, but > that commit is broken and never made it into any released QEMU > version.) > > Signed-off-by: Peter Maydell <peter.mayd...@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <f4...@amsat.org> > --- > target/arm/helper.c | 1 - > 1 file changed, 1 deletion(-) > > diff --git a/target/arm/helper.c b/target/arm/helper.c > index ec56becc394..851ea9aa977 100644 > --- a/target/arm/helper.c > +++ b/target/arm/helper.c > @@ -8378,7 +8378,6 @@ static void arm_cpu_do_interrupt_aarch32(CPUState *cs) > return; > } > > - /* TODO: Vectored interrupt controller. */ > switch (cs->exception_index) { > case EXCP_UDEF: > new_mode = ARM_CPU_MODE_UND; > -- > 2.19.1 > >