When running "fio --crctest=crc32c" on a Raspberry Pi 3B/3B+/4B it crashes with the following: # fio --crctest=crc32c Illegal instruction (core dumped) The Raspberry Pi has the aarch64 HW crc32 instruction, but then so do basically all aarch64 platforms and all others I tested run fine. The feature was made mandatory for ARMv8.1 and only a few early SoCs didn't have it. Output from a gdb backtrace: (gdb) thread apply all bt Thread 1 (Thread 0xfffff7fef010 (LWP 9814) "fio"): #0 crc32c_arm64 (data=0xffffefa0b018 "\213\202\360zj[\354\017Q\220\030\016\365MU\037\n\222\232Y\262\"\347\016AR.\002\211\267I\024HJ%\367ٵK\nI\251\300\231({T\034)\225\223\276\204B\265\b\245\362=\315\006I\263\035 T>U\340\201\002v\034ʧ\340\234%Й\021\371\024\267_\224k&\006\237bz\001\227\235\211\023S\314߮\365\262>\n\212y\262\317\356\376Q\005\061O1\235\004\330x\031\346\251\r\354g\314C\t<\265\216(\206\203\276\036\247\326sj)\27 4\270\027\324\372\372AKb\263\005Z_\325\352K\313\\\006뫭\315\376\243\033\b}5\300\003\251\r\261\003\257\206\271\005՟\314\024հ_\335\035\021\270\001\032vA\343s\023;\034"..., data@entry=0xffffefa0b010 "^\024\374(D\17 7\343\003\213\202\360zj[\354\017Q\220\030\016\365MU\037\n\222\232Y\262\"\347\016AR.\002\211\267I\024HJ%\367ٵK\nI\251\300\231({T\034)\225\223\276\204B\265\b\245\362=\315\006I\263\035T>U\340\201\002v\034ʧ\340\234% Й\021\371\024\267_\224k&\006\237bz\001\227\235\211\023S\314߮\365\262>\n\212y\262\317\356\376Q\005\061O1\235\004\330x\031\346\251\r\354g\314C\t<\265\216(\206\203\276\036\247\326sj)\274\270\027\324\372\372AKb\263\0 05Z_\325\352K\313\\\006뫭\315\376\243\033\b}5\300\003\251\r\261\003\257\206\271\005՟\314\024հ_\335\035\021\270\001"..., length=length@entry=131072) at crc/crc32c-arm64.c:64 #1 0x0000aaaaaaabbd6c in fio_crc32c (len=131072, buf=0xffffefa0b010 "^\024\374(D\177\343\003\213\202\360zj[\354\017Q\220\030\016\365MU\037\n\222\232Y\262\"\347\016AR.\002\211\267I\024HJ%\367ٵK\nI\251\300\231({T \034)\225\223\276\204B\265\b\245\362=\315\006I\263\035T>U\340\201\002v\034ʧ\340\234%Й\021\371\024\267_\224k&\006\237bz\001\227\235\211\023S\314߮\365\262>\n\212y\262\317\356\376Q\005\061O1\235\004\330x\031\346\251 \r\354g\314C\t<\265\216(\206\203\276\036\247\326sj)\274\270\027\324\372\372AKb\263\005Z_\325\352K\313\\\006뫭\315\376\243\033\b}5\300\003\251\r\261\003\257\206\271\005՟\314\024հ_\335\035\021\270\001"...) at crc/ ../crc/crc32c.h:53 #2 t_crc32c (t=0xaaaaaab70260 <t.lto_priv+96>, buf=0xffffefa0b010, size=131072) at crc/test.c:93 #3 0x0000aaaaaaac333c in fio_crctest (type=<optimized out>) at crc/test.c:410 #4 0x0000aaaaaaacbde4 in parse_cmd_line (argc=argc@entry=2, argv=argv@entry=0xfffffffff598, client_type=client_type@entry=1) at /usr/src/debug/fio-3.26-2.fc34.aarch64/init.c:2863 #5 0x0000aaaaaaaccd74 in parse_options (argv=0xfffffffff598, argc=2) at /usr/src/debug/fio-3.26-2.fc34.aarch64/init.c:2992 #6 parse_options (argc=2, argv=0xfffffffff598) at /usr/src/debug/fio-3.26-2.fc34.aarch64/init.c:2982 #7 0x0000aaaaaaab90a0 in main (argc=2, argv=0xfffffffff598, envp=<optimized out>) at /usr/src/debug/fio-3.26-2.fc34.aarch64/fio.c:42
Its not the crc causing the problem, its the pmull which is part of the cryptographic instruction extensions, which is also optional and missing on the pi4 (one of the only SoC's publically available missing them). 0x0000aaaaaaabbba0 <+1020>: crc32cx w7, w7, x9 0x0000aaaaaaabbba4 <+1024>: ldr x10, [x2, #336] 0x0000aaaaaaabbba8 <+1028>: add x2, x2, #0x400 => 0x0000aaaaaaabbbac <+1032>: pmull v2.1q, v2.1d, v3.1d 0x0000aaaaaaabbbb0 <+1036>: crc32cx w6, w7, x8 0x0000aaaaaaabbbb4 <+1040>: ldur x9, [x2, #-24] 0x0000aaaaaaabbbb8 <+1044>: crc32cx w0, w0, x10 0x0000aaaaaaabbbbc <+1048>: ldur x8, [x2, #-16] crc32c-arm64.c 59 60 /* Merge crc0 and crc1 into crc2 61 crc1 multiply by K2 62 crc0 multiply by K1 */ 63 64 t1 = (uint64_t)vmull_p64(crc1, k2); 65 t0 = (uint64_t)vmull_p64(crc0, k1); <----- here. 66 crc = __crc32cd(crc2, *(const uint64_t *)data); 67 crc1 = __crc32cd(0, t1); 68 crc ^= crc1;
Oh, of course someone beat me to it, its already upstream. commit 3721c7fe276dbbc93e584359f87913e58f96626e Author: Sitsofe Wheeler <sitsofe> Date: Mon Dec 6 20:02:53 2021 +0000 os: detect PMULL support before enabling accelerated crc32c on ARM
This message is a reminder that Fedora Linux 34 is nearing its end of life. Fedora will stop maintaining and issuing updates for Fedora Linux 34 on 2022-06-07. It is Fedora's policy to close all bug reports from releases that are no longer maintained. At that time this bug will be closed as EOL if it remains open with a 'version' of '34'. Package Maintainer: If you wish for this bug to remain open because you plan to fix it in a currently maintained version, change the 'version' to a later Fedora Linux version. Thank you for reporting this issue and we are sorry that we were not able to fix it before Fedora Linux 34 is end of life. If you would still like to see this bug fixed and are able to reproduce it against a later version of Fedora Linux, you are encouraged to change the 'version' to a later version prior to this bug being closed.
Fedora Linux 34 entered end-of-life (EOL) status on 2022-06-07. Fedora Linux 34 is no longer maintained, which means that it will not receive any further security or bug fix updates. As a result we are closing this bug. If you can reproduce this bug against a currently maintained version of Fedora please feel free to reopen this bug against that version. If you are unable to reopen this bug, please file a new report against the current release. Thank you for reporting this bug and we are sorry it could not be fixed.