Blame SOURCES/0001-fio-os-detect-pmull-suooprt-on-arm.patch

6b5578
From 3721c7fe276dbbc93e584359f87913e58f96626e Mon Sep 17 00:00:00 2001
6b5578
From: Sitsofe Wheeler <sitsofe@yahoo.com>
6b5578
Date: Mon, 6 Dec 2021 20:02:53 +0000
6b5578
Subject: [PATCH] os: detect PMULL support before enabling accelerated crc32c
6b5578
 on ARM
6b5578
6b5578
Issue #1239 shows a crash on a FUJITSU/A64FX ARM platform at the
6b5578
following line:
6b5578
6b5578
crc/crc32c-arm64.c:
6b5578
 64                 t1 = (uint64_t)vmull_p64(crc1, k2);
6b5578
6b5578
On armv8 PMULL crypto instructions like vmull_p64 are defined as
6b5578
optional (see
6b5578
https://github.com/google/crc32c/pull/6#issuecomment-328713398 and
6b5578
https://github.com/dotnet/runtime/issues/35143#issuecomment-617263508 ).
6b5578
6b5578
Avoid the crash by gating use of the hardware accelerated ARM crc32c
6b5578
path behind runtime detection of PMULL.
6b5578
6b5578
Fixes: https://github.com/axboe/fio/issues/1239
6b5578
6b5578
Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
6b5578
Signed-off-by: Pavel Reichl <preichl@redhat.com>
6b5578
Tested-by: Yi Zhang <yi.zhang@redhat.com>
6b5578
---
6b5578
 os/os-linux.h | 6 +++++-
6b5578
 1 file changed, 5 insertions(+), 1 deletion(-)
6b5578
6b5578
diff --git a/os/os-linux.h b/os/os-linux.h
6b5578
index 808f1d022..3001140ca 100644
6b5578
--- a/os/os-linux.h
6b5578
+++ b/os/os-linux.h
6b5578
@@ -20,6 +20,9 @@
6b5578
 
6b5578
 #ifdef ARCH_HAVE_CRC_CRYPTO
6b5578
 #include <sys/auxv.h>
6b5578
+#ifndef HWCAP_PMULL
6b5578
+#define HWCAP_PMULL             (1 << 4)
6b5578
+#endif /* HWCAP_PMULL */
6b5578
 #ifndef HWCAP_CRC32
6b5578
 #define HWCAP_CRC32             (1 << 7)
6b5578
 #endif /* HWCAP_CRC32 */
6b5578
@@ -405,7 +408,8 @@ static inline bool os_cpu_has(cpu_features feature)
6b5578
 #ifdef ARCH_HAVE_CRC_CRYPTO
6b5578
 	case CPU_ARM64_CRC32C:
6b5578
 		hwcap = getauxval(AT_HWCAP);
6b5578
-		have_feature = (hwcap & HWCAP_CRC32) != 0;
6b5578
+		have_feature = (hwcap & (HWCAP_PMULL | HWCAP_CRC32)) ==
6b5578
+			       (HWCAP_PMULL | HWCAP_CRC32);
6b5578
 		break;
6b5578
 #endif
6b5578
 	default: