From: Suzuki K Poulose <suzuki.poulose@arm.com>
To: Marc Zyngier <maz@kernel.org>
Cc: kvm@vger.kernel.org, kvmarm@lists.linux.dev, 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, gshan@redhat.com,
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
Subject: Re: [PATCH v17 03/20] KVM: arm64: Track the type of VM in kvm_arch
Date: Fri, 11 Sep 2026 18:06:46 +0100 [thread overview]
Message-ID: <06535dcb-265d-4602-a970-e6c584a01d1a@arm.com> (raw)
In-Reply-To: <86fqzf7okc.wl-maz@kernel.org>
Hi Marc,
On 11/09/2026 17:14, Marc Zyngier wrote:
> On Tue, 08 Sep 2026 17:22:06 +0100,
> Suzuki K Poulose <suzuki.poulose@arm.com> wrote:
>>
>> KVM arm64 has different types of VMs with all the different modes in which the
>> hypervisor code can be run. e.g., VHE, nVHE, PKVM etc. Then there is protected
>> VM and normal VMs with PKVM. We might soon add other types, e.g., Arm CCA Realm.
>> So in an effort to make the handling of these different types of VMs a bit more
>> friendlier to the eyes, add a VM flavor to the kvm_arch and we could then add
>> handlers for different operations based on the VM type.
>>
>> Keep the flavor initialisation at the beginning to allow for the detection
>> early enough and fail out on any unsupported requests. (e.g., protected on !PKVM)
>>
>> With that, use the vm_flavor to detect if a VM is protected VM on PKVM.
>>
>> Based on a patch by Marc Zyngier
>>
>> Suggested-by: Marc Zyngier <maz@kernel.org>
>> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
>> ---
>> arch/arm64/include/asm/kvm_host.h | 12 ++++++++++--
>> arch/arm64/kvm/arm.c | 27 ++++++++++++++++++++++++---
>> arch/arm64/kvm/hyp/nvhe/pkvm.c | 2 +-
>> arch/arm64/kvm/pkvm.c | 1 -
>> 4 files changed, 35 insertions(+), 7 deletions(-)
>>
>> diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
>> index 27fe0cd5b2d7a..d0dccc9ad6aa8 100644
>> --- a/arch/arm64/include/asm/kvm_host.h
>> +++ b/arch/arm64/include/asm/kvm_host.h
>> @@ -257,7 +257,6 @@ struct kvm_protected_vm {
>> pkvm_handle_t handle;
>> struct kvm_hyp_memcache teardown_mc;
>> struct kvm_hyp_memcache stage2_teardown_mc;
>> - bool is_protected;
>> bool is_created;
>>
>> /*
>> @@ -306,9 +305,18 @@ enum fgt_group_id {
>> __NR_FGT_GROUP_IDS__
>> };
>>
>> +enum kvm_arm_vm_flavor {
>> + VM_NVHE,
>> + VM_VHE,
>> + VM_PKVM, /* Normal guests on PKVM */
>> + VM_PROTECTED_PKVM, /* Protected VM */
>> + VM_FLAVOR_MAX,
>> +};
>> +
>
> My original design did introduce classes of VMs, which I definitely
> want to retain so that we don't pointlessly differentiate CCA VMs from
> pKVM protected guests when at all possible. Realms are protected VMs,
> full stop.
>
> With that in mind, this should read:
>
> enum kvm_arm_vm_flavor {
> VM_NVHE,
> VM_VHE,
> VM_PKVM, /* Normal guests on PKVM */
> MARKER(__VM_FLAVOR_PROTECTED__),
> VM_PROTECTED_PKVM, /* Protected VM */
> VM_REALM, /* CCA */
> VM_FLAVOR_MAX,
> };
There is something similar later in the series, that adds :
"Confidential" guests in Patch 8, which makes this :
VM_NVHE,
VM_VHE,
VM_PKVM, /* Normal guests on PKVM */
+ MARKER(__VM_CONFIDENTIAL),
VM_PROTECTED_PKVM, /* Protected VM */
VM_REALM, /* CCA */
VM_FLAVOR_MAX,
@@ -1524,9 +1525,11 @@ struct kvm *kvm_arch_alloc_vm(void);
#define __KVM_HAVE_ARCH_FLUSH_REMOTE_TLBS_RANGE
+#define kvm_vm_is_confidential(kvm) ((kvm)->arch.vm_flavor >=
__VM_CONFIDENTIAL)
#define kvm_vm_is_protected(kvm) ((kvm)->arch.vm_flavor ==
VM_PROTECTED_PKVM)
#define kvm_vm_is_realm(kvm) ((kvm)->arch.vm_flavor == VM_REALM)
+#define vcpu_is_confidential(vcpu) kvm_vm_is_confidential((vcpu)->kvm)
#define vcpu_is_protected(vcpu) kvm_vm_is_protected((vcpu)->kvm)
#define vcpu_is_rec(vcpu) kvm_vm_is_realm((vcpu)->kvm)
>
>> struct kvm_arch {
>> struct kvm_s2_mmu mmu;
>>
>> + enum kvm_arm_vm_flavor vm_flavor;
>> /*
>> * Fine-Grained UNDEF, mimicking the FGT layout defined by the
>> * architecture. We track them globally, as we present the
>> @@ -1504,7 +1512,7 @@ struct kvm *kvm_arch_alloc_vm(void);
>>
>> #define __KVM_HAVE_ARCH_FLUSH_REMOTE_TLBS_RANGE
>>
>> -#define kvm_vm_is_protected(kvm) (is_protected_kvm_enabled() && (kvm)->arch.pkvm.is_protected)
>> +#define kvm_vm_is_protected(kvm) ((kvm)->arch.vm_flavor == VM_PROTECTED_PKVM)
>
> and this should read ((kvm)->arch.vm_flavor >= __VM_FLAVOR_PROTECTED__).
Ack. Didn't want to change "kvm_vm_is_protected()" to broaden the
scope, as it is widely used already for "Protected PKVM". And if we
need to check Realm vs Protected VM, that might make it tricky.
I will see how this is required in the end result (in my integration
branch), to see if we really need to distinguish Protected PKVM vs REALM
in any cases.
Cheers
Suzuki
>
> Thanks,
>
> M.
>
next prev parent reply other threads:[~2026-09-11 17:07 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-08 16:22 [PATCH v17 00/20] KVM: arm64: CCA: Add basic plumbing for Realms Suzuki K Poulose
2026-09-08 16:22 ` [PATCH v17 01/20] KVM: arm64: Include kvm_emulate.h in kvm/arm_psci.h Suzuki K Poulose
2026-09-09 11:20 ` Fuad Tabba
2026-09-08 16:22 ` [PATCH v17 02/20] KVM: arm64: Avoid including linux/kvm_host.h in kvm_pgtable.h Suzuki K Poulose
2026-09-09 11:22 ` Fuad Tabba
2026-09-09 11:24 ` Suzuki K Poulose
2026-09-10 3:40 ` Gavin Shan
2026-09-08 16:22 ` [PATCH v17 03/20] KVM: arm64: Track the type of VM in kvm_arch Suzuki K Poulose
2026-09-09 11:28 ` Fuad Tabba
2026-09-09 11:30 ` Suzuki K Poulose
2026-09-10 3:39 ` Gavin Shan
2026-09-10 6:35 ` Suzuki K Poulose
2026-09-11 16:14 ` Marc Zyngier
2026-09-11 17:06 ` Suzuki K Poulose [this message]
2026-09-08 16:22 ` [PATCH v17 04/20] KVM: arm64: Refactor the vcpu_load to allow for VM specific callbacks Suzuki K Poulose
2026-09-10 4:00 ` Gavin Shan
2026-09-10 10:21 ` Suzuki K Poulose
2026-09-08 16:22 ` [PATCH v17 05/20] KVM: arm64: Add vcpu load/put call backs for flavors Suzuki K Poulose
2026-09-10 5:33 ` Gavin Shan
2026-09-10 8:40 ` Suzuki K Poulose
2026-09-08 16:22 ` [PATCH v17 06/20] KVM: arm64: CCA: Add a new mode for supporting Realm guests Suzuki K Poulose
2026-09-09 3:26 ` Kohei Enju
2026-09-09 10:48 ` Marc Zyngier
2026-09-10 4:49 ` Kohei Enju
2026-09-10 5:53 ` Gavin Shan
2026-09-10 8:43 ` Suzuki K Poulose
2026-09-10 9:40 ` Gavin Shan
2026-09-08 16:22 ` [PATCH v17 07/20] KVM: arm64: CCA: Introduce Realms Suzuki K Poulose
2026-09-08 16:22 ` [PATCH v17 08/20] KVM: arm64: coco: Add a helper to check if a VM is confidential compute guest Suzuki K Poulose
2026-09-08 16:22 ` [PATCH v17 09/20] KVM: arm64: coco: arch_timer: Prevent timer offset configuration Suzuki K Poulose
2026-09-08 16:22 ` [PATCH v17 10/20] KVM: arm64: coco: Disable Steal time accounting for coco guests Suzuki K Poulose
2026-09-09 11:45 ` Fuad Tabba
2026-09-09 11:52 ` Suzuki K Poulose
2026-09-09 12:23 ` Fuad Tabba
2026-09-10 10:27 ` Suzuki K Poulose
2026-09-10 12:42 ` Fuad Tabba
2026-09-10 12:44 ` Suzuki K Poulose
2026-09-08 16:22 ` [PATCH v17 11/20] KVM: arm64: coco: Don't handle MMIO with no ISV Suzuki K Poulose
2026-09-08 16:22 ` [PATCH v17 12/20] KVM: arm64: CCA: Support timers in realm RECs Suzuki K Poulose
2026-09-08 16:22 ` [PATCH v17 13/20] KVM: arm64: CCA: Add VCPU load/put for Realms Suzuki K Poulose
2026-09-08 16:22 ` [PATCH v17 14/20] KVM: arm64: CCA: Don't expose unsupported capabilities for realm guests Suzuki K Poulose
2026-09-08 16:22 ` [PATCH v17 15/20] KVM: arm64: CCA: WARN on injected undef exceptions Suzuki K Poulose
2026-09-08 16:22 ` [PATCH v17 16/20] KVM: arm64: CCA: Provide register list for unfinalized RECs Suzuki K Poulose
2026-09-08 16:22 ` [PATCH v17 17/20] KVM: arm64: CCA: Provide an accurate register list Suzuki K Poulose
2026-09-08 16:22 ` [PATCH v17 18/20] KVM: arm64: Reuse kvm_stage2_unmap_range in kvm_unmap_gfn_range Suzuki K Poulose
2026-09-09 11:50 ` Fuad Tabba
2026-09-08 16:22 ` [PATCH v17 19/20] KVM: arm64: Add VM specific callback for S2 MMU operations Suzuki K Poulose
2026-09-08 16:22 ` [PATCH v17 20/20] KVM: arm64: Abstract out memory abort handling Suzuki K Poulose
2026-09-09 13:18 ` [PATCH v17 00/20] KVM: arm64: CCA: Add basic plumbing for Realms Fuad Tabba
2026-09-09 13:52 ` Suzuki K Poulose
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=06535dcb-265d-4602-a970-e6c584a01d1a@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=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=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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox