Commit 2ccf0fef authored by Peter Maydell's avatar Peter Maydell
Browse files

target/arm: Mask virtual interrupts if HCR_EL2.TGE is set



If the "trap general exceptions" bit HCR_EL2.TGE is set, we
must mask all virtual interrupts (as per DDI0487C.a D1.14.3).
Implement this in arm_excp_unmasked().

Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
Reviewed-by: default avatarRichard Henderson <richard.henderson@linaro.org>
Message-id: 20180724115950.17316-2-peter.maydell@linaro.org
parent a3f0ecfd
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -2261,13 +2261,15 @@ static inline bool arm_excp_unmasked(CPUState *cs, unsigned int excp_idx,
        break;

    case EXCP_VFIQ:
        if (secure || !(env->cp15.hcr_el2 & HCR_FMO)) {
        if (secure || !(env->cp15.hcr_el2 & HCR_FMO)
            || (env->cp15.hcr_el2 & HCR_TGE)) {
            /* VFIQs are only taken when hypervized and non-secure.  */
            return false;
        }
        return !(env->daif & PSTATE_F);
    case EXCP_VIRQ:
        if (secure || !(env->cp15.hcr_el2 & HCR_IMO)) {
        if (secure || !(env->cp15.hcr_el2 & HCR_IMO)
            || (env->cp15.hcr_el2 & HCR_TGE)) {
            /* VIRQs are only taken when hypervized and non-secure.  */
            return false;
        }