Re: [PATCH v15 05/37] KVM: arm64: CCA: Check for LPA2 support
Suzuki K Poulose <[email protected]>
| Newsgroups | dev.linux.lists.linux-coco,dev.linux.lists.kvmarm,org.infradead.lists.linux-arm-kernel,org.kernel.vger.kvm,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On 15/07/2026 15:28, Steven Price wrote: > If KVM has enabled LPA2 support then check that the RMM also supports > it. If there is a mismatch then disable support for realm guests as the > VMM may attempt to create a guest which is incompatible with the RMM. > We may be able to relax this in the future with the UNPROT MAP/UNMAP RMI ABIs now accepting the OutputAddress and Attributes separately and gracefully handle cases where the requested IPA size exceeds the RMM limit. But practically I don't see why we should support it. So : > Signed-off-by: Steven Price <[email protected]> Reviewed-by: Suzuki K Poulose <[email protected]> > --- > v15: > * Extend rmi_has_feature() to take the register number and check the > presence of SHA-256 support which is default. > v13: > * New patch > --- > arch/arm64/kvm/rmi.c | 25 +++++++++++++++++++++++++ > 1 file changed, 25 insertions(+) > > diff --git a/arch/arm64/kvm/rmi.c b/arch/arm64/kvm/rmi.c > index 384991d69f78..247c4f033945 100644 > --- a/arch/arm64/kvm/rmi.c > +++ b/arch/arm64/kvm/rmi.c > @@ -5,9 +5,31 @@ > > #include <linux/kvm_host.h> > > +#include <asm/kvm_pgtable.h> > #include <asm/rmi_cmds.h> > #include <asm/virt.h> > > +static bool rmi_has_feature(int reg, unsigned long feature) > +{ > + return !!u64_get_bits(rmi_feat_reg(reg), feature); > +} > + > +static int rmm_check_features(void) > +{ > + if (kvm_lpa2_is_enabled() && > + !rmi_has_feature(0, RMI_FEATURE_REGISTER_0_LPA2)) { > + kvm_err("RMM doesn't support LPA2\n"); > + return -ENXIO; > + } > + > + if (!rmi_has_feature(1, RMI_FEATURE_REGISTER_1_HASH_SHA_256)) { > + kvm_err("RMM doesn't support SHA-256 measurements\n"); > + return -ENXIO; > + } > + > + return 0; > +} > + > void kvm_init_rmi(void) > { > /* > @@ -20,5 +42,8 @@ void kvm_init_rmi(void) > if (!is_rmi_available()) > return; > > + if (rmm_check_features()) > + return; > + > /* Future patch will enable static branch kvm_rmi_is_available */ > }