Skip to content

Commit 93fd599

Browse files
hoshinolinajannau
authored andcommitted
KVM: arm64: Expose TSO capability to guests and context switch
Signed-off-by: Asahi Lina <[email protected]>
1 parent fa9bb93 commit 93fd599

2 files changed

Lines changed: 12 additions & 0 deletions

File tree

arch/arm64/include/asm/kvm_emulate.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,9 @@ static inline void vcpu_reset_hcr(struct kvm_vcpu *vcpu)
8080
{
8181
if (!vcpu_has_run_once(vcpu))
8282
vcpu->arch.hcr_el2 = HCR_GUEST_FLAGS;
83+
if (IS_ENABLED(CONFIG_ARM64_ACTLR_STATE) &&
84+
alternative_has_cap_unlikely(ARM64_HAS_TSO_APPLE))
85+
vcpu->arch.hcr_el2 &= ~HCR_TACR;
8386

8487
/*
8588
* For non-FWB CPUs, we trap VM ops (HCR_EL2.TVM) until M+C

arch/arm64/kvm/hyp/include/hyp/sysreg-sr.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
#include <asm/kvm_hyp.h>
1717
#include <asm/kvm_mmu.h>
1818

19+
#define SYS_IMP_APL_ACTLR_EL12 sys_reg(3, 6, 15, 14, 6)
20+
1921
static inline bool ctxt_has_s1poe(struct kvm_cpu_context *ctxt);
2022

2123
static inline void __sysreg_save_common_state(struct kvm_cpu_context *ctxt)
@@ -121,6 +123,9 @@ static inline void __sysreg_save_el1_state(struct kvm_cpu_context *ctxt)
121123
ctxt_sys_reg(ctxt, SP_EL1) = read_sysreg(sp_el1);
122124
ctxt_sys_reg(ctxt, ELR_EL1) = read_sysreg_el1(SYS_ELR);
123125
ctxt_sys_reg(ctxt, SPSR_EL1) = read_sysreg_el1(SYS_SPSR);
126+
if (IS_ENABLED(CONFIG_ARM64_ACTLR_STATE) &&
127+
alternative_has_cap_unlikely(ARM64_HAS_TSO_APPLE))
128+
ctxt_sys_reg(ctxt, ACTLR_EL1) = read_sysreg_s(SYS_IMP_APL_ACTLR_EL12);
124129
}
125130

126131
static inline void __sysreg_save_el2_return_state(struct kvm_cpu_context *ctxt)
@@ -198,6 +203,10 @@ static inline void __sysreg_restore_el1_state(struct kvm_cpu_context *ctxt)
198203
write_sysreg(ctxt_sys_reg(ctxt, PAR_EL1), par_el1);
199204
write_sysreg(ctxt_sys_reg(ctxt, TPIDR_EL1), tpidr_el1);
200205

206+
if (IS_ENABLED(CONFIG_ARM64_ACTLR_STATE) &&
207+
alternative_has_cap_unlikely(ARM64_HAS_TSO_APPLE))
208+
write_sysreg_s(ctxt_sys_reg(ctxt, ACTLR_EL1), SYS_IMP_APL_ACTLR_EL12);
209+
201210
if (ctxt_has_mte(ctxt)) {
202211
write_sysreg_el1(ctxt_sys_reg(ctxt, TFSR_EL1), SYS_TFSR);
203212
write_sysreg_s(ctxt_sys_reg(ctxt, TFSRE0_EL1), SYS_TFSRE0_EL1);

0 commit comments

Comments
 (0)