--- old/src/hotspot/cpu/arm/macroAssembler_arm.cpp 2018-06-14 15:22:34.456663048 +0300 +++ new/src/hotspot/cpu/arm/macroAssembler_arm.cpp 2018-06-14 15:22:34.044660972 +0300 @@ -3014,8 +3014,8 @@ mov(Rscratch, SP); sub(Rscratch, Rmark, Rscratch); ands(Rscratch, Rscratch, imm); - b(done, ne); // exit with failure - str(Rscratch, Address(Rbox, BasicLock::displaced_header_offset_in_bytes())); // set to zero + // set to zero if recursive lock, set to non zero otherwise (see discussion in JDK-8153107) + str(Rscratch, Address(Rbox, BasicLock::displaced_header_offset_in_bytes())); b(done); #else @@ -3025,7 +3025,8 @@ sub(Rscratch, Rmark, SP, eq); movs(Rscratch, AsmOperand(Rscratch, lsr, exact_log2(os::vm_page_size())), eq); // If still 'eq' then recursive locking OK - str(Rscratch, Address(Rbox, BasicLock::displaced_header_offset_in_bytes()), eq); // set to zero + // set to zero if recursive lock, set to non zero otherwise (see discussion in JDK-8153107) + str(Rscratch, Address(Rbox, BasicLock::displaced_header_offset_in_bytes())); b(done); #endif --- old/src/hotspot/share/runtime/sharedRuntime.cpp 2018-06-14 15:22:35.508073963 +0300 +++ new/src/hotspot/share/runtime/sharedRuntime.cpp 2018-06-14 15:22:35.182368682 +0300 @@ -1983,11 +1983,7 @@ // Handles the uncommon case in locking, i.e., contention or an inflated lock. JRT_BLOCK_ENTRY(void, SharedRuntime::complete_monitor_locking_C(oopDesc* _obj, BasicLock* lock, JavaThread* thread)) - // Disable ObjectSynchronizer::quick_enter() in default config - // on AARCH64 and ARM until JDK-8153107 is resolved. - if (ARM_ONLY((SyncFlags & 256) != 0 &&) - AARCH64_ONLY((SyncFlags & 256) != 0 &&) - !SafepointSynchronize::is_synchronizing()) { + if (!SafepointSynchronize::is_synchronizing()) { // Only try quick_enter() if we're not trying to reach a safepoint // so that the calling thread reaches the safepoint more quickly. if (ObjectSynchronizer::quick_enter(_obj, thread, lock)) return;