On Fri, 20 Aug 2021 16:41:40 GMT, Coleen Phillimore <cole...@openjdk.org> wrote:
> I moved nonleaf ranked locks to be leaf (or leaf+something). Many of the > leaf locks are safepoint_check_never. Segregating this rank into safepoint > checking and non-safepoint checking is left for a future RFE. > Tested with tier1-3. Tier 4-6 testing in progress. src/hotspot/share/prims/jvmtiTagMap.cpp line 75: > 73: JvmtiTagMap::JvmtiTagMap(JvmtiEnv* env) : > 74: _env(env), > 75: _lock(Mutex::leaf, "JvmtiTagMap_lock", Mutex::_allow_vm_block_flag, David, note this lock. Since it allows the VM to block, then making it non-leaf is meaningless, since allowing the VM to block means that once you take this lock, you may NOT take another lock that blocks for safepoint. src/hotspot/share/runtime/mutexLocker.cpp line 289: > 287: def(JfieldIdCreation_lock , PaddedMutex , nonleaf+1, true, > _safepoint_check_always); // jfieldID, Used in VM_Operation > 288: > 289: def(CompiledIC_lock , PaddedMutex , leaf+2, false, > _safepoint_check_never); // locks VtableStubs_lock, > InlineCacheBuffer_lock In my testing, the CompiledIC_lock only takes other locks that never safepoint check, so this should be at the top of the hierarchy of locks that do that. OR it can safepoint_check_always. That might make sense, but I'd rather not change the safepoint checking properties with this change. src/hotspot/share/runtime/mutexLocker.cpp line 318: > 316: def(JfrMsg_lock , PaddedMonitor, leaf, true, > _safepoint_check_always); > 317: def(JfrBuffer_lock , PaddedMutex , leaf, true, > _safepoint_check_never); > 318: def(JfrStream_lock , PaddedMutex , leaf+1, false, > _safepoint_check_never); This lock is actually unused. ------------- PR: https://git.openjdk.java.net/jdk/pull/5203