• P
    target/arm: Track the state of our irq lines from the GIC explicitly · ed89f078
    Peter Maydell 提交于
    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 8a0fc3a2 and its revert, but
    that commit is broken and never made it into any released QEMU
    version.)
    Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
    Reviewed-by: NPhilippe Mathieu-Daudé <f4bug@amsat.org>
    Reviewed-by: NAlex Bennée <alex.bennee@linaro.org>
    Message-id: 20181109134731.11605-3-peter.maydell@linaro.org
    ed89f078
cpu.c 68.3 KB