From: Suzuki K Poulose <suzuki.poulose@arm.com>
To: Gavin Shan <gshan@redhat.com>,
kvm@vger.kernel.org, kvmarm@lists.linux.dev
Cc: maz@kernel.org, will@kernel.org, catalin.marinas@arm.com,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, steven.price@arm.com,
aneesh.kumar@kernel.org, oupton@kernel.org, joey.gouly@arm.com,
tabba@google.com, yuzenghui@huawei.com,
linux-coco@lists.linux.dev, gankulkarni@os.amperecomputing.com,
sdonthineni@nvidia.com, alpergun@google.com,
fj0570is@fujitsu.com, WeiLin.Chang@arm.com,
lpieralisi@kernel.org, enju.kohei@fujitsu.com,
sudeep.holla@arm.com, jonathan.cameron@oss.qualcomm.com
Subject: Re: [PATCH v22 18/23] KVM: arm64: CCA: Introduce Realms
Date: Tue, 6 Oct 2026 07:10:53 +0200 [thread overview]
Message-ID: <05dbdd69-411f-40e2-a7fa-8651ce2a2556@arm.com> (raw)
In-Reply-To: <9bbb3b3c-522f-4deb-9f32-0fcf731dd0bb@redhat.com>
On 06/10/2026 04:42, Gavin Shan wrote:
> On 10/5/26 7:07 PM, Suzuki K Poulose wrote:
>> From: Steven Price <steven.price@arm.com>
>>
>> Add foundational work for supporting Realms.
>> - Add a new VM flavor.
>> - At KVM init, check if the KVM can support Realms (though not
>> functional
>> yet) and will be advertised by static key kvm_rmi_is_available. This
>> will be turned on in a later patches, once we have all the bits and
>> pieces ready. For now check if we are blessed with KVM_MODE_RMM.
>> - Add realm specific tracking in kvm_arch. Since Realm and protected
>> pKVM
>> states are mutually exclusive, move them into a union.
>>
>> Please note that we cannot create Realm VMs yet. This requires further
>> changes to the UABI and core RMI driver support, which will come later.
>>
>> Reviewed-by: Jonathan Cameron <jonathan.cameron@oss.qualcomm.com>
>> Signed-off-by: Steven Price <steven.price@arm.com>
>> Co-developed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
>> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
>> ---
>> arch/arm64/include/asm/kvm_emulate.h | 16 ++++++++
>> arch/arm64/include/asm/kvm_host.h | 19 ++++++---
>> arch/arm64/include/asm/kvm_rmi.h | 61 ++++++++++++++++++++++++++++
>> arch/arm64/include/asm/virt.h | 1 +
>> arch/arm64/kvm/Makefile | 2 +-
>> arch/arm64/kvm/arm.c | 6 +++
>> arch/arm64/kvm/mmu.c | 1 +
>> arch/arm64/kvm/rmi.c | 18 ++++++++
>> 8 files changed, 118 insertions(+), 6 deletions(-)
>> create mode 100644 arch/arm64/include/asm/kvm_rmi.h
>> create mode 100644 arch/arm64/kvm/rmi.c
>>
>> diff --git a/arch/arm64/include/asm/kvm_emulate.h b/arch/arm64/
>> include/asm/kvm_emulate.h
>> index a3c1928bdf743..d360a8b05b8bf 100644
>> --- a/arch/arm64/include/asm/kvm_emulate.h
>> +++ b/arch/arm64/include/asm/kvm_emulate.h
>> @@ -793,4 +793,20 @@ static inline void kvm_reset_vcpu_psci(struct
>> kvm_vcpu *vcpu,
>> vcpu_set_reg(vcpu, 0, reset_state->r0);
>> }
>> +static inline enum realm_state kvm_realm_state(struct kvm *kvm)
>> +{
>> + return READ_ONCE(kvm->arch.realm.state);
>> +}
>> +
>> +static inline void kvm_set_realm_state(struct kvm *kvm,
>> + enum realm_state new_state)
>> +{
>> + WRITE_ONCE(kvm->arch.realm.state, new_state);
>> +}
>> +
>> +static inline bool kvm_realm_is_created(struct kvm *kvm)
>> +{
>> + return kvm_vm_is_realm(kvm) && kvm_realm_state(kvm) !=
>> REALM_STATE_NONE;
>> +}
>> +
>> #endif /* __ARM64_KVM_EMULATE_H__ */
>> diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/
>> asm/kvm_host.h
>> index dfa9d4ec61a76..3debffef638a4 100644
>> --- a/arch/arm64/include/asm/kvm_host.h
>> +++ b/arch/arm64/include/asm/kvm_host.h
>> @@ -27,6 +27,7 @@
>> #include <asm/fpsimd.h>
>> #include <asm/kvm.h>
>> #include <asm/kvm_asm.h>
>> +#include <asm/kvm_rmi.h>
>> #include <asm/vncr_mapping.h>
>> #define __KVM_HAVE_ARCH_INTC_INITIALIZED
>> @@ -334,6 +335,7 @@ enum kvm_arm_vm_flavor {
>> VM_PKVM, /* Normal guests on pKVM */
>> MARKER(__VM_PROTECTED),
>> VM_PROTECTED_PKVM, /* Protected VM */
>> + VM_REALM, /* CCA */
>> VM_FLAVOR_MAX
>> };
>> @@ -450,11 +452,14 @@ struct kvm_arch {
>> /* Count the number of VNCR_EL2 TLBs */
>> atomic_t vncr_tlb_count;
>> - /*
>> - * For an untrusted host VM, 'pkvm.handle' is used to lookup
>> - * the associated pKVM instance in the hypervisor.
>> - */
>> - struct kvm_protected_vm pkvm;
>> + union {
>> + /*
>> + * For an untrusted host VM, 'pkvm.handle' is used to lookup
>> + * the associated pKVM instance in the hypervisor.
>> + */
>> + struct kvm_protected_vm pkvm;
>> + struct realm realm;
>> + };
>> #ifdef CONFIG_PTDUMP_STAGE2_DEBUGFS
>> /* Nested virtualization info */
>> @@ -1565,6 +1570,10 @@ struct kvm *kvm_arch_alloc_vm(void);
>> (__kvm && kvm_vm_is_protected_pkvm(__kvm)); \
>> })
>> +
>> +#define kvm_vm_is_realm(kvm) ((kvm)->arch.vm_flavor == VM_REALM)
>> +#define vcpu_is_rec(vcpu) kvm_vm_is_realm((vcpu)->kvm)
>> +
>
> vcpu_is_rec() isn't safely called in nVHE hyp stub. So do we need add
> something
> similiar to what we had for vcpu_is_protected(vcpu) in PATCH[05]?
>
> #ifdef __KVM_NVHE_HYPERVISOR__
> /* vcpu_is_rec() isn't expected to called in nVHE hyp stub */
> #define vcpu_is_rec(vcpu) BUILD_BUG_ON(1)
> #else
> #define vcpu_is_rec(vcpu) kvm_vm_is_realm((vcpu)->kvm)
> #endif
>
>
>> #define kvm_vm_hyp_is_distrusting(kvm) ((kvm)->arch.vm_flavor >=
>> __VM_DISTRUSTING_HYP)
>> int kvm_arm_vcpu_finalize(struct kvm_vcpu *vcpu, int feature);
>> diff --git a/arch/arm64/include/asm/kvm_rmi.h b/arch/arm64/include/
>> asm/kvm_rmi.h
>> new file mode 100644
>> index 0000000000000..44f5c75a27b5b
>> --- /dev/null
>> +++ b/arch/arm64/include/asm/kvm_rmi.h
>> @@ -0,0 +1,61 @@
>> +/* SPDX-License-Identifier: GPL-2.0 */
>> +/*
>> + * Copyright (C) 2023-2026 ARM Ltd.
>> + */
>> +
>> +#ifndef __ASM_KVM_RMI_H
>> +#define __ASM_KVM_RMI_H
>> +
>> +/**
>> + * enum realm_state - State of a Realm
>> + *
>> + * Mirrors the RMM's Realm lifecycle states where they are meaningful
>> to KVM,
>> + * with REALM_STATE_DYING being a KVM-internal state used to prevent
>> further
>> + * requests while teardown is in progress. KVM does not track
>> REALM_SYSTEM_OFF
>> + * or REALM_ZOMBIE separately as they naturally lead to teardown.
>> + */
>> +enum realm_state {
>> + /**
>> + * @REALM_STATE_NONE:
>> + * Realm has not yet been created. rmi_realm_create() has not
>> + * yet been called.
>> + */
>> + REALM_STATE_NONE,
>> + /**
>> + * @REALM_STATE_NEW:
>> + * Realm is under construction, rmi_realm_create() has been
>> + * called, but it is not yet activated. Pages may be populated.
> ^^^^^
> Granule instead of page is the term applicable to RMM. Lets use a generic
> term 'memory' here. Also, lets mention the name of the function used to
> populate the memory (granules), which is consistent to the comments for
> REALM_STATE_ACTIVE.
>
> Memory may be populated by rmi_rtt_data_map_init().
>
>
>> + */
>> + REALM_STATE_NEW,
>> + /**
>> + * @REALM_STATE_ACTIVE:
>> + * Realm has been created and is eligible for execution with
>> + * rmi_rec_enter(). Pages may no longer be populated with
>> + * rmi_data_create().
>> + */
>> + REALM_STATE_ACTIVE,
>
> rmi_data_create() is an invalid function name.
>
> Memory can't longer be populated using rmi_rtt_data_map_init().
Ack, thanks for spotting, I will fix them.
Cheers
Suzuki
next prev parent reply other threads:[~2026-10-06 5:10 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-05 9:07 [PATCH v22 00/23] KVM: arm64: CCA: Add basic plumbing for Realms Suzuki K Poulose
2026-10-05 9:07 ` [PATCH v22 01/23] KVM: arm64: protected VM: Handle user writes to CNTVCT_EL0/CNTPCT_EL0 Suzuki K Poulose
2026-10-06 0:02 ` Gavin Shan
2026-10-05 9:07 ` [PATCH v22 02/23] KVM: arm64: Disable Steal time accounting for protected guests Suzuki K Poulose
2026-10-06 0:03 ` Gavin Shan
2026-10-05 9:07 ` [PATCH v22 03/23] KVM: arm64: Include kvm_emulate.h in kvm/arm_psci.h Suzuki K Poulose
2026-10-05 9:07 ` [PATCH v22 04/23] KVM: arm64: Avoid including linux/kvm_host.h in kvm_pgtable.h Suzuki K Poulose
2026-10-05 9:07 ` [PATCH v22 05/23] KVM: arm64: Track the type of VM in kvm_arch Suzuki K Poulose
2026-10-06 3:55 ` Gavin Shan
2026-10-06 8:33 ` Marc Zyngier
2026-10-06 8:49 ` Suzuki K Poulose
2026-10-05 9:07 ` [PATCH v22 06/23] KVM: arm64: Don't call vcpu_set_pauth_traps for pKVM host Suzuki K Poulose
2026-10-06 0:29 ` Gavin Shan
2026-10-05 9:07 ` [PATCH v22 07/23] KVM: arm64: Refactor the vcpu_load to allow for VM specific callbacks Suzuki K Poulose
2026-10-05 9:07 ` [PATCH v22 08/23] KVM: arm64: Add vcpu load/put call backs for flavors Suzuki K Poulose
2026-10-06 2:15 ` Gavin Shan
2026-10-05 9:07 ` [PATCH v22 09/23] KVM: arm64: Prevent unsupported vcpu features for VM types Suzuki K Poulose
2026-10-06 2:24 ` Gavin Shan
2026-10-06 2:25 ` Gavin Shan
2026-10-06 5:16 ` Suzuki K Poulose
2026-10-06 8:50 ` Marc Zyngier
2026-10-05 9:07 ` [PATCH v22 10/23] KVM: arm64: Consolidate stage2 unmap range into kvm_stage2_unmap_range Suzuki K Poulose
2026-10-06 2:37 ` Gavin Shan
2026-10-05 9:07 ` [PATCH v22 11/23] KVM: arm64: Add VM specific callback for S2 MMU operations Suzuki K Poulose
2026-10-06 3:00 ` Gavin Shan
2026-10-06 5:22 ` Suzuki K Poulose
2026-10-06 9:24 ` Marc Zyngier
2026-10-06 10:36 ` Suzuki K Poulose
2026-10-06 15:14 ` Suzuki K Poulose
2026-10-05 9:07 ` [PATCH v22 12/23] KVM: arm64: Use a local kvm pointer in kvm_handle_guest_abort() Suzuki K Poulose
2026-10-06 3:02 ` Gavin Shan
2026-10-05 9:07 ` [PATCH v22 13/23] KVM: arm64: Abstract out memory abort handling Suzuki K Poulose
2026-10-06 3:07 ` Gavin Shan
2026-10-06 5:25 ` Suzuki K Poulose
2026-10-05 9:07 ` [PATCH v22 14/23] KVM: arm64: Mandate VGIC v3 for pKVM VMs and Realms Suzuki K Poulose
2026-10-06 3:10 ` Gavin Shan
2026-10-05 9:07 ` [PATCH v22 15/23] KVM: arm64: CCA: Add a new mode for supporting Realm guests Suzuki K Poulose
2026-10-06 3:11 ` Gavin Shan
2026-10-05 9:07 ` [PATCH v22 16/23] KVM: arm64: CCA: Add VCPU load/put for Realms Suzuki K Poulose
2026-10-06 3:16 ` Gavin Shan
2026-10-06 5:09 ` Suzuki K Poulose
2026-10-05 9:07 ` [PATCH v22 17/23] KVM: arm64: CCA: Add bare minimal S2 operations for Realm Suzuki K Poulose
2026-10-06 3:18 ` Gavin Shan
2026-10-05 9:07 ` [PATCH v22 18/23] KVM: arm64: CCA: Introduce Realms Suzuki K Poulose
2026-10-06 3:42 ` Gavin Shan
2026-10-06 5:10 ` Suzuki K Poulose [this message]
2026-10-05 9:07 ` [PATCH v22 19/23] KVM: arm64: CCA: Don't expose unsupported capabilities for realm guests Suzuki K Poulose
2026-10-06 4:58 ` Gavin Shan
2026-10-05 9:07 ` [PATCH v22 20/23] KVM: arm64: CCA: WARN on injected undef exceptions Suzuki K Poulose
2026-10-06 3:49 ` Gavin Shan
2026-10-05 9:07 ` [PATCH v22 21/23] KVM: arm64: CCA: Support timers in realm RECs Suzuki K Poulose
2026-10-06 5:44 ` Gavin Shan
2026-10-05 9:07 ` [PATCH v22 22/23] KVM: arm64: CCA: Expose SVE VL register before VCPU finalization Suzuki K Poulose
2026-10-06 5:35 ` Gavin Shan
2026-10-06 5:57 ` Suzuki K Poulose
2026-10-05 9:07 ` [PATCH v22 23/23] KVM: arm64: CCA: Control user register access for Realms Suzuki K Poulose
2026-10-05 9:30 ` sashiko-bot
2026-10-05 13:08 ` Suzuki K Poulose
2026-10-06 5:47 ` Gavin Shan
2026-10-06 6:01 ` Suzuki K Poulose
2026-10-06 6:16 ` Gavin Shan
2026-10-06 12:36 ` Suzuki K Poulose
2026-10-06 22:00 ` Gavin Shan
2026-10-06 6:23 ` Gavin Shan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=05dbdd69-411f-40e2-a7fa-8651ce2a2556@arm.com \
--to=suzuki.poulose@arm.com \
--cc=WeiLin.Chang@arm.com \
--cc=alpergun@google.com \
--cc=aneesh.kumar@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=enju.kohei@fujitsu.com \
--cc=fj0570is@fujitsu.com \
--cc=gankulkarni@os.amperecomputing.com \
--cc=gshan@redhat.com \
--cc=joey.gouly@arm.com \
--cc=jonathan.cameron@oss.qualcomm.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-coco@lists.linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=lpieralisi@kernel.org \
--cc=maz@kernel.org \
--cc=oupton@kernel.org \
--cc=sdonthineni@nvidia.com \
--cc=steven.price@arm.com \
--cc=sudeep.holla@arm.com \
--cc=tabba@google.com \
--cc=will@kernel.org \
--cc=yuzenghui@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.