From: Mark Brown <broonie@kernel.org>
To: "Lorenzo Stoakes (ARM)" <ljs@kernel.org>
Cc: Marc Zyngier <maz@kernel.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>, Joey Gouly <joey.gouly@arm.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Shuah Khan <shuah@kernel.org>, Oliver Upton <oupton@kernel.org>,
Fuad Tabba <fuad.tabba@linux.dev>,
Peter Maydell <peter.maydell@linaro.org>,
Leonardo Bras <leo.bras@arm.com>,
Wei-Lin Chang <weilin.chang@arm.com>,
Yao Yuan <yaoyuan@linux.alibaba.com>,
linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org,
kvmarm@lists.linux.dev, linux-kselftest@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v21 02/15] KVM: arm64: Refuse to start a guest with S1PIE or S1POE but not TCR2
Date: Wed, 14 Oct 2026 18:48:37 +0100 [thread overview]
Message-ID: <ae24e80c-1b34-4827-9c93-e80b987e9cd7@sirena.org.uk> (raw)
In-Reply-To: <as-f1JfUy38Xt9QA@gremlin>
[-- Attachment #1: Type: text/plain, Size: 3458 bytes --]
On Wed, Oct 14, 2026 at 04:47:22PM +0100, Lorenzo Stoakes (ARM) wrote:
> On Sat, Oct 03, 2026 at 01:30:05PM +0100, Marc Zyngier wrote:
> > This *absolutely* needs to be data driven, and we're not going back to
> > over two years ago. We already have most of what is needed in
> > config.c, and it is only a matter of making sure that S1PxE is only
> > enabled for the guest if TCR2 and ATS1A are also present. If that
> > means additional sanitisation of the idregs when finalised, so be it.
I do agree that's what we should have, I started down that route but as
I noted in the commit log it felt like I was pulling in disproportionate
refactoring given the existing gap.
> > If userspace decides to expose crap in the ID registers, that's its
> > own problem, and we're not in the business of enforcing idiotic
> > configurations. The only thing that matters is that the state that KVM
> > deals with is consistent.
> As I understand it: don't return an error for a configuration that doesn't
> make sense, enforce RES0 instead.
I went with erroring out there to make sure that we didn't make any
mistakes with the ordering of our checks - I didn't want to accidentally
end up with a situation where we look at the dependencies for feature A,
decide that it's OK, then later check feature B which it depends on and
turn it off due to it missing it's own prerequisite.
We can resolve that like you've done here by having the full dependency
stack in every check but I worried that this would be error prone due to
all the duplication, however looking at your code I think we can resolve
that anyway, see blow.
Userspace really shouldn't be setting up guests where we need to make
adjustments in the first place, and setting up guests isn't that hot a
path so like Marc says so long as KVM protects itself we're fine.
> #define kvm_has_s1pie(k) \
> - (kvm_has_feat((k), ID_AA64MMFR3_EL1, S1PIE, IMP))
> + (kvm_has_tcr2(k) && \
> + kvm_has_feat((k), ID_AA64ISAR2_EL1, ATS1A, IMP) && \
> + kvm_has_feat((k), ID_AA64MMFR3_EL1, S1PIE, IMP))
This will mean that every time we check for an individual feature
throughout KVM we check for all the dependencies as well. A lot of the
time that's not really going to matter but we have these checks in hot
paths like context switches.
> +static bool feat_s1pie(struct kvm *kvm)
> +{
> + return kvm_has_s1pie(kvm);
> +}
We should put the dependencies in here where they're only checked during
initialisation instead, that way the hot paths only need to look at the
leaf features. We could also deal with the duplication concern by
having the functions call each other rather than duplicating their
contents:
static bool feat_gcs(struct kvm *kvm)
{
if (!feat_s1pie(kvm))
return false;
return kvm_has_gcs(kvm);
}
(or whatever stylistic variation of that.)
This approach also needs the code for updating the ID registers since
config.c doesn't do that at the moment. Some of the existing visibility
limiting stuff (like for 32 bit ID registers without AArch32 or
ID_AA64ZFR0_EL1 without SVE) could be moved over too.
TBH when I said in the commit log I was thinking of something more data
driven I was thinking more of having the dependencies expressed as pure
data, more like the way the test in set_id_regs is written. This also
seems fine to me, the checks are similar. It's just much more invasive.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
next prev parent reply other threads:[~2026-10-14 17:48 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-30 21:48 [PATCH v21 00/15] KVM: arm64: Provide guest support for GCS Mark Brown
2026-09-30 21:48 ` [PATCH v21 01/15] arm64/gcs: Ensure FGTs for EL1 GCS instructions are disabled Mark Brown
2026-09-30 21:48 ` [PATCH v21 02/15] KVM: arm64: Refuse to start a guest with S1PIE or S1POE but not TCR2 Mark Brown
2026-10-01 10:50 ` Lorenzo Stoakes (ARM)
2026-10-03 12:30 ` Marc Zyngier
2026-10-14 15:47 ` Lorenzo Stoakes (ARM)
2026-10-14 17:48 ` Mark Brown [this message]
2026-09-30 21:48 ` [PATCH v21 03/15] KVM: arm64: Manage GCS access and registers for guests Mark Brown
2026-10-01 11:28 ` Lorenzo Stoakes (ARM)
2026-09-30 21:48 ` [PATCH v21 04/15] KVM: arm64: Ensure GCS memory effects are visible Mark Brown
2026-09-30 21:48 ` [PATCH v21 05/15] KVM: arm64: Set PSTATE.EXLOCK when entering an exception Mark Brown
2026-10-01 11:37 ` Lorenzo Stoakes (ARM)
2026-09-30 21:48 ` [PATCH v21 06/15] KVM: arm64: Validate GCS exception lock when emulating ERET Mark Brown
2026-10-01 13:10 ` Lorenzo Stoakes (ARM)
2026-09-30 21:48 ` [PATCH v21 07/15] KVM: arm64: Forward GCS exceptions to nested guests Mark Brown
2026-10-01 14:25 ` Lorenzo Stoakes (ARM)
2026-09-30 21:48 ` [PATCH v21 08/15] KVM: arm64: Enforce EXLOCK for SPSR and ELR Mark Brown
2026-10-01 16:26 ` Lorenzo Stoakes (ARM)
2026-10-01 21:11 ` Mark Brown
2026-10-02 11:50 ` Lorenzo Stoakes (ARM)
2026-09-30 21:48 ` [PATCH v21 09/15] KVM: arm64: Allow GCS to be enabled for guests Mark Brown
2026-10-01 16:29 ` Lorenzo Stoakes (ARM)
2026-09-30 21:48 ` [PATCH v21 10/15] KVM: selftests: arm64: Check that invalid feature combinations are rejected Mark Brown
2026-10-01 16:35 ` Lorenzo Stoakes (ARM)
2026-09-30 21:48 ` [PATCH v21 11/15] KVM: selftests: arm64: Add GCS registers to get-reg-list Mark Brown
2026-10-01 16:36 ` Lorenzo Stoakes (ARM)
2026-09-30 21:48 ` [PATCH v21 12/15] KVM: selftests: arm64: Add GCS to set_id_regs Mark Brown
2026-10-01 16:38 ` Lorenzo Stoakes (ARM)
2026-10-01 18:14 ` Mark Brown
2026-10-02 11:27 ` Lorenzo Stoakes (ARM)
2026-09-30 21:48 ` [PATCH v21 13/15] KVM: selftests: arm64: Only restore SPSR_EL1 and ELR_EL1 if they change Mark Brown
2026-10-01 16:41 ` Lorenzo Stoakes (ARM)
2026-09-30 21:48 ` [PATCH v21 14/15] tools: Synchronise the kernel esr.h Mark Brown
2026-10-01 16:47 ` Lorenzo Stoakes (ARM)
2026-10-01 17:27 ` Mark Brown
2026-10-02 11:31 ` Lorenzo Stoakes (ARM)
2026-09-30 21:48 ` [PATCH v21 15/15] KVM: selftests: arm64: Add GCS EXLOCK exception emulation test Mark Brown
2026-10-01 16:53 ` Lorenzo Stoakes (ARM)
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=ae24e80c-1b34-4827-9c93-e80b987e9cd7@sirena.org.uk \
--to=broonie@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=fuad.tabba@linux.dev \
--cc=joey.gouly@arm.com \
--cc=kvmarm@lists.linux.dev \
--cc=leo.bras@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=ljs@kernel.org \
--cc=maz@kernel.org \
--cc=oupton@kernel.org \
--cc=peter.maydell@linaro.org \
--cc=shuah@kernel.org \
--cc=suzuki.poulose@arm.com \
--cc=weilin.chang@arm.com \
--cc=will@kernel.org \
--cc=yaoyuan@linux.alibaba.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
all inboxes | Powered by JetHome®