]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
KVM: arm64: Allow RES1 bits to be inferred from configuration
authorMarc Zyngier <maz@kernel.org>
Mon, 2 Feb 2026 18:43:16 +0000 (18:43 +0000)
committerMarc Zyngier <maz@kernel.org>
Thu, 5 Feb 2026 09:01:38 +0000 (09:01 +0000)
So far, when a bit field is tied to an unsupported feature, we set
it as RES0. This is almost correct, but there are a few exceptions
where the bits become RES1.

Add a AS_RES1 qualifier that instruct the RESx computing code to
simply do that.

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

index 9ad7eb5f4b981b14daf1cf939969b2ad73f90aab..72c6dd7656ba619ee0df4ea732eef0eb0e2d3f9d 100644 (file)
@@ -24,6 +24,7 @@ struct reg_bits_to_feat_map {
 #define        CALL_FUNC       BIT(1)  /* Needs to evaluate tons of crap */
 #define        FIXED_VALUE     BIT(2)  /* RAZ/WI or RAO/WI in KVM */
 #define        MASKS_POINTER   BIT(3)  /* Pointer to fgt_masks struct instead of bits */
+#define        AS_RES1         BIT(4)  /* RES1 when not supported */
 
        unsigned long   flags;
 
@@ -1315,8 +1316,12 @@ static struct resx __compute_fixed_bits(struct kvm *kvm,
                else
                        match = idreg_feat_match(kvm, &map[i]);
 
-               if (!match || (map[i].flags & FIXED_VALUE))
-                       resx.res0 |= reg_feat_map_bits(&map[i]);
+               if (!match || (map[i].flags & FIXED_VALUE)) {
+                       if (map[i].flags & AS_RES1)
+                               resx.res1 |= reg_feat_map_bits(&map[i]);
+                       else
+                               resx.res0 |= reg_feat_map_bits(&map[i]);
+               }
        }
 
        return resx;