Re: Deadlock in XLogInsert at AIX
Heikki Linnakangas <hlinnaka@iki.fi>
From: Heikki Linnakangas <hlinnaka@iki.fi>
To: Konstantin Knizhnik <k.knizhnik@postgrespro.ru>,
PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2017-02-01T08:48:07Z
Lists: pgsql-hackers
Oh, you were one step ahead of me, I didn't understand it on first read of your email. Need more coffee.. On 01/31/2017 05:03 PM, Konstantin Knizhnik wrote: > I inspected code of pg_atomic_compare_exchange_u32_impl and didn't sync > in prologue: > > (dbx) listi pg_atomic_compare_exchange_u32_impl > [no sync instruction] > and if I compile this fuctions standalone, I get the following assembler > code: > > .pg_atomic_compare_exchange_u32_impl: # 0x0000000000000000 (H.4.NO_SYMBOL) > stdu SP,-128(SP) > std r3,176(SP) > std r4,184(SP) > std r5,192(SP) > ld r0,192(SP) > stw r0,192(SP) > sync > ld r4,176(SP) > ld r3,184(SP) > lwz r0,192(SP) > extsw r0,r0 > lwa r5,0(r3) > ... > > sync is here! Ok, so, the 'sync' instruction gets lost somehow. That "standalone" assemly version looks slightly different in other ways too, you perhaps used different optimization levels, or it looks different when it's inlined into the caller. Not sure which version of the function gdb would show, when it's a "static inline" function. Would be good to check the disassembly of LWLockAttemptLock(), to see if the 'sync' is there. Certainly seems like a compiler bug, though. - Heikki
Commits
-
For all ppc compilers, implement compare_exchange and fetch_add with asm.
- 30ee5d17c20d 13.0 landed
-
For PowerPC instruction "addi", use constraint "b".
- 930787c7fab9 9.4.25 landed
- af4477b00cf9 11.6 landed
- 62e881946c4d 9.5.20 landed
- 09d74aef33de 9.6.16 landed
- 083929372e04 10.11 landed
- ef13f914e6c2 12.1 landed
- 89b4d7744c80 13.0 landed
-
For all ppc compilers, implement pg_atomic_fetch_add_ with inline asm.
- e7ff59686eac 13.0 landed
-
Replace xlc __fetch_and_add() with inline asm.
- a1df9a015dac 9.6.16 landed
- 8972ac696665 10.11 landed
- 75941f257aac 9.5.20 landed
- 40ad4202513c 11.6 landed
- 1c6b62a7d0e5 12.0 landed
- dd50f1a43290 13.0 landed
-
Test pg_atomic_fetch_add_ with variable addend and 16-bit edge cases.
- e6a90ded5a6c 10.11 landed
- 8d32f82cbbbb 9.6.16 landed
- 4737d3a75b72 9.5.20 landed
- 5b5b0f721d9c 12.0 landed
- 585fc561f824 11.6 landed
- f380c5190134 13.0 landed