|
16 | 16 | #include <asm/kvm_hyp.h> |
17 | 17 | #include <asm/kvm_mmu.h> |
18 | 18 |
|
| 19 | +#define SYS_IMP_APL_ACTLR_EL12 sys_reg(3, 6, 15, 14, 6) |
| 20 | + |
19 | 21 | static inline void __sysreg_save_common_state(struct kvm_cpu_context *ctxt) |
20 | 22 | { |
21 | 23 | ctxt_sys_reg(ctxt, MDSCR_EL1) = read_sysreg(mdscr_el1); |
@@ -88,6 +90,9 @@ static inline void __sysreg_save_el1_state(struct kvm_cpu_context *ctxt) |
88 | 90 | ctxt_sys_reg(ctxt, SP_EL1) = read_sysreg(sp_el1); |
89 | 91 | ctxt_sys_reg(ctxt, ELR_EL1) = read_sysreg_el1(SYS_ELR); |
90 | 92 | ctxt_sys_reg(ctxt, SPSR_EL1) = read_sysreg_el1(SYS_SPSR); |
| 93 | + if (IS_ENABLED(CONFIG_ARM64_ACTLR_STATE) && |
| 94 | + alternative_has_cap_unlikely(ARM64_HAS_TSO_APPLE)) |
| 95 | + ctxt_sys_reg(ctxt, ACTLR_EL1) = read_sysreg_s(SYS_IMP_APL_ACTLR_EL12); |
91 | 96 | } |
92 | 97 |
|
93 | 98 | static inline void __sysreg_save_el2_return_state(struct kvm_cpu_context *ctxt) |
@@ -156,6 +161,10 @@ static inline void __sysreg_restore_el1_state(struct kvm_cpu_context *ctxt) |
156 | 161 | write_sysreg(ctxt_sys_reg(ctxt, PAR_EL1), par_el1); |
157 | 162 | write_sysreg(ctxt_sys_reg(ctxt, TPIDR_EL1), tpidr_el1); |
158 | 163 |
|
| 164 | + if (IS_ENABLED(CONFIG_ARM64_ACTLR_STATE) && |
| 165 | + alternative_has_cap_unlikely(ARM64_HAS_TSO_APPLE)) |
| 166 | + write_sysreg_s(ctxt_sys_reg(ctxt, ACTLR_EL1), SYS_IMP_APL_ACTLR_EL12); |
| 167 | + |
159 | 168 | if (ctxt_has_mte(ctxt)) { |
160 | 169 | write_sysreg_el1(ctxt_sys_reg(ctxt, TFSR_EL1), SYS_TFSR); |
161 | 170 | write_sysreg_s(ctxt_sys_reg(ctxt, TFSRE0_EL1), SYS_TFSRE0_EL1); |
|
0 commit comments