Re: [PATCH v15 05/37] KVM: arm64: CCA: Check for LPA2 support
From: Suzuki K Poulose
Date: Thu Jul 16 2026 - 05:27:18 EST
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 <steven.price@xxxxxxx>
Reviewed-by: Suzuki K Poulose <suzuki.poulose@xxxxxxx>
---
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 */
}