From 37cffc143bce4887e452308ccce161fa2b1f007b Mon Sep 17 00:00:00 2001 From: Adam Kupczyk Date: Thu, 24 May 2018 13:25:02 +0200 Subject: [PATCH] common/arch/arm: Improve CPU feature check. Signed-off-by: Adam Kupczyk (cherry picked from commit d998580c7dbeff5ced5e9eb1e11d160a2a8d7852) --- src/arch/arm.c | 41 ++++++++++------------------------------- 1 file changed, 10 insertions(+), 31 deletions(-) diff --git a/src/arch/arm.c b/src/arch/arm.c index c017b5d4d928a..02f0107b76ba9 100644 --- a/src/arch/arm.c +++ b/src/arch/arm.c @@ -12,47 +12,26 @@ int ceph_arch_aarch64_pmull = 0; #include #include // ElfW macro +#include #if __arm__ || __aarch64__ #include #endif // __arm__ -static unsigned long get_auxval(unsigned long type) -{ - unsigned long result = 0; - FILE *f = fopen("/proc/self/auxv", "r"); - if (f) { - ElfW(auxv_t) entry; - while (fread(&entry, sizeof(entry), 1, f) == 1) { - if (entry.a_type == type) { - result = entry.a_un.a_val; - break; - } - } - fclose(f); - } - return result; -} - -static unsigned long get_hwcap(void) -{ - return get_auxval(AT_HWCAP); -} - #endif // __linux__ int ceph_arch_arm_probe(void) { -#if __arm__ && __linux__ - ceph_arch_neon = (get_hwcap() & HWCAP_NEON) == HWCAP_NEON; -#elif __aarch64__ && __linux__ - ceph_arch_neon = (get_hwcap() & HWCAP_ASIMD) == HWCAP_ASIMD; - ceph_arch_aarch64_crc32 = (get_hwcap() & HWCAP_CRC32) == HWCAP_CRC32; - ceph_arch_aarch64_pmull = (get_hwcap() & HWCAP_PMULL) == HWCAP_PMULL; -#else - if (0) - get_hwcap(); // make compiler shut up +#if __linux__ + unsigned long hwcap = getauxval(AT_HWCAP); +#if __arm__ + ceph_arch_neon = (hwcap & HWCAP_NEON) == HWCAP_NEON; +#elif __aarch64__ + ceph_arch_neon = (hwcap & HWCAP_ASIMD) == HWCAP_ASIMD; + ceph_arch_aarch64_crc32 = (hwcap & HWCAP_CRC32) == HWCAP_CRC32; + ceph_arch_aarch64_pmull = (hwcap & HWCAP_PMULL) == HWCAP_PMULL; #endif +#endif // __linux__ return 0; } -- 2.39.5