From: Marc Zyngier <maz@kernel.org>
To: Fuad Tabba <tabba@google.com>
Cc: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
oliver.upton@linux.dev, james.clark@linaro.org, will@kernel.org,
joey.gouly@arm.com, suzuki.poulose@arm.com, yuzenghui@huawei.com,
catalin.marinas@arm.com, broonie@kernel.org, qperret@google.com,
kristina.martsenko@arm.com
Subject: Re: [PATCH v3 14/15] KVM: arm64: Convert the SVE guest vcpu flag to a vm flag
Date: Sun, 01 Dec 2024 12:58:47 +0000 [thread overview]
Message-ID: <864j3nv9tk.wl-maz@kernel.org> (raw)
In-Reply-To: <20241128123515.1709777-15-tabba@google.com>
On Thu, 28 Nov 2024 12:35:14 +0000,
Fuad Tabba <tabba@google.com> wrote:
>
> The vcpu flag GUEST_HAS_SVE is per-vcpu, but it is based on what
> is now a per-vm feature. Make the flag per-vm.
>
> Signed-off-by: Fuad Tabba <tabba@google.com>
> ---
> arch/arm64/include/asm/kvm_emulate.h | 6 +++---
> arch/arm64/include/asm/kvm_host.h | 10 ++++++----
> arch/arm64/kvm/hyp/include/hyp/switch.h | 2 +-
> arch/arm64/kvm/hyp/nvhe/hyp-main.c | 2 +-
> arch/arm64/kvm/hyp/nvhe/pkvm.c | 11 +++++++----
> arch/arm64/kvm/hyp/nvhe/switch.c | 8 ++++----
> arch/arm64/kvm/hyp/vhe/switch.c | 2 +-
> arch/arm64/kvm/reset.c | 2 +-
> 8 files changed, 24 insertions(+), 19 deletions(-)
>
> diff --git a/arch/arm64/include/asm/kvm_emulate.h b/arch/arm64/include/asm/kvm_emulate.h
> index 406e99a452bf..ae6d0dc0e4ff 100644
> --- a/arch/arm64/include/asm/kvm_emulate.h
> +++ b/arch/arm64/include/asm/kvm_emulate.h
> @@ -620,7 +620,7 @@ static __always_inline void kvm_write_cptr_el2(u64 val)
> }
>
> /* Resets the value of cptr_el2 when returning to the host. */
> -static __always_inline void kvm_reset_cptr_el2(struct kvm_vcpu *vcpu)
> +static __always_inline void kvm_reset_cptr_el2(struct kvm *kvm)
I'd rather you avoid the resulting churn:
static __always_inline void kvm_reset_cptr_el2(struct kvm_vcpu *vcpu)
{
struct kvm *kvm = kern_hyp_va(vcpu->kvm);
[...]
which does the trick at zero cost. It is also more logical to keep the
vcpu as a parameter, as the per-VM-ness is only an implementation
detail.
> {
> u64 val;
>
> @@ -631,14 +631,14 @@ static __always_inline void kvm_reset_cptr_el2(struct kvm_vcpu *vcpu)
> } else if (has_hvhe()) {
> val = CPACR_ELx_FPEN;
>
> - if (!vcpu_has_sve(vcpu) || !guest_owns_fp_regs())
> + if (!kvm_has_sve(kvm) || !guest_owns_fp_regs())
> val |= CPACR_ELx_ZEN;
> if (cpus_have_final_cap(ARM64_SME))
> val |= CPACR_ELx_SMEN;
> } else {
> val = CPTR_NVHE_EL2_RES1;
>
> - if (vcpu_has_sve(vcpu) && guest_owns_fp_regs())
> + if (kvm_has_sve(kvm) && guest_owns_fp_regs())
> val |= CPTR_EL2_TZ;
> if (!cpus_have_final_cap(ARM64_SME))
> val |= CPTR_EL2_TSM;
> diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
> index 680ecef1d7aa..c5c80c789ad0 100644
> --- a/arch/arm64/include/asm/kvm_host.h
> +++ b/arch/arm64/include/asm/kvm_host.h
> @@ -331,6 +331,8 @@ struct kvm_arch {
> #define KVM_ARCH_FLAG_ID_REGS_INITIALIZED 7
> /* Fine-Grained UNDEF initialised */
> #define KVM_ARCH_FLAG_FGU_INITIALIZED 8
> + /* SVE exposed to guest */
> +#define KVM_ARCH_FLAG_GUEST_HAS_SVE 9
> unsigned long flags;
>
> /* VM-wide vCPU feature set */
> @@ -862,8 +864,6 @@ struct kvm_vcpu_arch {
> #define vcpu_set_flag(v, ...) __vcpu_set_flag((v), __VA_ARGS__)
> #define vcpu_clear_flag(v, ...) __vcpu_clear_flag((v), __VA_ARGS__)
>
> -/* SVE exposed to guest */
> -#define GUEST_HAS_SVE __vcpu_single_flag(cflags, BIT(0))
> /* SVE config completed */
> #define VCPU_SVE_FINALIZED __vcpu_single_flag(cflags, BIT(1))
> /* KVM_ARM_VCPU_INIT completed */
> @@ -956,8 +956,10 @@ struct kvm_vcpu_arch {
> KVM_GUESTDBG_USE_HW | \
> KVM_GUESTDBG_SINGLESTEP)
>
> -#define vcpu_has_sve(vcpu) (system_supports_sve() && \
> - vcpu_get_flag(vcpu, GUEST_HAS_SVE))
> +#define kvm_has_sve(kvm) \
> + test_bit(KVM_ARCH_FLAG_GUEST_HAS_SVE, &(kvm)->arch.flags)
> +#define vcpu_has_sve(vcpu) \
> + kvm_has_sve((vcpu)->kvm)
Two things:
- it is definitely worth keeping the system_supports_sve() helper, so
that we avoid checking flags for nothing
- Since you preserve the vcpu_has_sve(), how about writing it as:
#ifdef __KVM_NVHE_HYPERVISOR__
#define vcpu_has_sve(v) kvm_has_sve(kern_hyp_va((v)->kvm))
#else
#define vcpu_has_sve(v) kvm_has_sve((v)->kvm)
#endif
which will avoid the churn in this patch, and makes it hard to get
it wrong?
Thanks,
M.
--
Without deviation from the norm, progress is not possible.
next prev parent reply other threads:[~2024-12-01 12:58 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-28 12:35 [PATCH v3 00/15] KVM: arm64: Rework guest VM fixed feature handling and trapping in pKVM Fuad Tabba
2024-11-28 12:35 ` [PATCH v3 01/15] KVM: arm64: Consolidate allowed and restricted VM feature checks Fuad Tabba
2024-11-28 12:35 ` [PATCH v3 02/15] KVM: arm64: Group setting traps for protected VMs by control register Fuad Tabba
2024-11-28 12:35 ` [PATCH v3 03/15] KVM: arm64: Move checking protected vcpu features to a separate function Fuad Tabba
2024-11-28 12:35 ` [PATCH v3 04/15] KVM: arm64: Use KVM extension checks for allowed protected VM capabilities Fuad Tabba
2024-11-28 12:35 ` [PATCH v3 05/15] KVM: arm64: Initialize feature id registers for protected VMs Fuad Tabba
2024-11-28 12:35 ` [PATCH v3 06/15] KVM: arm64: Set protected VM traps based on its view of feature registers Fuad Tabba
2024-11-28 12:35 ` [PATCH v3 07/15] KVM: arm64: Rework specifying restricted features for protected VMs Fuad Tabba
2024-11-28 12:35 ` [PATCH v3 08/15] KVM: arm64: Remove fixed_config.h header Fuad Tabba
2024-11-28 12:35 ` [PATCH v3 09/15] KVM: arm64: Remove redundant setting of HCR_EL2 trap bit Fuad Tabba
2024-11-28 12:35 ` [PATCH v3 10/15] KVM: arm64: Calculate cptr_el2 traps on activating traps Fuad Tabba
2024-11-28 12:35 ` [PATCH v3 11/15] KVM: arm64: Refactor kvm_reset_cptr_el2() Fuad Tabba
2024-11-28 12:35 ` [PATCH v3 12/15] KVM: arm64: Fix the value of the CPTR_EL2 RES1 bitmask for nVHE Fuad Tabba
2024-11-28 12:35 ` [PATCH v3 13/15] KVM: arm64: Remove PtrAuth guest vcpu flag Fuad Tabba
2024-11-28 12:35 ` [PATCH v3 14/15] KVM: arm64: Convert the SVE guest vcpu flag to a vm flag Fuad Tabba
2024-12-01 12:58 ` Marc Zyngier [this message]
2024-12-01 16:01 ` Fuad Tabba
2024-12-02 12:57 ` Fuad Tabba
2024-12-02 14:29 ` Marc Zyngier
2024-12-02 14:47 ` Fuad Tabba
2024-11-28 12:35 ` [PATCH v3 15/15] KVM: arm64: Renumber remaining vcpu guest configuration flags Fuad Tabba
2024-12-01 12:59 ` Marc Zyngier
2024-12-02 9:16 ` Fuad Tabba
2024-11-28 16:31 ` [PATCH v3 00/15] KVM: arm64: Rework guest VM fixed feature handling and trapping in pKVM James Clark
2024-11-28 17:35 ` Mark Brown
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=864j3nv9tk.wl-maz@kernel.org \
--to=maz@kernel.org \
--cc=broonie@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=james.clark@linaro.org \
--cc=joey.gouly@arm.com \
--cc=kristina.martsenko@arm.com \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=oliver.upton@linux.dev \
--cc=qperret@google.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 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.