]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
KVM: arm64: Correctly handle SCTLR_EL1 RES1 bits for unsupported features
authorMarc Zyngier <maz@kernel.org>
Mon, 2 Feb 2026 18:43:17 +0000 (18:43 +0000)
committerMarc Zyngier <maz@kernel.org>
Thu, 5 Feb 2026 09:01:41 +0000 (09:01 +0000)
A bunch of SCTLR_EL1 bits must be set to RES1 when the controlling
feature is not present. Add the AS_RES1 qualifier where needed.

Reviewed-by: Fuad Tabba <tabba@google.com>
Tested-by: Fuad Tabba <tabba@google.com>
Link: https://patch.msgid.link/20260202184329.2724080-9-maz@kernel.org
Signed-off-by: Marc Zyngier <maz@kernel.org>
arch/arm64/kvm/config.c

index 72c6dd7656ba619ee0df4ea732eef0eb0e2d3f9d..25ef1873a6c3dba19cf90dc0a10ae6a500ad0c32 100644 (file)
@@ -1085,27 +1085,28 @@ static const DECLARE_FEAT_MAP(tcr2_el2_desc, TCR2_EL2,
                              tcr2_el2_feat_map, FEAT_TCR2);
 
 static const struct reg_bits_to_feat_map sctlr_el1_feat_map[] = {
-       NEEDS_FEAT(SCTLR_EL1_CP15BEN    |
-                  SCTLR_EL1_ITD        |
-                  SCTLR_EL1_SED,
-                  FEAT_AA32EL0),
+       NEEDS_FEAT(SCTLR_EL1_CP15BEN, FEAT_AA32EL0),
+       NEEDS_FEAT_FLAG(SCTLR_EL1_ITD   |
+                       SCTLR_EL1_SED,
+                       AS_RES1, FEAT_AA32EL0),
        NEEDS_FEAT(SCTLR_EL1_BT0        |
                   SCTLR_EL1_BT1,
                   FEAT_BTI),
        NEEDS_FEAT(SCTLR_EL1_CMOW, FEAT_CMOW),
-       NEEDS_FEAT(SCTLR_EL1_TSCXT, feat_csv2_2_csv2_1p2),
-       NEEDS_FEAT(SCTLR_EL1_EIS        |
-                  SCTLR_EL1_EOS,
-                  FEAT_ExS),
+       NEEDS_FEAT_FLAG(SCTLR_EL1_TSCXT,
+                       AS_RES1, feat_csv2_2_csv2_1p2),
+       NEEDS_FEAT_FLAG(SCTLR_EL1_EIS   |
+                       SCTLR_EL1_EOS,
+                       AS_RES1, FEAT_ExS),
        NEEDS_FEAT(SCTLR_EL1_EnFPM, FEAT_FPMR),
        NEEDS_FEAT(SCTLR_EL1_IESB, FEAT_IESB),
        NEEDS_FEAT(SCTLR_EL1_EnALS, FEAT_LS64),
        NEEDS_FEAT(SCTLR_EL1_EnAS0, FEAT_LS64_ACCDATA),
        NEEDS_FEAT(SCTLR_EL1_EnASR, FEAT_LS64_V),
        NEEDS_FEAT(SCTLR_EL1_nAA, FEAT_LSE2),
-       NEEDS_FEAT(SCTLR_EL1_LSMAOE     |
-                  SCTLR_EL1_nTLSMD,
-                  FEAT_LSMAOC),
+       NEEDS_FEAT_FLAG(SCTLR_EL1_LSMAOE        |
+                       SCTLR_EL1_nTLSMD,
+                       AS_RES1, FEAT_LSMAOC),
        NEEDS_FEAT(SCTLR_EL1_EE, FEAT_MixedEnd),
        NEEDS_FEAT(SCTLR_EL1_E0E, feat_mixedendel0),
        NEEDS_FEAT(SCTLR_EL1_MSCEn, FEAT_MOPS),
@@ -1121,7 +1122,8 @@ static const struct reg_bits_to_feat_map sctlr_el1_feat_map[] = {
        NEEDS_FEAT(SCTLR_EL1_NMI        |
                   SCTLR_EL1_SPINTMASK,
                   FEAT_NMI),
-       NEEDS_FEAT(SCTLR_EL1_SPAN, FEAT_PAN),
+       NEEDS_FEAT_FLAG(SCTLR_EL1_SPAN,
+                       AS_RES1, FEAT_PAN),
        NEEDS_FEAT(SCTLR_EL1_EPAN, FEAT_PAN3),
        NEEDS_FEAT(SCTLR_EL1_EnDA       |
                   SCTLR_EL1_EnDB       |