Note: This is a public test instance of Red Hat Bugzilla. The data contained within is a snapshot of the live data so any changes you make will not be reflected in the production Bugzilla. Email is disabled so feel free to test any aspect of the site that you want. File any problems you find or give feedback at bugzilla.redhat.com.

Bug 1962050

Summary: fio crashes when running crc32c hash tests on Raspberry Pi 3/4 (aarch64) devices
Product: [Fedora] Fedora Reporter: Peter Robinson <pbrobinson>
Component: fioAssignee: Eric Sandeen <esandeen>
Status: CLOSED EOL QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 34CC: esandeen, jeremy.linton, ngompa13, pportant, ykorman
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2022-06-07 20:50:09 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 245418    

Description Peter Robinson 2021-05-19 09:03:46 UTC
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

Comment 1 Jeremy Linton 2021-12-15 21:37:07 UTC
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;

Comment 2 Jeremy Linton 2021-12-15 22:13:47 UTC
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

Comment 3 Ben Cotton 2022-05-12 15:08:06 UTC
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.

Comment 4 Ben Cotton 2022-06-07 20:50:09 UTC
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.