[PATCH v2 00/10] KVM: arm64: Handle effective RES0 behaviour of undefined registers
Marc Zyngier
maz at kernel.org
Thu Sep 18 08:13:52 PDT 2025
[After yesterday's blunder, I'm reposting this, with proper commit
messages, and having taken Oliver's feedback into account.]
When a feature is removed from a guest, we ensure that the trap and
control bits for that particular feature are made RES0.
For example, SCTLR2_EL2 contains a large number of bits. For any
feature FEAT_FOO that is controlled by a bit FOO in SCTLR2_EL2, we
make sure that SCTLR2_EL2.FOO is RES0 if FEAT_FOO is not visible to
the guest.
However, nothing makes SCTLR2_EL2 RES0 if FEAT_SCTLR2 is not visible.
This series aims at solving this sort of situations. It is still quite
incomplete, but aims at bridging a couple of other series:
- 20250911114621.3724469-1-yangjinqian1 at huawei.com which wants to
make EL2-related fields writable to allow migration
- 20250912212258.407350-1-oliver.upton at linux.dev which wants to align
the NV support with the rest of the kernel
Hopefully this helps getting to a point where we everything is
sanitised according to the architecture, EL2 on the same footing as
EL1, and everything migrating in every possible case.
And winning the lottery.
* From v1:
- Commit messages!
- Simplified declaration macros
- Added helpful comments (or so I hope)
- Changed type names according to Oliver's suggestion
Marc Zyngier (10):
KVM: arm64: Remove duplicate FEAT_{SYSREG128,MTE2} descriptions
KVM: arm64: Add reg_feat_map_desc to describe full register dependency
KVM: arm64: Enforce absence of FEAT_FGT on FGT registers
KVM: arm64: Enforce absence of FEAT_FGT2 on FGT2 registers
KVM: arm64: Enforce absence of FEAT_HCX on HCRX_EL2
KVM: arm64: Convert HCR_EL2 RES0 handling to compute_reg_res0_bits()
KVM: arm64: Enforce absence of FEAT_SCTLR2 on SCTLR2_EL{1,2}
KVM: arm64: Enforce absence of FEAT_TCR2 on TCR2_EL2
KVM: arm64: Convert SCTLR_EL1 RES0 handling to compute_reg_res0_bits()
KVM: arm64: Convert MDCR_EL2 RES0 handling to compute_reg_res0_bits()
arch/arm64/kvm/config.c | 357 +++++++++++++++++++++++++---------------
1 file changed, 227 insertions(+), 130 deletions(-)
--
2.39.2
More information about the linux-arm-kernel
mailing list