[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v7 36/41] target/arm: Update arm_cpu_do_interrupt_aarch64 for VHE
From: |
Richard Henderson |
Subject: |
[PATCH v7 36/41] target/arm: Update arm_cpu_do_interrupt_aarch64 for VHE |
Date: |
Thu, 6 Feb 2020 10:54:43 +0000 |
When VHE is enabled, the exception level below EL2 is not EL1,
but EL0, and so to identify the entry vector offset for exceptions
targeting EL2 we need to look at the width of EL0, not of EL1.
Tested-by: Alex Bennée <address@hidden>
Reviewed-by: Peter Maydell <address@hidden>
Signed-off-by: Richard Henderson <address@hidden>
---
target/arm/helper.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/target/arm/helper.c b/target/arm/helper.c
index ff2d957b7c..7d15d5c933 100644
--- a/target/arm/helper.c
+++ b/target/arm/helper.c
@@ -9017,14 +9017,19 @@ static void arm_cpu_do_interrupt_aarch64(CPUState *cs)
* immediately lower than the target level is using AArch32 or AArch64
*/
bool is_aa64;
+ uint64_t hcr;
switch (new_el) {
case 3:
is_aa64 = (env->cp15.scr_el3 & SCR_RW) != 0;
break;
case 2:
- is_aa64 = (env->cp15.hcr_el2 & HCR_RW) != 0;
- break;
+ hcr = arm_hcr_el2_eff(env);
+ if ((hcr & (HCR_E2H | HCR_TGE)) != (HCR_E2H | HCR_TGE)) {
+ is_aa64 = (hcr & HCR_RW) != 0;
+ break;
+ }
+ /* fall through */
case 1:
is_aa64 = is_a64(env);
break;
--
2.20.1
- [PATCH v7 37/41] target/arm: Enable ARMv8.1-VHE in -cpu max, (continued)
- [PATCH v7 37/41] target/arm: Enable ARMv8.1-VHE in -cpu max, Richard Henderson, 2020/02/06
- [PATCH v7 39/41] target/arm: Pass more cpu state to arm_excp_unmasked, Richard Henderson, 2020/02/06
- [PATCH v7 33/41] target/arm: Update {fp,sve}_exception_el for VHE, Richard Henderson, 2020/02/06
- [PATCH v7 38/41] target/arm: Move arm_excp_unmasked to cpu.c, Richard Henderson, 2020/02/06
- [PATCH v7 41/41] target/arm: Raise only one interrupt in arm_cpu_exec_interrupt, Richard Henderson, 2020/02/06
- [PATCH v7 22/41] target/arm: Update arm_sctlr for VHE, Richard Henderson, 2020/02/06
- [PATCH v7 21/41] target/arm: Update arm_mmu_idx for VHE, Richard Henderson, 2020/02/06
- [PATCH v7 31/41] target/arm: Flush tlbs for E2&0 translation regime, Richard Henderson, 2020/02/06
- [PATCH v7 29/41] target/arm: Add VHE timer register redirection and aliasing, Richard Henderson, 2020/02/06
- [PATCH v7 34/41] target/arm: check TGE and E2H flags for EL0 pauth traps, Richard Henderson, 2020/02/06
- [PATCH v7 36/41] target/arm: Update arm_cpu_do_interrupt_aarch64 for VHE,
Richard Henderson <=
- [PATCH v7 35/41] target/arm: Update get_a64_user_mem_index for VHE, Richard Henderson, 2020/02/06
- [PATCH v7 40/41] target/arm: Use bool for unmasked in arm_excp_unmasked, Richard Henderson, 2020/02/06
- Re: [PATCH v7 00/41] target/arm: Implement ARMv8.1-VHE, Peter Maydell, 2020/02/07