From: Gavin Shan <gshan@redhat.com>
To: Steven Price <steven.price@arm.com>,
kvm@vger.kernel.org, kvmarm@lists.linux.dev
Cc: Catalin Marinas <catalin.marinas@arm.com>,
Marc Zyngier <maz@kernel.org>, Will Deacon <will@kernel.org>,
James Morse <james.morse@arm.com>,
Oliver Upton <oliver.upton@linux.dev>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Zenghui Yu <yuzenghui@huawei.com>,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, Joey Gouly <joey.gouly@arm.com>,
Alexandru Elisei <alexandru.elisei@arm.com>,
Christoffer Dall <christoffer.dall@arm.com>,
Fuad Tabba <tabba@google.com>,
linux-coco@lists.linux.dev,
Ganapatrao Kulkarni <gankulkarni@os.amperecomputing.com>,
Shanker Donthineni <sdonthineni@nvidia.com>,
Alper Gun <alpergun@google.com>,
"Aneesh Kumar K . V" <aneesh.kumar@kernel.org>
Subject: Re: [PATCH v7 12/45] arm64: RME: Allocate/free RECs to match vCPUs
Date: Mon, 3 Mar 2025 17:08:04 +1000 [thread overview]
Message-ID: <7639eca7-8fd8-491c-90bd-1be084fbd710@redhat.com> (raw)
In-Reply-To: <20250213161426.102987-13-steven.price@arm.com>
On 2/14/25 2:13 AM, Steven Price wrote:
> The RMM maintains a data structure known as the Realm Execution Context
> (or REC). It is similar to struct kvm_vcpu and tracks the state of the
> virtual CPUs. KVM must delegate memory and request the structures are
> created when vCPUs are created, and suitably tear down on destruction.
>
> RECs must also be supplied with addition pages - auxiliary (or AUX)
> granules - for storing the larger registers state (e.g. for SVE). The
> number of AUX granules for a REC depends on the parameters with which
> the Realm was created - the RMM makes this information available via the
> RMI_REC_AUX_COUNT call performed after creating the Realm Descriptor (RD).
>
> Note that only some of register state for the REC can be set by KVM, the
> rest is defined by the RMM (zeroed). The register state then cannot be
> changed by KVM after the REC is created (except when the guest
> explicitly requests this e.g. by performing a PSCI call). The RMM also
> requires that the VMM creates RECs in ascending order of the MPIDR.
>
> See Realm Management Monitor specification (DEN0137) for more information:
> https://developer.arm.com/documentation/den0137/
>
> Signed-off-by: Steven Price <steven.price@arm.com>
> ---
> Changes since v6:
> * Avoid reporting the KVM_ARM_VCPU_REC feature if the guest isn't a
> realm guest.
> * Support host page size being larger than RMM's granule size when
> allocating/freeing aux granules.
> Changes since v5:
> * Separate the concept of vcpu_is_rec() and
> kvm_arm_vcpu_rec_finalized() by using the KVM_ARM_VCPU_REC feature as
> the indication that the VCPU is a REC.
> Changes since v2:
> * Free rec->run earlier in kvm_destroy_realm() and adapt to previous patches.
> ---
> arch/arm64/include/asm/kvm_emulate.h | 7 ++
> arch/arm64/include/asm/kvm_host.h | 3 +
> arch/arm64/include/asm/kvm_rme.h | 18 +++
> arch/arm64/kvm/arm.c | 13 +-
> arch/arm64/kvm/reset.c | 11 ++
> arch/arm64/kvm/rme.c | 179 +++++++++++++++++++++++++++
> 6 files changed, 229 insertions(+), 2 deletions(-)
>
With the following one comment addressed:
Reviewed-by: Gavin Shan <gshan@redhat.com>
[...]
>
> /*
> diff --git a/arch/arm64/include/asm/kvm_rme.h b/arch/arm64/include/asm/kvm_rme.h
> index 698bb48a8ae1..5db377943db4 100644
> --- a/arch/arm64/include/asm/kvm_rme.h
> +++ b/arch/arm64/include/asm/kvm_rme.h
> @@ -6,6 +6,7 @@
> #ifndef __ASM_KVM_RME_H
> #define __ASM_KVM_RME_H
>
> +#include <asm/rmi_smc.h>
> #include <uapi/linux/kvm.h>
>
> /**
> @@ -65,6 +66,21 @@ struct realm {
> unsigned int ia_bits;
> };
>
> +/**
> + * struct realm_rec - Additional per VCPU data for a Realm
> + *
> + * @mpidr: MPIDR (Multiprocessor Affinity Register) value to identify this VCPU
> + * @rec_page: Kernel VA of the RMM's private page for this REC
> + * @aux_pages: Additional pages private to the RMM for this REC
> + * @run: Kernel VA of the RmiRecRun structure shared with the RMM
> + */
> +struct realm_rec {
> + unsigned long mpidr;
> + void *rec_page;
> + struct page *aux_pages[REC_PARAMS_AUX_GRANULES];
> + struct rec_run *run;
> +};
> +
REC_PARAMS_AUX_GRANULES represents the maximal number of the auxiliary granules.
Since the base page size is always larger than or equal to granule size (4KB).
The capacity of array @aux_pages[] needs to be REC_PARAMS_AUX_GRANULES. Ideally,
the array's size can be computed dynamically and it's allocated in kvm_create_rec().
Alternatively, to keep the code simple, a comment is needed here to explain why
the array's size has been set to REC_PARAMS_AUX_GRANULES.
An relevant question: Do we plan to support differentiated sizes between page
and granule? I had the assumption this feature will be supported in the future
after the base model (equal page and granule size) gets merged first.
Thanks,
Gavin
next prev parent reply other threads:[~2025-03-03 7:08 UTC|newest]
Thread overview: 103+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-13 16:13 [PATCH v7 00/45] arm64: Support for Arm CCA in KVM Steven Price
2025-02-13 16:13 ` [PATCH v7 01/45] KVM: Prepare for handling only shared mappings in mmu_notifier events Steven Price
2025-03-02 23:36 ` Gavin Shan
2025-03-03 15:05 ` Steven Price
2025-02-13 16:13 ` [PATCH v7 02/45] kvm: arm64: Include kvm_emulate.h in kvm/arm_psci.h Steven Price
2025-03-02 23:39 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 03/45] arm64: RME: Handle Granule Protection Faults (GPFs) Steven Price
2025-03-02 23:43 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 04/45] arm64: RME: Add SMC definitions for calling the RMM Steven Price
2025-03-02 23:52 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 05/45] arm64: RME: Add wrappers for RMI calls Steven Price
2025-03-03 3:42 ` Gavin Shan
2025-03-03 15:05 ` Steven Price
2025-03-05 0:15 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 06/45] arm64: RME: Check for RME support at KVM init Steven Price
2025-03-03 3:58 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 07/45] arm64: RME: Define the user ABI Steven Price
2025-02-14 13:09 ` Aneesh Kumar K.V
2025-03-03 4:10 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 08/45] arm64: RME: ioctls to create and configure realms Steven Price
2025-03-03 4:42 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 09/45] kvm: arm64: Expose debug HW register numbers for Realm Steven Price
2025-03-03 4:48 ` Gavin Shan
2025-03-05 16:25 ` Steven Price
2025-03-05 23:31 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 10/45] arm64: kvm: Allow passing machine type in KVM creation Steven Price
2025-03-03 4:53 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 11/45] arm64: RME: RTT tear down Steven Price
2025-03-03 6:25 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 12/45] arm64: RME: Allocate/free RECs to match vCPUs Steven Price
2025-03-03 7:08 ` Gavin Shan [this message]
2025-03-07 15:43 ` Steven Price
2025-04-08 4:55 ` Gavin Shan
2025-04-07 15:06 ` Wei-Lin Chang
2025-02-13 16:13 ` [PATCH v7 13/45] KVM: arm64: vgic: Provide helper for number of list registers Steven Price
2025-02-13 16:13 ` [PATCH v7 14/45] arm64: RME: Support for the VGIC in realms Steven Price
2025-03-03 18:02 ` Suzuki K Poulose
2025-02-13 16:13 ` [PATCH v7 15/45] KVM: arm64: Support timers in realm RECs Steven Price
2025-03-04 17:59 ` Suzuki K Poulose
2025-02-13 16:13 ` [PATCH v7 16/45] arm64: RME: Allow VMM to set RIPAS Steven Price
2025-03-04 0:45 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 17/45] arm64: RME: Handle realm enter/exit Steven Price
2025-03-04 1:03 ` Gavin Shan
2025-04-07 16:34 ` Steven Price
2025-04-08 5:03 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 18/45] arm64: RME: Handle RMI_EXIT_RIPAS_CHANGE Steven Price
2025-03-04 4:35 ` Gavin Shan
2025-04-07 16:34 ` Steven Price
2025-04-09 0:13 ` Gavin Shan
2025-02-13 16:13 ` [PATCH v7 19/45] KVM: arm64: Handle realm MMIO emulation Steven Price
2025-03-04 4:52 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 20/45] arm64: RME: Allow populating initial contents Steven Price
2025-03-04 5:09 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 21/45] arm64: RME: Runtime faulting of memory Steven Price
2025-02-13 16:14 ` [PATCH v7 22/45] KVM: arm64: Handle realm VCPU load Steven Price
2025-03-04 5:15 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 23/45] KVM: arm64: Validate register access for a Realm VM Steven Price
2025-03-04 5:29 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 24/45] KVM: arm64: Handle Realm PSCI requests Steven Price
2025-03-04 5:38 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 25/45] KVM: arm64: WARN on injected undef exceptions Steven Price
2025-03-04 5:39 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 26/45] arm64: Don't expose stolen time for realm guests Steven Price
2025-03-04 5:42 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 27/45] arm64: rme: allow userspace to inject aborts Steven Price
2025-03-04 5:47 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 28/45] arm64: rme: support RSI_HOST_CALL Steven Price
2025-03-04 6:01 ` Gavin Shan
2025-04-07 16:34 ` Steven Price
2025-04-08 5:19 ` Gavin Shan
2025-04-09 17:31 ` Steven Price
2025-02-13 16:14 ` [PATCH v7 29/45] arm64: rme: Allow checking SVE on VM instance Steven Price
2025-03-04 6:02 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 30/45] arm64: RME: Always use 4k pages for realms Steven Price
2025-03-04 6:23 ` Gavin Shan
2025-04-07 16:34 ` Steven Price
2025-02-13 16:14 ` [PATCH v7 31/45] arm64: rme: Prevent Device mappings for Realms Steven Price
2025-03-04 6:27 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 32/45] arm_pmu: Provide a mechanism for disabling the physical IRQ Steven Price
2025-02-13 16:14 ` [PATCH v7 33/45] arm64: rme: Enable PMU support with a realm guest Steven Price
2025-02-13 16:14 ` [PATCH v7 34/45] kvm: rme: Hide KVM_CAP_READONLY_MEM for realm guests Steven Price
2025-03-04 11:51 ` Gavin Shan
2025-04-07 16:34 ` Steven Price
2025-04-08 6:37 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 35/45] arm64: RME: Propagate number of breakpoints and watchpoints to userspace Steven Price
2025-03-04 23:45 ` Gavin Shan
2025-04-07 16:35 ` Steven Price
2025-04-08 6:39 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 36/45] arm64: RME: Set breakpoint parameters through SET_ONE_REG Steven Price
2025-03-04 23:46 ` Gavin Shan
2025-02-13 16:14 ` [PATCH v7 37/45] arm64: RME: Initialize PMCR.N with number counter supported by RMM Steven Price
2025-02-13 16:14 ` [PATCH v7 38/45] arm64: RME: Propagate max SVE vector length from RMM Steven Price
2025-02-13 16:14 ` [PATCH v7 39/45] arm64: RME: Configure max SVE vector length for a Realm Steven Price
2025-02-13 16:14 ` [PATCH v7 40/45] arm64: RME: Provide register list for unfinalized RME RECs Steven Price
2025-02-13 16:14 ` [PATCH v7 41/45] arm64: RME: Provide accurate register list Steven Price
2025-02-13 16:14 ` [PATCH v7 42/45] arm64: kvm: Expose support for private memory Steven Price
2025-02-13 16:14 ` [PATCH v7 43/45] KVM: arm64: Expose KVM_ARM_VCPU_REC to user space Steven Price
2025-02-13 16:14 ` [PATCH v7 44/45] KVM: arm64: Allow activating realms Steven Price
2025-02-13 16:14 ` [PATCH v7 45/45] WIP: Enable support for PAGE_SIZE>4k Steven Price
2025-03-05 3:53 ` [PATCH v7 00/45] arm64: Support for Arm CCA in KVM Gavin Shan
2025-03-26 2:14 ` Emi Kisanuki (Fujitsu)
2025-03-26 6:14 ` Oliver Upton
2025-04-01 6:54 ` Emi Kisanuki (Fujitsu)
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=7639eca7-8fd8-491c-90bd-1be084fbd710@redhat.com \
--to=gshan@redhat.com \
--cc=alexandru.elisei@arm.com \
--cc=alpergun@google.com \
--cc=aneesh.kumar@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=christoffer.dall@arm.com \
--cc=gankulkarni@os.amperecomputing.com \
--cc=james.morse@arm.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=maz@kernel.org \
--cc=oliver.upton@linux.dev \
--cc=sdonthineni@nvidia.com \
--cc=steven.price@arm.com \
--cc=suzuki.poulose@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