Thanks. Tested, the problem is gone. -- You received this bug notification because you are a member of qemu- devel-ml, which is subscribed to QEMU. https://bugs.launchpad.net/bugs/1908626
Title: Atomic test-and-set instruction does not work on qemu-user Status in QEMU: Expired Bug description: I try to compile and run PostgreSQL/Greenplum database inside docker container/qemu-aarch64-static: ``` host: CentOS7 x86_64 container: centos:centos7.9.2009 --platform linux/arm64/v8 qemu-user-static: https://github.com/multiarch/qemu-user-static/releases/ ``` However, GP/PG's spinlock always gets stuck and reports PANIC errors. It seems its spinlock has something wrong. ``` https://github.com/greenplum-db/gpdb/blob/master/src/include/storage/s_lock.h https://github.com/greenplum-db/gpdb/blob/master/src/backend/storage/lmgr/s_lock.c ``` So I extract its spinlock implementation into one test C source file (see attachment file), and get reprodcued: ``` $ gcc spinlock_qemu.c $ ./a.out C -- slock inited, lock value is: 0 parent 139642, child 139645 P -- slock lock before, lock value is: 0 P -- slock locked, lock value is: 1 P -- slock unlock after, lock value is: 0 C -- slock lock before, lock value is: 1 P -- slock lock before, lock value is: 1 C -- slock locked, lock value is: 1 C -- slock unlock after, lock value is: 0 C -- slock lock before, lock value is: 1 P -- slock locked, lock value is: 1 P -- slock unlock after, lock value is: 0 P -- slock lock before, lock value is: 1 C -- slock locked, lock value is: 1 C -- slock unlock after, lock value is: 0 P -- slock locked, lock value is: 1 C -- slock lock before, lock value is: 1 P -- slock unlock after, lock value is: 0 C -- slock locked, lock value is: 1 P -- slock lock before, lock value is: 1 C -- slock unlock after, lock value is: 0 P -- slock locked, lock value is: 1 C -- slock lock before, lock value is: 1 P -- slock unlock after, lock value is: 0 C -- slock locked, lock value is: 1 P -- slock lock before, lock value is: 1 C -- slock unlock after, lock value is: 0 P -- slock locked, lock value is: 1 C -- slock lock before, lock value is: 1 P -- slock unlock after, lock value is: 0 P -- slock lock before, lock value is: 1 spin timeout, lock value is 1 (pid 139642) spin timeout, lock value is 1 (pid 139645) spin timeout, lock value is 1 (pid 139645) spin timeout, lock value is 1 (pid 139642) spin timeout, lock value is 1 (pid 139645) spin timeout, lock value is 1 (pid 139642) ... ... ... ``` NOTE: this code always works on PHYSICAL ARM64 server. To manage notifications about this bug go to: https://bugs.launchpad.net/qemu/+bug/1908626/+subscriptions