From: Oliver Upton <oliver.upton@linux.dev>
To: Jing Zhang <jingzhangos@google.com>
Cc: KVM <kvm@vger.kernel.org>, KVMARM <kvmarm@lists.linux.dev>,
ARMLinux <linux-arm-kernel@lists.infradead.org>,
Marc Zyngier <maz@kernel.org>, Oliver Upton <oupton@google.com>,
Will Deacon <will@kernel.org>,
Paolo Bonzini <pbonzini@redhat.com>,
James Morse <james.morse@arm.com>,
Alexandru Elisei <alexandru.elisei@arm.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Fuad Tabba <tabba@google.com>, Reiji Watanabe <reijiw@google.com>,
Raghavendra Rao Ananta <rananta@google.com>,
Suraj Jitindar Singh <surajjs@amazon.com>
Subject: Re: [PATCH v4 3/4] KVM: arm64: Enable writable for ID_AA64PFR0_EL1
Date: Mon, 26 Jun 2023 16:48:54 +0000 [thread overview]
Message-ID: <ZJnBdtkzeQuPqQGO@linux.dev> (raw)
In-Reply-To: <20230607194554.87359-4-jingzhangos@google.com>
On Wed, Jun 07, 2023 at 07:45:53PM +0000, Jing Zhang wrote:
> Return an error if userspace tries to set SVE field of the register
> to a value that conflicts with SVE configuration for the guest.
> SIMD/FP/SVE fields of the requested value are validated according to
> Arm ARM.
>
> Signed-off-by: Jing Zhang <jingzhangos@google.com>
> ---
> arch/arm64/kvm/sys_regs.c | 31 +++++++++++++++++++++++++++++--
> 1 file changed, 29 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c
> index 3964a85a89fe..8f3ad9c12b27 100644
> --- a/arch/arm64/kvm/sys_regs.c
> +++ b/arch/arm64/kvm/sys_regs.c
> @@ -1509,9 +1509,36 @@ static u64 read_sanitised_id_aa64pfr0_el1(struct kvm_vcpu *vcpu,
>
> val &= ~ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_AMU);
>
> + if (!system_supports_sve())
> + val &= ~ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_SVE);
> +
If the system doesn't support SVE, wouldn't the sanitised system-wide
value hide the feature as well? A few lines up we already mask this
field based on whether or not the vCPU has the feature, which is
actually meaningful.
> return val;
> }
>
> +static int set_id_aa64pfr0_el1(struct kvm_vcpu *vcpu,
> + const struct sys_reg_desc *rd,
> + u64 val)
> +{
> + int fp, simd;
> + bool has_sve = id_aa64pfr0_sve(val);
> +
> + simd = cpuid_feature_extract_signed_field(val, ID_AA64PFR0_EL1_AdvSIMD_SHIFT);
> + fp = cpuid_feature_extract_signed_field(val, ID_AA64PFR0_EL1_FP_SHIFT);
> + /* AdvSIMD field must have the same value as FP field */
> + if (simd != fp)
> + return -EINVAL;
> +
> + /* fp must be supported when sve is supported */
> + if (has_sve && (fp < 0))
> + return -EINVAL;
> +
> + /* Check if there is a conflict with a request via KVM_ARM_VCPU_INIT */
> + if (vcpu_has_sve(vcpu) ^ has_sve)
> + return -EPERM;
Same comment here on cross-field plumbing.
--
Thanks,
Oliver
WARNING: multiple messages have this Message-ID (diff)
From: Oliver Upton <oliver.upton@linux.dev>
To: Jing Zhang <jingzhangos@google.com>
Cc: KVM <kvm@vger.kernel.org>, KVMARM <kvmarm@lists.linux.dev>,
ARMLinux <linux-arm-kernel@lists.infradead.org>,
Marc Zyngier <maz@kernel.org>, Oliver Upton <oupton@google.com>,
Will Deacon <will@kernel.org>,
Paolo Bonzini <pbonzini@redhat.com>,
James Morse <james.morse@arm.com>,
Alexandru Elisei <alexandru.elisei@arm.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Fuad Tabba <tabba@google.com>, Reiji Watanabe <reijiw@google.com>,
Raghavendra Rao Ananta <rananta@google.com>,
Suraj Jitindar Singh <surajjs@amazon.com>
Subject: Re: [PATCH v4 3/4] KVM: arm64: Enable writable for ID_AA64PFR0_EL1
Date: Mon, 26 Jun 2023 16:48:54 +0000 [thread overview]
Message-ID: <ZJnBdtkzeQuPqQGO@linux.dev> (raw)
In-Reply-To: <20230607194554.87359-4-jingzhangos@google.com>
On Wed, Jun 07, 2023 at 07:45:53PM +0000, Jing Zhang wrote:
> Return an error if userspace tries to set SVE field of the register
> to a value that conflicts with SVE configuration for the guest.
> SIMD/FP/SVE fields of the requested value are validated according to
> Arm ARM.
>
> Signed-off-by: Jing Zhang <jingzhangos@google.com>
> ---
> arch/arm64/kvm/sys_regs.c | 31 +++++++++++++++++++++++++++++--
> 1 file changed, 29 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c
> index 3964a85a89fe..8f3ad9c12b27 100644
> --- a/arch/arm64/kvm/sys_regs.c
> +++ b/arch/arm64/kvm/sys_regs.c
> @@ -1509,9 +1509,36 @@ static u64 read_sanitised_id_aa64pfr0_el1(struct kvm_vcpu *vcpu,
>
> val &= ~ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_AMU);
>
> + if (!system_supports_sve())
> + val &= ~ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_SVE);
> +
If the system doesn't support SVE, wouldn't the sanitised system-wide
value hide the feature as well? A few lines up we already mask this
field based on whether or not the vCPU has the feature, which is
actually meaningful.
> return val;
> }
>
> +static int set_id_aa64pfr0_el1(struct kvm_vcpu *vcpu,
> + const struct sys_reg_desc *rd,
> + u64 val)
> +{
> + int fp, simd;
> + bool has_sve = id_aa64pfr0_sve(val);
> +
> + simd = cpuid_feature_extract_signed_field(val, ID_AA64PFR0_EL1_AdvSIMD_SHIFT);
> + fp = cpuid_feature_extract_signed_field(val, ID_AA64PFR0_EL1_FP_SHIFT);
> + /* AdvSIMD field must have the same value as FP field */
> + if (simd != fp)
> + return -EINVAL;
> +
> + /* fp must be supported when sve is supported */
> + if (has_sve && (fp < 0))
> + return -EINVAL;
> +
> + /* Check if there is a conflict with a request via KVM_ARM_VCPU_INIT */
> + if (vcpu_has_sve(vcpu) ^ has_sve)
> + return -EPERM;
Same comment here on cross-field plumbing.
--
Thanks,
Oliver
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2023-06-26 16:49 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-07 19:45 [PATCH v4 0/4] Enable writable for idregs DFR0,PFR0, MMFR{0,1,2} Jing Zhang
2023-06-07 19:45 ` Jing Zhang
2023-06-07 19:45 ` [PATCH v4 1/4] KVM: arm64: Enable writable for ID_AA64DFR0_EL1 Jing Zhang
2023-06-07 19:45 ` Jing Zhang
2023-06-26 16:34 ` Oliver Upton
2023-06-26 16:34 ` Oliver Upton
2023-07-04 15:06 ` Cornelia Huck
2023-07-04 15:06 ` Cornelia Huck
2023-07-04 16:04 ` Oliver Upton
2023-07-04 16:04 ` Oliver Upton
2023-07-05 8:48 ` Cornelia Huck
2023-07-05 8:48 ` Cornelia Huck
2023-07-05 19:28 ` Jing Zhang
2023-07-05 19:28 ` Jing Zhang
2023-06-07 19:45 ` [PATCH v4 2/4] KVM: arm64: Enable writable for ID_DFR0_EL1 Jing Zhang
2023-06-07 19:45 ` Jing Zhang
2023-06-07 19:45 ` [PATCH v4 3/4] KVM: arm64: Enable writable for ID_AA64PFR0_EL1 Jing Zhang
2023-06-07 19:45 ` Jing Zhang
2023-06-26 16:48 ` Oliver Upton [this message]
2023-06-26 16:48 ` Oliver Upton
2023-07-05 19:30 ` Jing Zhang
2023-07-05 19:30 ` Jing Zhang
2023-06-07 19:45 ` [PATCH v4 4/4] KVM: arm64: Enable writable for ID_AA64MMFR{0, 1, 2}_EL1 Jing Zhang
2023-06-07 19:45 ` Jing Zhang
2023-06-26 20:52 ` [PATCH v4 0/4] Enable writable for idregs DFR0,PFR0, MMFR{0,1,2} Oliver Upton
2023-06-26 20:52 ` Oliver Upton
2023-07-05 19:25 ` Jing Zhang
2023-07-05 19:25 ` Jing Zhang
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=ZJnBdtkzeQuPqQGO@linux.dev \
--to=oliver.upton@linux.dev \
--cc=alexandru.elisei@arm.com \
--cc=james.morse@arm.com \
--cc=jingzhangos@google.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=maz@kernel.org \
--cc=oupton@google.com \
--cc=pbonzini@redhat.com \
--cc=rananta@google.com \
--cc=reijiw@google.com \
--cc=surajjs@amazon.com \
--cc=suzuki.poulose@arm.com \
--cc=tabba@google.com \
--cc=will@kernel.org \
/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.