-
Bug
-
Resolution: Fixed
-
P3
-
21, 22
-
b27
-
ppc
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8322099 | 21.0.3 | Martin Doerr | P3 | Resolved | Fixed | b01 |
The test java/lang/Thread/virtual/stress/Skynet.java#ZGenerational often hangs or throws RejectedExecutionException: Queue capacity exceeded.
The issue occurs only when C1 is enabled. "-XX:DisableIntrinsic=_getAndSetReference" was found as possible workaround.
Further analysis shows that atomic_xchg_at_resolved generates wrong code because it calls xchg with colliding registers which are not handled correctly in the PPC64 code. In addition, memory barriers are missing because PPC64 code currently adds them in LIR instead of in the assembler.
The issue occurs only when C1 is enabled. "-XX:DisableIntrinsic=_getAndSetReference" was found as possible workaround.
Further analysis shows that atomic_xchg_at_resolved generates wrong code because it calls xchg with colliding registers which are not handled correctly in the PPC64 code. In addition, memory barriers are missing because PPC64 code currently adds them in LIR instead of in the assembler.
- backported by
-
JDK-8322099 [PPC64][ZGC] C1 generates wrong code for atomics
- Resolved
- relates to
-
JDK-8300247 Harden C1 xchg on AArch64 and PPC
- Resolved
- links to
-
Commit openjdk/jdk21u-dev/0106db07
-
Commit openjdk/jdk/3087e14c
-
Review openjdk/jdk21u-dev/4
-
Review openjdk/jdk/16835
(1 links to)