[PATCH v15 05/37] KVM: arm64: CCA: Check for LPA2 support

Suzuki K Poulose suzuki.poulose at arm.com
Thu Jul 16 02:23:32 PDT 2026


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 at arm.com>

Reviewed-by: Suzuki K Poulose <suzuki.poulose at arm.com>

> ---
> 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 */
>   }




More information about the linux-arm-kernel mailing list