From e1c58f858a64853c2d454fd00a84455ca6700055 Mon Sep 17 00:00:00 2001 From: Martin Doerr Date: Fri, 22 Aug 2025 09:01:21 +0000 Subject: [PATCH] 8360540: nmethod entry barriers of new nmethods should be disarmed Reviewed-by: eosterlund, tschatzl --- src/hotspot/share/gc/g1/g1CollectedHeap.cpp | 3 +++ src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp | 3 +++ src/hotspot/share/gc/serial/serialHeap.cpp | 3 +++ 3 files changed, 9 insertions(+) diff --git a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp index e50821e96c1..bf512cfa19d 100644 --- a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp +++ b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp @@ -74,6 +74,7 @@ #include "gc/g1/g1VMOperations.hpp" #include "gc/g1/g1YoungCollector.hpp" #include "gc/g1/g1YoungGCAllocationFailureInjector.hpp" +#include "gc/shared/barrierSetNMethod.hpp" #include "gc/shared/classUnloadingContext.hpp" #include "gc/shared/concurrentGCBreakpoints.hpp" #include "gc/shared/fullGCForwarding.hpp" @@ -3079,6 +3080,8 @@ void G1CollectedHeap::register_nmethod(nmethod* nm) { guarantee(nm != nullptr, "sanity"); RegisterNMethodOopClosure reg_cl(this, nm); nm->oops_do(®_cl); + BarrierSetNMethod* bs_nm = BarrierSet::barrier_set()->barrier_set_nmethod(); + bs_nm->disarm(nm); } void G1CollectedHeap::unregister_nmethod(nmethod* nm) { diff --git a/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp b/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp index c6a9a312e5c..07ae097c5b8 100644 --- a/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp +++ b/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp @@ -32,6 +32,7 @@ #include "gc/parallel/psPromotionManager.hpp" #include "gc/parallel/psScavenge.hpp" #include "gc/parallel/psVMOperations.hpp" +#include "gc/shared/barrierSetNMethod.hpp" #include "gc/shared/fullGCForwarding.inline.hpp" #include "gc/shared/gcHeapSummary.hpp" #include "gc/shared/gcLocker.inline.hpp" @@ -861,6 +862,8 @@ void ParallelScavengeHeap::complete_loaded_archive_space(MemRegion archive_space void ParallelScavengeHeap::register_nmethod(nmethod* nm) { ScavengableNMethods::register_nmethod(nm); + BarrierSetNMethod* bs_nm = BarrierSet::barrier_set()->barrier_set_nmethod(); + bs_nm->disarm(nm); } void ParallelScavengeHeap::unregister_nmethod(nmethod* nm) { diff --git a/src/hotspot/share/gc/serial/serialHeap.cpp b/src/hotspot/share/gc/serial/serialHeap.cpp index 6b9328b8697..72f8ad85a4e 100644 --- a/src/hotspot/share/gc/serial/serialHeap.cpp +++ b/src/hotspot/share/gc/serial/serialHeap.cpp @@ -34,6 +34,7 @@ #include "gc/serial/serialMemoryPools.hpp" #include "gc/serial/serialVMOperations.hpp" #include "gc/serial/tenuredGeneration.inline.hpp" +#include "gc/shared/barrierSetNMethod.hpp" #include "gc/shared/cardTableBarrierSet.hpp" #include "gc/shared/classUnloadingContext.hpp" #include "gc/shared/collectedHeap.inline.hpp" @@ -432,6 +433,8 @@ bool SerialHeap::do_young_collection(bool clear_soft_refs) { void SerialHeap::register_nmethod(nmethod* nm) { ScavengableNMethods::register_nmethod(nm); + BarrierSetNMethod* bs_nm = BarrierSet::barrier_set()->barrier_set_nmethod(); + bs_nm->disarm(nm); } void SerialHeap::unregister_nmethod(nmethod* nm) {