On Tue, 25 Jan 2022 12:25:47 +0000, Mark Brown <broonie@xxxxxxxxxx> wrote: > > [1 <text/plain; us-ascii (7bit)>] > On Tue, Jan 25, 2022 at 11:27:55AM +0000, Marc Zyngier wrote: > > Mark Brown <broonie@xxxxxxxxxx> wrote: > > > > + if (IS_ENABLED(CONFIG_ARM64_SME) && cpus_have_final_cap(ARM64_SME)) > > > Please drop the IS_ENABLED(). We purposely avoid conditional > > compilation in KVM in order to avoid bitrot, and the amount of code > > you save isn't significant. Having a static key is more than enough to > > avoid runtime costs. > > Sure, I wanted to be extra careful here as this is all in hot paths and > going to get moved elsewhere when we have real guest support. > > > > + if (IS_ENABLED(CONFIG_ARM64_SME) && cpus_have_final_cap(ARM64_SME) && > > > + cpus_have_final_cap(ARM64_HAS_FGT)) { > > > + val = read_sysreg_s(SYS_HFGRTR_EL2); > > > + val &= ~(HFGxTR_EL2_nTPIDR_EL0_MASK | > > > + HFGxTR_EL2_nSMPRI_EL1_MASK); > > > + write_sysreg_s(val, SYS_HFGRTR_EL2); > > > + > > > + val = read_sysreg_s(SYS_HFGWTR_EL2); > > > + val &= ~(HFGxTR_EL2_nTPIDR_EL0_MASK | > > > + HFGxTR_EL2_nSMPRI_EL1_MASK); > > > + write_sysreg_s(val, SYS_HFGWTR_EL2); > > > + } > > > If the CPUs do not have FGT, what provides the equivalent trapping? > > Nothing for nVHE mode. That's what I feared. > > > If FGT is mandatory when SME exists, then you should simplify the > > condition. > > OK, I'll remove the defensiveness here. FGT is mandatory from v8.6 and > SME is a v9 feature so people shouldn't build a SME implementation that > lacks FGT. Can you then please make it that SME doesn't get enabled at all if FGT isn't present? It would also be good to have a clarification in the architecture that it isn't allowed to build SME without FGT (specially given that v9.0 is congruent to v8.5, and thus doesn't have FGT). Thanks, M. -- Without deviation from the norm, progress is not possible.