target/arm: Correctly implement handling of HCR_EL2.{VI, VF}
commit89430fc6f80a5aef1d4cbd6fc26b40c30793786c
authorPeter Maydell <peter.maydell@linaro.org>
Tue, 13 Nov 2018 10:47:59 +0000 (13 10:47 +0000)
committerPeter Maydell <peter.maydell@linaro.org>
Tue, 13 Nov 2018 10:47:59 +0000 (13 10:47 +0000)
tree2e739cc3a3019b51076f55977f374c4320ade883
parented89f078ff3d6684ce3e538e4777a3bb4ec3e2b1
target/arm: Correctly implement handling of HCR_EL2.{VI, VF}

In commit 8a0fc3a29fc2315325400 we tried to implement HCR_EL2.{VI,VF},
but we got it wrong and had to revert it.

In that commit we implemented them as simply tracking whether there
is a pending virtual IRQ or virtual FIQ. This is not correct -- these
bits cause a software-generated VIRQ/VFIQ, which is distinct from
whether there is a hardware-generated VIRQ/VFIQ caused by the
external interrupt controller. So we need to track separately
the HCR_EL2 bit state and the external virq/vfiq line state, and
OR the two together to get the actual pending VIRQ/VFIQ state.

Fixes: 8a0fc3a29fc2315325400c738f807d0d4ae0ab7f
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-id: 20181109134731.11605-4-peter.maydell@linaro.org
target/arm/cpu.c
target/arm/helper.c
target/arm/internals.h