# HG changeset patch # User rkennke # Date 1533718307 -7200 # Wed Aug 08 10:51:47 2018 +0200 # Node ID 09f38b1b718989dc0fd566eb172878995dca7fe1 # Parent 7939b3c4e4088bf4f70ec5bbd8030393b653372f 8209118: Abstract SATBMarkQueueSet's ThreadLocalData access diff --git a/src/hotspot/cpu/ppc/gc/g1/g1BarrierSetAssembler_ppc.cpp b/src/hotspot/cpu/ppc/gc/g1/g1BarrierSetAssembler_ppc.cpp --- a/src/hotspot/cpu/ppc/gc/g1/g1BarrierSetAssembler_ppc.cpp +++ b/src/hotspot/cpu/ppc/gc/g1/g1BarrierSetAssembler_ppc.cpp @@ -458,7 +458,7 @@ __ mflr(R0); __ std(R0, _abi(lr), R1_SP); __ push_frame_reg_args(nbytes_save, R0); // dummy frame for C call - __ call_VM_leaf(CAST_FROM_FN_PTR(address, SATBMarkQueueSet::handle_zero_index_for_thread), R16_thread); + __ call_VM_leaf(CAST_FROM_FN_PTR(address, G1SATBMarkQueueSet::handle_zero_index_for_thread), R16_thread); __ pop_frame(); __ ld(R0, _abi(lr), R1_SP); __ mtlr(R0); diff --git a/src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.cpp b/src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.cpp --- a/src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.cpp +++ b/src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.cpp @@ -520,7 +520,7 @@ __ bind(refill); save_volatile_registers(sasm); __ z_lgr(tmp, pre_val); // save pre_val - __ call_VM_leaf(CAST_FROM_FN_PTR(address, SATBMarkQueueSet::handle_zero_index_for_thread), + __ call_VM_leaf(CAST_FROM_FN_PTR(address, G1SATBMarkQueueSet::handle_zero_index_for_thread), Z_thread); __ z_lgr(pre_val, tmp); // restore pre_val restore_volatile_registers(sasm); diff --git a/src/hotspot/cpu/sparc/gc/g1/g1BarrierSetAssembler_sparc.cpp b/src/hotspot/cpu/sparc/gc/g1/g1BarrierSetAssembler_sparc.cpp --- a/src/hotspot/cpu/sparc/gc/g1/g1BarrierSetAssembler_sparc.cpp +++ b/src/hotspot/cpu/sparc/gc/g1/g1BarrierSetAssembler_sparc.cpp @@ -160,7 +160,7 @@ address handle_zero = CAST_FROM_FN_PTR(address, - &SATBMarkQueueSet::handle_zero_index_for_thread); + &G1SATBMarkQueueSet::handle_zero_index_for_thread); // This should be rare enough that we can afford to save all the // scratch registers that the calling context might be using. __ mov(G1_scratch, L0); @@ -606,7 +606,7 @@ __ call_VM_leaf(L7_thread_cache, CAST_FROM_FN_PTR(address, - SATBMarkQueueSet::handle_zero_index_for_thread), + G1SATBMarkQueueSet::handle_zero_index_for_thread), G2_thread); __ restore_live_registers(true); diff --git a/src/hotspot/share/gc/g1/g1BarrierSet.cpp b/src/hotspot/share/gc/g1/g1BarrierSet.cpp --- a/src/hotspot/share/gc/g1/g1BarrierSet.cpp +++ b/src/hotspot/share/gc/g1/g1BarrierSet.cpp @@ -48,7 +48,7 @@ class G1BarrierSetC1; class G1BarrierSetC2; -SATBMarkQueueSet G1BarrierSet::_satb_mark_queue_set; +G1SATBMarkQueueSet G1BarrierSet::_satb_mark_queue_set; DirtyCardQueueSet G1BarrierSet::_dirty_card_queue_set; G1BarrierSet::G1BarrierSet(G1CardTable* card_table) : diff --git a/src/hotspot/share/gc/g1/g1BarrierSet.hpp b/src/hotspot/share/gc/g1/g1BarrierSet.hpp --- a/src/hotspot/share/gc/g1/g1BarrierSet.hpp +++ b/src/hotspot/share/gc/g1/g1BarrierSet.hpp @@ -39,7 +39,7 @@ class G1BarrierSet: public CardTableBarrierSet { friend class VMStructs; private: - static SATBMarkQueueSet _satb_mark_queue_set; + static G1SATBMarkQueueSet _satb_mark_queue_set; static DirtyCardQueueSet _dirty_card_queue_set; public: diff --git a/src/hotspot/share/gc/g1/satbMarkQueue.cpp b/src/hotspot/share/gc/g1/satbMarkQueue.cpp --- a/src/hotspot/share/gc/g1/satbMarkQueue.cpp +++ b/src/hotspot/share/gc/g1/satbMarkQueue.cpp @@ -117,17 +117,13 @@ _filter = filter; } -void SATBMarkQueueSet::handle_zero_index_for_thread(JavaThread* t) { - G1ThreadLocalData::satb_mark_queue(t).handle_zero_index(); -} - #ifdef ASSERT void SATBMarkQueueSet::dump_active_states(bool expected_active) { log_error(gc, verify)("Expected SATB active state: %s", expected_active ? "ACTIVE" : "INACTIVE"); log_error(gc, verify)("Actual SATB active states:"); log_error(gc, verify)(" Queue set: %s", is_active() ? "ACTIVE" : "INACTIVE"); for (JavaThreadIteratorWithHandle jtiwh; JavaThread *t = jtiwh.next(); ) { - log_error(gc, verify)(" Thread \"%s\" queue: %s", t->name(), G1ThreadLocalData::satb_mark_queue(t).is_active() ? "ACTIVE" : "INACTIVE"); + log_error(gc, verify)(" Thread \"%s\" queue: %s", t->name(), satb_queue_for_thread(t).is_active() ? "ACTIVE" : "INACTIVE"); } log_error(gc, verify)(" Shared queue: %s", shared_satb_queue()->is_active() ? "ACTIVE" : "INACTIVE"); } @@ -141,7 +137,7 @@ // Verify thread queue states for (JavaThreadIteratorWithHandle jtiwh; JavaThread *t = jtiwh.next(); ) { - if (G1ThreadLocalData::satb_mark_queue(t).is_active() != expected_active) { + if (satb_queue_for_thread(t).is_active() != expected_active) { dump_active_states(expected_active); guarantee(false, "Thread SATB queue has an unexpected active state"); } @@ -162,14 +158,14 @@ #endif // ASSERT _all_active = active; for (JavaThreadIteratorWithHandle jtiwh; JavaThread *t = jtiwh.next(); ) { - G1ThreadLocalData::satb_mark_queue(t).set_active(active); + satb_queue_for_thread(t).set_active(active); } shared_satb_queue()->set_active(active); } void SATBMarkQueueSet::filter_thread_buffers() { for (JavaThreadIteratorWithHandle jtiwh; JavaThread *t = jtiwh.next(); ) { - G1ThreadLocalData::satb_mark_queue(t).filter(); + satb_queue_for_thread(t).filter(); } shared_satb_queue()->filter(); } @@ -223,7 +219,7 @@ for (JavaThreadIteratorWithHandle jtiwh; JavaThread *t = jtiwh.next(); ) { jio_snprintf(buffer, SATB_PRINTER_BUFFER_SIZE, "Thread: %s", t->name()); - G1ThreadLocalData::satb_mark_queue(t).print(buffer); + satb_queue_for_thread(t).print(buffer); } shared_satb_queue()->print("Shared"); @@ -254,7 +250,15 @@ assert(SafepointSynchronize::is_at_safepoint(), "Must be at safepoint."); // So we can safely manipulate these queues. for (JavaThreadIteratorWithHandle jtiwh; JavaThread *t = jtiwh.next(); ) { - G1ThreadLocalData::satb_mark_queue(t).reset(); + satb_queue_for_thread(t).reset(); } shared_satb_queue()->reset(); } + +void G1SATBMarkQueueSet::handle_zero_index_for_thread(JavaThread* t) { + G1ThreadLocalData::satb_mark_queue(t).handle_zero_index(); +} + +SATBMarkQueue& G1SATBMarkQueueSet::satb_queue_for_thread(JavaThread* const t) const{ + return G1ThreadLocalData::satb_mark_queue(t); +} diff --git a/src/hotspot/share/gc/g1/satbMarkQueue.hpp b/src/hotspot/share/gc/g1/satbMarkQueue.hpp --- a/src/hotspot/share/gc/g1/satbMarkQueue.hpp +++ b/src/hotspot/share/gc/g1/satbMarkQueue.hpp @@ -113,7 +113,7 @@ int process_completed_threshold, Mutex* lock); - static void handle_zero_index_for_thread(JavaThread* t); + virtual SATBMarkQueue& satb_queue_for_thread(JavaThread* const t) const = 0; // Apply "set_active(active)" to all SATB queues in the set. It should be // called only with the world stopped. The method will assert that the @@ -145,6 +145,12 @@ void abandon_partial_marking(); }; +class G1SATBMarkQueueSet : public SATBMarkQueueSet { +public: + static void handle_zero_index_for_thread(JavaThread* t); + virtual SATBMarkQueue& satb_queue_for_thread(JavaThread* const t) const; +}; + inline void SATBMarkQueue::filter() { static_cast(qset())->filter(this); } # HG changeset patch # User rkennke # Date 1533740791 -7200 # Wed Aug 08 17:06:31 2018 +0200 # Node ID 96d16b5053da252c5996569a0385f53d8c6c53f5 # Parent 09f38b1b718989dc0fd566eb172878995dca7fe1 [mq]: JDK-8209118-01.patch diff --git a/src/hotspot/cpu/ppc/gc/g1/g1BarrierSetAssembler_ppc.cpp b/src/hotspot/cpu/ppc/gc/g1/g1BarrierSetAssembler_ppc.cpp --- a/src/hotspot/cpu/ppc/gc/g1/g1BarrierSetAssembler_ppc.cpp +++ b/src/hotspot/cpu/ppc/gc/g1/g1BarrierSetAssembler_ppc.cpp @@ -29,6 +29,7 @@ #include "gc/g1/g1BarrierSetAssembler.hpp" #include "gc/g1/g1BarrierSetRuntime.hpp" #include "gc/g1/g1CardTable.hpp" +#include "gc/g1/g1SATBMarkQueueSet.hpp" #include "gc/g1/g1ThreadLocalData.hpp" #include "gc/g1/heapRegion.hpp" #include "interpreter/interp_masm.hpp" diff --git a/src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.cpp b/src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.cpp --- a/src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.cpp +++ b/src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.cpp @@ -30,6 +30,7 @@ #include "gc/g1/g1BarrierSet.hpp" #include "gc/g1/g1BarrierSetAssembler.hpp" #include "gc/g1/g1BarrierSetRuntime.hpp" +#include "gc/g1/g1SATBMarkQueueSet.hpp" #include "gc/g1/g1ThreadLocalData.hpp" #include "gc/g1/heapRegion.hpp" #include "interpreter/interp_masm.hpp" diff --git a/src/hotspot/cpu/sparc/gc/g1/g1BarrierSetAssembler_sparc.cpp b/src/hotspot/cpu/sparc/gc/g1/g1BarrierSetAssembler_sparc.cpp --- a/src/hotspot/cpu/sparc/gc/g1/g1BarrierSetAssembler_sparc.cpp +++ b/src/hotspot/cpu/sparc/gc/g1/g1BarrierSetAssembler_sparc.cpp @@ -28,6 +28,7 @@ #include "gc/g1/g1BarrierSetAssembler.hpp" #include "gc/g1/g1BarrierSetRuntime.hpp" #include "gc/g1/g1CardTable.hpp" +#include "gc/g1/g1SATBMarkQueueSet.hpp" #include "gc/g1/g1ThreadLocalData.hpp" #include "gc/g1/heapRegion.hpp" #include "interpreter/interp_masm.hpp" @@ -607,7 +608,7 @@ __ call_VM_leaf(L7_thread_cache, CAST_FROM_FN_PTR(address, G1SATBMarkQueueSet::handle_zero_index_for_thread), - G2_thread); + G2_thread); __ restore_live_registers(true); @@ -694,7 +695,7 @@ __ call_VM_leaf(L7_thread_cache, CAST_FROM_FN_PTR(address, DirtyCardQueueSet::handle_zero_index_for_thread), - G2_thread); + G2_thread); __ restore_live_registers(true); diff --git a/src/hotspot/share/gc/g1/g1BarrierSet.hpp b/src/hotspot/share/gc/g1/g1BarrierSet.hpp --- a/src/hotspot/share/gc/g1/g1BarrierSet.hpp +++ b/src/hotspot/share/gc/g1/g1BarrierSet.hpp @@ -26,7 +26,7 @@ #define SHARE_VM_GC_G1_G1BARRIERSET_HPP #include "gc/g1/dirtyCardQueue.hpp" -#include "gc/g1/satbMarkQueue.hpp" +#include "gc/g1/g1SATBMarkQueueSet.hpp" #include "gc/shared/cardTableBarrierSet.hpp" class DirtyCardQueueSet; @@ -39,7 +39,7 @@ class G1BarrierSet: public CardTableBarrierSet { friend class VMStructs; private: - static G1SATBMarkQueueSet _satb_mark_queue_set; + static G1SATBMarkQueueSet _satb_mark_queue_set; static DirtyCardQueueSet _dirty_card_queue_set; public: diff --git a/src/hotspot/share/gc/g1/satbMarkQueue.cpp b/src/hotspot/share/gc/g1/satbMarkQueue.cpp --- a/src/hotspot/share/gc/g1/satbMarkQueue.cpp +++ b/src/hotspot/share/gc/g1/satbMarkQueue.cpp @@ -25,7 +25,6 @@ #include "precompiled.hpp" #include "jvm.h" #include "gc/g1/g1CollectedHeap.inline.hpp" -#include "gc/g1/g1ThreadLocalData.hpp" #include "gc/g1/satbMarkQueue.hpp" #include "gc/shared/collectedHeap.hpp" #include "memory/allocation.inline.hpp" @@ -254,11 +253,3 @@ } shared_satb_queue()->reset(); } - -void G1SATBMarkQueueSet::handle_zero_index_for_thread(JavaThread* t) { - G1ThreadLocalData::satb_mark_queue(t).handle_zero_index(); -} - -SATBMarkQueue& G1SATBMarkQueueSet::satb_queue_for_thread(JavaThread* const t) const{ - return G1ThreadLocalData::satb_mark_queue(t); -} diff --git a/src/hotspot/share/gc/g1/satbMarkQueue.hpp b/src/hotspot/share/gc/g1/satbMarkQueue.hpp --- a/src/hotspot/share/gc/g1/satbMarkQueue.hpp +++ b/src/hotspot/share/gc/g1/satbMarkQueue.hpp @@ -145,12 +145,6 @@ void abandon_partial_marking(); }; -class G1SATBMarkQueueSet : public SATBMarkQueueSet { -public: - static void handle_zero_index_for_thread(JavaThread* t); - virtual SATBMarkQueue& satb_queue_for_thread(JavaThread* const t) const; -}; - inline void SATBMarkQueue::filter() { static_cast(qset())->filter(this); }