Hi Marc, On 7/12/23 16:58, Marc Zyngier wrote: > Describe the MDCR_EL2 register, and associate it with all the sysregs > it allows to trap. > > Signed-off-by: Marc Zyngier <maz@xxxxxxxxxx> > --- > arch/arm64/kvm/emulate-nested.c | 262 ++++++++++++++++++++++++++++++++ > 1 file changed, 262 insertions(+) > > diff --git a/arch/arm64/kvm/emulate-nested.c b/arch/arm64/kvm/emulate-nested.c > index 51901e85e43d..25e4842ac334 100644 > --- a/arch/arm64/kvm/emulate-nested.c > +++ b/arch/arm64/kvm/emulate-nested.c > @@ -65,6 +65,18 @@ enum coarse_grain_trap_id { > CGT_HCR_TTLBIS, > CGT_HCR_TTLBOS, > > + CGT_MDCR_TPMCR, > + CGT_MDCR_TPM, > + CGT_MDCR_TDE, > + CGT_MDCR_TDA, > + CGT_MDCR_TDOSA, > + CGT_MDCR_TDRA, > + CGT_MDCR_E2PB, > + CGT_MDCR_TPMS, > + CGT_MDCR_TTRF, > + CGT_MDCR_E2TB, > + CGT_MDCR_TDCC, > + > /* > * Anything after this point is a combination of trap controls, > * which all must be evaluated to decide what to do. > @@ -78,6 +90,11 @@ enum coarse_grain_trap_id { > CGT_HCR_TPU_TICAB, > CGT_HCR_TPU_TOCU, > CGT_HCR_NV1_ENSCXT, > + CGT_MDCR_TPM_TPMCR, > + CGT_MDCR_TDE_TDA, > + CGT_MDCR_TDE_TDOSA, > + CGT_MDCR_TDE_TDRA, > + CGT_MDCR_TDCC_TDE_TDA, > > /* > * Anything after this point requires a callback evaluating a > @@ -249,6 +266,72 @@ static const struct trap_bits coarse_trap_bits[] = { > .mask = HCR_TTLBOS, > .behaviour = BEHAVE_FORWARD_ANY, > }, > + [CGT_MDCR_TPMCR] = { > + .index = MDCR_EL2, > + .value = MDCR_EL2_TPMCR, > + .mask = MDCR_EL2_TPMCR, > + .behaviour = BEHAVE_FORWARD_ANY, > + }, > + [CGT_MDCR_TPM] = { > + .index = MDCR_EL2, > + .value = MDCR_EL2_TPM, > + .mask = MDCR_EL2_TPM, > + .behaviour = BEHAVE_FORWARD_ANY, > + }, > + [CGT_MDCR_TDE] = { > + .index = MDCR_EL2, > + .value = MDCR_EL2_TDE, > + .mask = MDCR_EL2_TDE, > + .behaviour = BEHAVE_FORWARD_ANY, > + }, > + [CGT_MDCR_TDA] = { > + .index = MDCR_EL2, > + .value = MDCR_EL2_TDA, > + .mask = MDCR_EL2_TDA, > + .behaviour = BEHAVE_FORWARD_ANY, > + }, > + [CGT_MDCR_TDOSA] = { > + .index = MDCR_EL2, > + .value = MDCR_EL2_TDOSA, > + .mask = MDCR_EL2_TDOSA, > + .behaviour = BEHAVE_FORWARD_ANY, > + }, > + [CGT_MDCR_TDRA] = { > + .index = MDCR_EL2, > + .value = MDCR_EL2_TDRA, > + .mask = MDCR_EL2_TDRA, > + .behaviour = BEHAVE_FORWARD_ANY, > + }, > + [CGT_MDCR_E2PB] = { > + .index = MDCR_EL2, > + .value = 0, > + .mask = BIT(MDCR_EL2_E2PB_SHIFT), > + .behaviour = BEHAVE_FORWARD_ANY, > + }, > + [CGT_MDCR_TPMS] = { > + .index = MDCR_EL2, > + .value = MDCR_EL2_TPMS, > + .mask = MDCR_EL2_TPMS, > + .behaviour = BEHAVE_FORWARD_ANY, > + }, > + [CGT_MDCR_TTRF] = { > + .index = MDCR_EL2, > + .value = MDCR_EL2_TTRF, > + .mask = MDCR_EL2_TTRF, > + .behaviour = BEHAVE_FORWARD_ANY, > + }, > + [CGT_MDCR_E2TB] = { > + .index = MDCR_EL2, > + .value = 0, > + .mask = BIT(MDCR_EL2_E2TB_SHIFT), > + .behaviour = BEHAVE_FORWARD_ANY, > + }, > + [CGT_MDCR_TDCC] = { > + .index = MDCR_EL2, > + .value = MDCR_EL2_TDCC, > + .mask = MDCR_EL2_TDCC, > + .behaviour = BEHAVE_FORWARD_ANY, > + }, > }; > > #define MCB(id, ...) \ > @@ -266,6 +349,11 @@ static const enum coarse_grain_trap_id *coarse_control_combo[] = { > MCB(CGT_HCR_TPU_TICAB, CGT_HCR_TPU, CGT_HCR_TICAB), > MCB(CGT_HCR_TPU_TOCU, CGT_HCR_TPU, CGT_HCR_TOCU), > MCB(CGT_HCR_NV1_ENSCXT, CGT_HCR_NV1, CGT_HCR_ENSCXT), > + MCB(CGT_MDCR_TPM_TPMCR, CGT_MDCR_TPM, CGT_MDCR_TPMCR), > + MCB(CGT_MDCR_TDE_TDA, CGT_MDCR_TDE, CGT_MDCR_TDA), > + MCB(CGT_MDCR_TDE_TDOSA, CGT_MDCR_TDE, CGT_MDCR_TDOSA), > + MCB(CGT_MDCR_TDE_TDRA, CGT_MDCR_TDE, CGT_MDCR_TDRA), > + MCB(CGT_MDCR_TDCC_TDE_TDA, CGT_MDCR_TDCC, CGT_MDCR_TDE_TDA), > }; > > typedef enum trap_behaviour (*complex_condition_check)(struct kvm_vcpu *); > @@ -593,6 +681,180 @@ static const struct encoding_to_trap_config encoding_to_cgt[] __initdata = { > SR_TRAP(SYS_ERXPFGCTL_EL1, CGT_HCR_FIEN), > SR_TRAP(SYS_ERXPFGCDN_EL1, CGT_HCR_FIEN), > SR_TRAP(SYS_SCXTNUM_EL0, CGT_HCR_ENSCXT), > + SR_TRAP(SYS_PMCR_EL0, CGT_MDCR_TPM_TPMCR), * > + SR_TRAP(SYS_PMCNTENSET_EL0, CGT_MDCR_TPM),* > + SR_TRAP(SYS_PMCNTENCLR_EL0, CGT_MDCR_TPM),* > + SR_TRAP(SYS_PMOVSSET_EL0, CGT_MDCR_TPM),* > + SR_TRAP(SYS_PMOVSCLR_EL0, CGT_MDCR_TPM),* > + SR_TRAP(SYS_PMCEID0_EL0, CGT_MDCR_TPM),* > + SR_TRAP(SYS_PMCEID1_EL0, CGT_MDCR_TPM),* > + SR_TRAP(SYS_PMXEVTYPER_EL0, CGT_MDCR_TPM),* > + SR_TRAP(SYS_PMSWINC_EL0, CGT_MDCR_TPM),* > + SR_TRAP(SYS_PMSELR_EL0, CGT_MDCR_TPM),* > + SR_TRAP(SYS_PMXEVCNTR_EL0, CGT_MDCR_TPM),* > + SR_TRAP(SYS_PMCCNTR_EL0, CGT_MDCR_TPM),* > + SR_TRAP(SYS_PMUSERENR_EL0, CGT_MDCR_TPM),* > + SR_TRAP(SYS_PMINTENSET_EL1, CGT_MDCR_TPM),* > + SR_TRAP(SYS_PMINTENCLR_EL1, CGT_MDCR_TPM),* > + SR_TRAP(SYS_PMMIR_EL1, CGT_MDCR_TPM),* > + SR_TRAP(SYS_PMEVCNTRn_EL0(0), CGT_MDCR_TPM),* > + SR_TRAP(SYS_PMEVCNTRn_EL0(1), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(2), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(3), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(4), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(5), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(6), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(7), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(8), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(9), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(10), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(11), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(12), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(13), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(14), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(15), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(16), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(17), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(18), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(19), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(20), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(21), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(22), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(23), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(24), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(25), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(26), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(27), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(28), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(29), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVCNTRn_EL0(30), CGT_MDCR_TPM),* > + SR_TRAP(SYS_PMEVTYPERn_EL0(0), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(1), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(2), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(3), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(4), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(5), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(6), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(7), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(8), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(9), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(10), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(11), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(12), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(13), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(14), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(15), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(16), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(17), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(18), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(19), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(20), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(21), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(22), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(23), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(24), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(25), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(26), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(27), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(28), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(29), CGT_MDCR_TPM), > + SR_TRAP(SYS_PMEVTYPERn_EL0(30), CGT_MDCR_TPM),* > + SR_TRAP(SYS_PMCCFILTR_EL0, CGT_MDCR_TPM),* > + SR_TRAP(SYS_MDCCSR_EL0, CGT_MDCR_TDCC_TDE_TDA),* > + SR_TRAP(SYS_MDCCINT_EL1, CGT_MDCR_TDCC_TDE_TDA),* > + SR_TRAP(SYS_OSDTRRX_EL1, CGT_MDCR_TDCC_TDE_TDA),* > + SR_TRAP(SYS_OSDTRTX_EL1, CGT_MDCR_TDCC_TDE_TDA),* Please also double check DBGDTR_EL0, DBGDTRRX/TX_EL0. I understand from the spec they may end up in CGT_MDCR_TDCC_TDE_TDA too > + SR_TRAP(SYS_MDSCR_EL1, CGT_MDCR_TDE_TDA),* > + SR_TRAP(SYS_OSECCR_EL1, CGT_MDCR_TDE_TDA),* > + SR_TRAP(SYS_DBGBVRn_EL1(0), CGT_MDCR_TDE_TDA),* > + SR_TRAP(SYS_DBGBVRn_EL1(1), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBVRn_EL1(2), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBVRn_EL1(3), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBVRn_EL1(4), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBVRn_EL1(5), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBVRn_EL1(6), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBVRn_EL1(7), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBVRn_EL1(8), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBVRn_EL1(9), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBVRn_EL1(10), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBVRn_EL1(11), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBVRn_EL1(12), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBVRn_EL1(13), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBVRn_EL1(14), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBVRn_EL1(15), CGT_MDCR_TDE_TDA),* > + SR_TRAP(SYS_DBGBCRn_EL1(0), CGT_MDCR_TDE_TDA),* > + SR_TRAP(SYS_DBGBCRn_EL1(1), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBCRn_EL1(2), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBCRn_EL1(3), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBCRn_EL1(4), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBCRn_EL1(5), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBCRn_EL1(6), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBCRn_EL1(7), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBCRn_EL1(8), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBCRn_EL1(9), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBCRn_EL1(10), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBCRn_EL1(11), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBCRn_EL1(12), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBCRn_EL1(13), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBCRn_EL1(14), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGBCRn_EL1(15), CGT_MDCR_TDE_TDA),* > + SR_TRAP(SYS_DBGWVRn_EL1(0), CGT_MDCR_TDE_TDA),* > + SR_TRAP(SYS_DBGWVRn_EL1(1), CGT_MDCR_TDE_TDA),* > + SR_TRAP(SYS_DBGWVRn_EL1(2), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWVRn_EL1(3), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWVRn_EL1(4), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWVRn_EL1(5), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWVRn_EL1(6), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWVRn_EL1(7), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWVRn_EL1(8), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWVRn_EL1(9), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWVRn_EL1(10), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWVRn_EL1(11), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWVRn_EL1(12), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWVRn_EL1(13), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWVRn_EL1(14), CGT_MDCR_TDE_TDA),* > + SR_TRAP(SYS_DBGWVRn_EL1(15), CGT_MDCR_TDE_TDA),* > + SR_TRAP(SYS_DBGWCRn_EL1(0), CGT_MDCR_TDE_TDA),* > + SR_TRAP(SYS_DBGWCRn_EL1(1), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWCRn_EL1(2), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWCRn_EL1(3), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWCRn_EL1(4), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWCRn_EL1(5), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWCRn_EL1(6), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWCRn_EL1(7), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWCRn_EL1(8), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWCRn_EL1(9), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWCRn_EL1(10), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWCRn_EL1(11), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWCRn_EL1(12), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWCRn_EL1(13), CGT_MDCR_TDE_TDA), > + SR_TRAP(SYS_DBGWCRn_EL1(14), CGT_MDCR_TDE_TDA),* > + SR_TRAP(SYS_DBGCLAIMSET_EL1, CGT_MDCR_TDE_TDA),* > + SR_TRAP(SYS_DBGCLAIMCLR_EL1, CGT_MDCR_TDE_TDA),* > + SR_TRAP(SYS_DBGAUTHSTATUS_EL1, CGT_MDCR_TDE_TDA),* > + SR_TRAP(SYS_OSLAR_EL1, CGT_MDCR_TDE_TDOSA),* > + SR_TRAP(SYS_OSLSR_EL1, CGT_MDCR_TDE_TDOSA),* > + SR_TRAP(SYS_OSDLR_EL1, CGT_MDCR_TDE_TDOSA),* > + SR_TRAP(SYS_DBGPRCR_EL1, CGT_MDCR_TDE_TDOSA),* > + SR_TRAP(SYS_MDRAR_EL1, CGT_MDCR_TDE_TDRA),* > + SR_TRAP(SYS_PMBLIMITR_EL1, CGT_MDCR_E2PB),* > + SR_TRAP(SYS_PMBPTR_EL1, CGT_MDCR_E2PB),* > + SR_TRAP(SYS_PMBSR_EL1, CGT_MDCR_E2PB),* > + SR_TRAP(SYS_PMSCR_EL1, CGT_MDCR_TPMS),* > + SR_TRAP(SYS_PMSEVFR_EL1, CGT_MDCR_TPMS),* > + SR_TRAP(SYS_PMSFCR_EL1, CGT_MDCR_TPMS),* > + SR_TRAP(SYS_PMSICR_EL1, CGT_MDCR_TPMS),* > + SR_TRAP(SYS_PMSIDR_EL1, CGT_MDCR_TPMS),* > + SR_TRAP(SYS_PMSIRR_EL1, CGT_MDCR_TPMS),* > + SR_TRAP(SYS_PMSLATFR_EL1, CGT_MDCR_TPMS),* > + SR_TRAP(SYS_PMSNEVFR_EL1, CGT_MDCR_TPMS),* > + SR_TRAP(SYS_TRFCR_EL1, CGT_MDCR_TTRF),* > + SR_TRAP(SYS_TRBBASER_EL1, CGT_MDCR_E2TB),* > + SR_TRAP(SYS_TRBLIMITR_EL1, CGT_MDCR_E2TB),* > + SR_TRAP(SYS_TRBMAR_EL1, CGT_MDCR_E2TB),* > + SR_TRAP(SYS_TRBPTR_EL1, CGT_MDCR_E2TB),* > + SR_TRAP(SYS_TRBSR_EL1, CGT_MDCR_E2TB),* > + SR_TRAP(SYS_TRBTRG_EL1, CGT_MDCR_E2TB),* > }; > > static DEFINE_XARRAY(sr_forward_xa); Besides Reviewed-by: Eric Auger <eric.auger@xxxxxxxxxx> Eric