os: detect PMULL support before enabling accelerated crc32c on ARM
authorSitsofe Wheeler <sitsofe@yahoo.com>
Mon, 6 Dec 2021 20:02:53 +0000 (20:02 +0000)
committerSitsofe Wheeler <sitsofe@yahoo.com>
Mon, 6 Dec 2021 20:12:37 +0000 (20:12 +0000)
commit3721c7fe276dbbc93e584359f87913e58f96626e
treee0c8637ed7dbe987687f155d8af18acc16ead6c6
parentfd1d8e0ab3dc852193037a3acebcf8b8bdbcd9c5
os: detect PMULL support before enabling accelerated crc32c on ARM

Issue #1239 shows a crash on a FUJITSU/A64FX ARM platform at the
following line:

crc/crc32c-arm64.c:
 64                 t1 = (uint64_t)vmull_p64(crc1, k2);

On armv8 PMULL crypto instructions like vmull_p64 are defined as
optional (see
https://github.com/google/crc32c/pull/6#issuecomment-328713398 and
https://github.com/dotnet/runtime/issues/35143#issuecomment-617263508 ).

Avoid the crash by gating use of the hardware accelerated ARM crc32c
path behind runtime detection of PMULL.

Fixes: https://github.com/axboe/fio/issues/1239

Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
Tested-by: Yi Zhang <yi.zhang@redhat.com>
os/os-linux.h