RFR: 8338810: PPC, s390x: LightweightSynchronizer::exit asserts, missing lock

Amit Kumar amitkumar at openjdk.org
Thu Aug 22 08:50:06 UTC 2024


On Thu, 22 Aug 2024 06:20:23 GMT, Axel Boldt-Christmas <aboldtch at openjdk.org> wrote:

> [JDK-8338638](https://bugs.openjdk.org/browse/JDK-8338638) made me realise that PPC and s390x have the same issue.
> 
> The issue is that the C2 unlock path will check if the monitor is inflated after popping of the last entry on the lock stack. With UseObjectMonitorTable (without the the cache lookup implemented), the slow path is incorrectly taken without resting the popped oop. Currently the runtime expects the the lock stack to be consistent (have an entry) in exit if a the monitor is anonymously inflated.
> 
> I'll provide a bandaid fix which pushes back the oop before the calling to the runtime.
> 
> A future enhancement for all platform would be to allow the C2 entry point to redo the push when taking the slow path and it realises that the monitor is anonymously inflated or it is fast locked and the lock stack does not contain the oop. (Removing all the push back logic from the emitted C2 unlock nodes)
> 
> I am unable to test ppc and s390x, so I have not verified that the issue is reproduced nor that this fixes it. 
> Hopefully @TheRealMDoerr and @offamitkumar can assist me here with running `test/hotspot/jtreg/runtime/Monitor/UseObjectMonitorTableTest.java` with and without the patch on PPC and s390x respectively. 
> Thanks in advance. (And sorry for integrating without better testing of your respective platforms)

s390x Part looks good as well. Test also passes; 


./summary.txt:1889:runtime/Monitor/UseObjectMonitorTableTest.java#ExtremeDeflation  Passed. Execution successful
./summary.txt:1890:runtime/Monitor/UseObjectMonitorTableTest.java#NormalDeflation   Passed. Execution successful

-------------

Marked as reviewed by amitkumar (Committer).

PR Review: https://git.openjdk.org/jdk/pull/20672#pullrequestreview-2253884335


More information about the hotspot-dev mailing list