]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: arm64: selftests: Remove ARM64_FEATURE_FIELD_BITS and its last user
authorBen Horgan <ben.horgan@arm.com>
Tue, 25 Nov 2025 10:12:06 +0000 (10:12 +0000)
committerCatalin Marinas <catalin.marinas@arm.com>
Thu, 27 Nov 2025 18:16:46 +0000 (18:16 +0000)
ARM64_FEATURE_FIELD_BITS is set to 4 but not all ID register fields are 4
bits. See for instance ID_AA64SMFR0_EL1. The last user of this define,
ARM64_FEATURE_FIELD_BITS, is the set_id_regs selftest. Its logic assumes
the fields aren't a single bits; assert that's the case and stop using the
define. As there are no more users, ARM64_FEATURE_FIELD_BITS is removed
from the arm64 tools sysreg.h header. A separate commit removes this from
the kernel version of the header.

Signed-off-by: Ben Horgan <ben.horgan@arm.com>
Acked-by: Marc Zyngier <maz@kernel.org>
Acked-by: Oliver Upton <oupton@kernel.org>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
tools/arch/arm64/include/asm/sysreg.h
tools/testing/selftests/kvm/arm64/set_id_regs.c

index 65f2759ea27a35cfce57f7459d8f16f1c002f0af..0f60b68eac1bff96de80423b3614fb9b58e03b11 100644 (file)
 #define GCS_CAP(x)     ((((unsigned long)x) & GCS_CAP_ADDR_MASK) | \
                                               GCS_CAP_VALID_TOKEN)
 
-#define ARM64_FEATURE_FIELD_BITS       4
-
 #ifdef __ASSEMBLY__
 
        .macro  mrs_s, rt, sreg
index 8ff1e853f7f8a57c8ee3af1d00bc71868ff2371a..465d2331196aa6914126a947106c8057d04e4e33 100644 (file)
@@ -265,7 +265,9 @@ static void guest_code(void)
 /* Return a safe value to a given ftr_bits an ftr value */
 uint64_t get_safe_value(const struct reg_ftr_bits *ftr_bits, uint64_t ftr)
 {
-       uint64_t ftr_max = GENMASK_ULL(ARM64_FEATURE_FIELD_BITS - 1, 0);
+       uint64_t ftr_max = ftr_bits->mask >> ftr_bits->shift;
+
+       TEST_ASSERT(ftr_max > 1, "This test doesn't support single bit features");
 
        if (ftr_bits->sign == FTR_UNSIGNED) {
                switch (ftr_bits->type) {
@@ -317,7 +319,9 @@ uint64_t get_safe_value(const struct reg_ftr_bits *ftr_bits, uint64_t ftr)
 /* Return an invalid value to a given ftr_bits an ftr value */
 uint64_t get_invalid_value(const struct reg_ftr_bits *ftr_bits, uint64_t ftr)
 {
-       uint64_t ftr_max = GENMASK_ULL(ARM64_FEATURE_FIELD_BITS - 1, 0);
+       uint64_t ftr_max = ftr_bits->mask >> ftr_bits->shift;
+
+       TEST_ASSERT(ftr_max > 1, "This test doesn't support single bit features");
 
        if (ftr_bits->sign == FTR_UNSIGNED) {
                switch (ftr_bits->type) {