Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

KVM: arm64: selftests: Remove ARM64_FEATURE_FIELD_BITS and its last user

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>

authored by

Ben Horgan and committed by
Catalin Marinas
bf09ee91 a04fbfb8

+6 -4
-2
tools/arch/arm64/include/asm/sysreg.h
··· 1078 1078 #define GCS_CAP(x) ((((unsigned long)x) & GCS_CAP_ADDR_MASK) | \ 1079 1079 GCS_CAP_VALID_TOKEN) 1080 1080 1081 - #define ARM64_FEATURE_FIELD_BITS 4 1082 - 1083 1081 #ifdef __ASSEMBLY__ 1084 1082 1085 1083 .macro mrs_s, rt, sreg
+6 -2
tools/testing/selftests/kvm/arm64/set_id_regs.c
··· 265 265 /* Return a safe value to a given ftr_bits an ftr value */ 266 266 uint64_t get_safe_value(const struct reg_ftr_bits *ftr_bits, uint64_t ftr) 267 267 { 268 - uint64_t ftr_max = GENMASK_ULL(ARM64_FEATURE_FIELD_BITS - 1, 0); 268 + uint64_t ftr_max = ftr_bits->mask >> ftr_bits->shift; 269 + 270 + TEST_ASSERT(ftr_max > 1, "This test doesn't support single bit features"); 269 271 270 272 if (ftr_bits->sign == FTR_UNSIGNED) { 271 273 switch (ftr_bits->type) { ··· 319 317 /* Return an invalid value to a given ftr_bits an ftr value */ 320 318 uint64_t get_invalid_value(const struct reg_ftr_bits *ftr_bits, uint64_t ftr) 321 319 { 322 - uint64_t ftr_max = GENMASK_ULL(ARM64_FEATURE_FIELD_BITS - 1, 0); 320 + uint64_t ftr_max = ftr_bits->mask >> ftr_bits->shift; 321 + 322 + TEST_ASSERT(ftr_max > 1, "This test doesn't support single bit features"); 323 323 324 324 if (ftr_bits->sign == FTR_UNSIGNED) { 325 325 switch (ftr_bits->type) {