From: Aurelien Jarno Date: Sat, 26 Oct 2024 20:41:09 +0000 (+0200) Subject: [PATCH] Revert "AArch64: Check kernel version for SVE ifuncs" X-Git-Tag: archive/raspbian/2.36-9+rpi1+deb12u13^2~84 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=571fbeafa9d06af9517cc321c020aa1b64969a93;p=glibc.git [PATCH] Revert "AArch64: Check kernel version for SVE ifuncs" This reverts commit 24de733967029fd902c34073d2ab25b900887352. Gbp-Pq: Topic arm64 Gbp-Pq: Name local-revert-aarch64-check-kernel-version-for-sve-ifuncs.diff --- diff --git a/sysdeps/aarch64/multiarch/init-arch.h b/sysdeps/aarch64/multiarch/init-arch.h index 5b2cf5cb1..5da165695 100644 --- a/sysdeps/aarch64/multiarch/init-arch.h +++ b/sysdeps/aarch64/multiarch/init-arch.h @@ -36,7 +36,5 @@ MTE_ENABLED (); \ bool __attribute__((unused)) sve = \ GLRO(dl_aarch64_cpu_features).sve; \ - bool __attribute__((unused)) prefer_sve_ifuncs = \ - GLRO(dl_aarch64_cpu_features).prefer_sve_ifuncs; \ bool __attribute__((unused)) mops = \ GLRO(dl_aarch64_cpu_features).mops; diff --git a/sysdeps/aarch64/multiarch/memcpy.c b/sysdeps/aarch64/multiarch/memcpy.c index 3de66c14d..d1cf5bec1 100644 --- a/sysdeps/aarch64/multiarch/memcpy.c +++ b/sysdeps/aarch64/multiarch/memcpy.c @@ -47,7 +47,7 @@ select_memcpy_ifunc (void) { if (IS_A64FX (midr)) return __memcpy_a64fx; - return prefer_sve_ifuncs ? __memcpy_sve : __memcpy_generic; + return __memcpy_sve; } if (IS_THUNDERX (midr)) diff --git a/sysdeps/aarch64/multiarch/memmove.c b/sysdeps/aarch64/multiarch/memmove.c index fdcf41882..90729e027 100644 --- a/sysdeps/aarch64/multiarch/memmove.c +++ b/sysdeps/aarch64/multiarch/memmove.c @@ -47,7 +47,7 @@ select_memmove_ifunc (void) { if (IS_A64FX (midr)) return __memmove_a64fx; - return prefer_sve_ifuncs ? __memmove_sve : __memmove_generic; + return __memmove_sve; } if (IS_THUNDERX (midr)) diff --git a/sysdeps/unix/sysv/linux/aarch64/cpu-features.c b/sysdeps/unix/sysv/linux/aarch64/cpu-features.c index 254312835..6ee1cb4bc 100644 --- a/sysdeps/unix/sysv/linux/aarch64/cpu-features.c +++ b/sysdeps/unix/sysv/linux/aarch64/cpu-features.c @@ -20,7 +20,6 @@ #include #include #include -#include #define DCZID_DZP_MASK (1 << 4) #define DCZID_BS_MASK (0xf) @@ -60,46 +59,6 @@ get_midr_from_mcpu (const char *mcpu) } #endif -#if __LINUX_KERNEL_VERSION < 0x060200 - -/* Return true if we prefer using SVE in string ifuncs. Old kernels disable - SVE after every system call which results in unnecessary traps if memcpy - uses SVE. This is true for kernels between 4.15.0 and before 6.2.0, except - for 5.14.0 which was patched. For these versions return false to avoid using - SVE ifuncs. - Parse the kernel version into a 24-bit kernel.major.minor value without - calling any library functions. If uname() is not supported or if the version - format is not recognized, assume the kernel is modern and return true. */ - -static inline bool -prefer_sve_ifuncs (void) -{ - struct utsname buf; - const char *p = &buf.release[0]; - int kernel = 0; - int val; - - if (__uname (&buf) < 0) - return true; - - for (int shift = 16; shift >= 0; shift -= 8) - { - for (val = 0; *p >= '0' && *p <= '9'; p++) - val = val * 10 + *p - '0'; - kernel |= (val & 255) << shift; - if (*p++ != '.') - break; - } - - if (kernel >= 0x060200 || kernel == 0x050e00) - return true; - if (kernel >= 0x040f00) - return false; - return true; -} - -#endif - static inline void init_cpu_features (struct cpu_features *cpu_features) { @@ -166,13 +125,6 @@ init_cpu_features (struct cpu_features *cpu_features) /* Check if SVE is supported. */ cpu_features->sve = GLRO (dl_hwcap) & HWCAP_SVE; - cpu_features->prefer_sve_ifuncs = cpu_features->sve; - -#if __LINUX_KERNEL_VERSION < 0x060200 - if (cpu_features->sve) - cpu_features->prefer_sve_ifuncs = prefer_sve_ifuncs (); -#endif - /* Check if MOPS is supported. */ cpu_features->mops = GLRO (dl_hwcap2) & HWCAP2_MOPS; } diff --git a/sysdeps/unix/sysv/linux/aarch64/cpu-features.h b/sysdeps/unix/sysv/linux/aarch64/cpu-features.h index d51597b92..b4bd43a22 100644 --- a/sysdeps/unix/sysv/linux/aarch64/cpu-features.h +++ b/sysdeps/unix/sysv/linux/aarch64/cpu-features.h @@ -71,7 +71,6 @@ struct cpu_features /* Currently, the GLIBC memory tagging tunable only defines 8 bits. */ uint8_t mte_state; bool sve; - bool prefer_sve_ifuncs; bool mops; };