On Sat, 05 Oct 2024 14:08:39 +0100, Mark Brown <broonie@xxxxxxxxxx> wrote: > > On Sat, Oct 05, 2024 at 12:34:20PM +0100, Marc Zyngier wrote: > > Mark Brown <broonie@xxxxxxxxxx> wrote: > > > > + if (!kvm_has_gcs(kvm)) { > > > + kvm->arch.fgu[HFGxTR_GROUP] |= (HFGxTR_EL2_nGCS_EL0 | > > > + HFGxTR_EL2_nGCS_EL1); > > > + kvm->arch.fgu[HFGITR_GROUP] |= (HFGITR_EL2_nGCSEPP | > > > + HFGITR_EL2_nGCSSTR_EL1 | > > > + HFGITR_EL2_nGCSPUSHM_EL1); > > > Where is the handling of traps resulting of HFGITR_EL2.nGCSSTR_EL1? > > These will trap with an EC of 0x2d which isn't known so I was expecting > this to get handled in the same way as for example a return of false > from kvm_hyp_handle_fpsimd() for SVE when unsupported, or for the > simiarly unknown SME EC, currently. I gather from your comment that > you're instead expecting to see an explicit exit handler for this EC > that just injects the UNDEF directly? Not just inject an UNDEF directly, but also track whether this needs to be forwarded when the guest's HFGITR_EL2.nGCSSTR_EL1 is 0 while not being not RES0. Basically following what the pseudocode describes. M. -- Without deviation from the norm, progress is not possible.