mirror of
https://github.com/torvalds/linux.git
synced 2026-09-28 12:02:03 +02:00
KVM: arm64: Add routing for NVHCR_EL2 trap
NVHCR_EL2 accesses from EL1 are taken to EL2 when HCRX_EL2.NVTGE==0 and HCR_EL2.NV==1. Describe this in the exception routing tables. Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://patch.msgid.link/20260730071022.296811-23-maz@kernel.org Signed-off-by: Oliver Upton <oupton@kernel.org>
This commit is contained in:
parent
0c0b2ad26b
commit
d6debf95f1
|
|
@ -136,6 +136,8 @@ enum cgt_group_id {
|
|||
CGT_CPTR_TTA,
|
||||
CGT_MDCR_HPMN,
|
||||
|
||||
CGT_HCR_NV_HCRX_nNVTGE,
|
||||
|
||||
/* Must be last */
|
||||
__NR_CGT_GROUP_IDS__
|
||||
};
|
||||
|
|
@ -588,6 +590,15 @@ static enum trap_behaviour check_mdcr_hpmn(struct kvm_vcpu *vcpu)
|
|||
return BEHAVE_HANDLE_LOCALLY;
|
||||
}
|
||||
|
||||
static enum trap_behaviour check_hcr_nv_hcrx_nnvtge(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
if ((__vcpu_sys_reg(vcpu, HCR_EL2) & HCR_EL2_NV) &&
|
||||
!(__vcpu_sys_reg(vcpu, HCRX_EL2) & HCRX_EL2_NVTGE))
|
||||
return BEHAVE_FORWARD_RW;
|
||||
|
||||
return BEHAVE_HANDLE_LOCALLY;
|
||||
}
|
||||
|
||||
#define CCC(id, fn) \
|
||||
[id - __COMPLEX_CONDITIONS__] = fn
|
||||
|
||||
|
|
@ -598,6 +609,7 @@ static const complex_condition_check ccc[] = {
|
|||
CCC(CGT_CNTHCTL_EL1NVVCT, check_cnthctl_el1nvvct),
|
||||
CCC(CGT_CPTR_TTA, check_cptr_tta),
|
||||
CCC(CGT_MDCR_HPMN, check_mdcr_hpmn),
|
||||
CCC(CGT_HCR_NV_HCRX_nNVTGE, check_hcr_nv_hcrx_nnvtge),
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -853,6 +865,7 @@ static const struct encoding_to_trap_config encoding_to_cgt[] __initconst = {
|
|||
SR_TRAP(SYS_SCTLR2_EL2, CGT_HCR_NV),
|
||||
SR_RANGE_TRAP(SYS_HCR_EL2,
|
||||
SYS_HCRX_EL2, CGT_HCR_NV),
|
||||
SR_TRAP(SYS_NVHCR_EL2, CGT_HCR_NV_HCRX_nNVTGE),
|
||||
SR_TRAP(SYS_SMPRIMAP_EL2, CGT_HCR_NV),
|
||||
SR_TRAP(SYS_SMCR_EL2, CGT_HCR_NV),
|
||||
SR_RANGE_TRAP(SYS_TTBR0_EL2,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user