[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-arm] [PATCH 1/5] target/arm: Mask virtual interrupts if HCR_EL2.TG
From: |
Peter Maydell |
Subject: |
[Qemu-arm] [PATCH 1/5] target/arm: Mask virtual interrupts if HCR_EL2.TGE is set |
Date: |
Tue, 24 Jul 2018 12:59:46 +0100 |
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: Peter Maydell <address@hidden>
---
target/arm/cpu.h | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/target/arm/cpu.h b/target/arm/cpu.h
index e310ffc29d2..efb2a8d3f3d 100644
--- a/target/arm/cpu.h
+++ b/target/arm/cpu.h
@@ -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;
}
--
2.17.1
- [Qemu-arm] [PATCH 0/5] target/arm: Implement HCR_EL2.TGE ("trap general exceptions"), Peter Maydell, 2018/07/24
- [Qemu-arm] [PATCH 3/5] target/arm: Honour HCR_EL2.TGE when raising synchronous exceptions, Peter Maydell, 2018/07/24
- [Qemu-arm] [PATCH 5/5] target/arm: Treat SCTLR_EL1.M as if it were zero when HCR_EL2.TGE is set, Peter Maydell, 2018/07/24
- [Qemu-arm] [PATCH 1/5] target/arm: Mask virtual interrupts if HCR_EL2.TGE is set,
Peter Maydell <=
- [Qemu-arm] [PATCH 2/5] target/arm: Honour HCR_EL2.TGE and MDCR_EL2.TDE in debug register access checks, Peter Maydell, 2018/07/24
- [Qemu-arm] [PATCH 4/5] target/arm: Provide accessor functions for HCR_EL2.{IMO, FMO, AMO}, Peter Maydell, 2018/07/24