# HG changeset patch # User rkennke # Date 1533847908 -7200 # Node ID adcb0bb3d1e95208775eb194f1563a6599f34c2f # Parent d9439d4b15e25440e29df6638e495298505e1512 8209118: Abstract SATBMarkQueueSet's ThreadLocalData access Reviewed-by: kbarrett, shade diff -r d9439d4b15e2 -r adcb0bb3d1e9 src/hotspot/cpu/ppc/gc/g1/g1BarrierSetAssembler_ppc.cpp --- a/src/hotspot/cpu/ppc/gc/g1/g1BarrierSetAssembler_ppc.cpp Thu Aug 09 11:39:18 2018 -0700 +++ b/src/hotspot/cpu/ppc/gc/g1/g1BarrierSetAssembler_ppc.cpp Thu Aug 09 22:51:48 2018 +0200 @@ -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" @@ -458,7 +459,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 -r d9439d4b15e2 -r adcb0bb3d1e9 src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.cpp --- a/src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.cpp Thu Aug 09 11:39:18 2018 -0700 +++ b/src/hotspot/cpu/s390/gc/g1/g1BarrierSetAssembler_s390.cpp Thu Aug 09 22:51:48 2018 +0200 @@ -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" @@ -520,7 +521,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 -r d9439d4b15e2 -r adcb0bb3d1e9 src/hotspot/cpu/sparc/gc/g1/g1BarrierSetAssembler_sparc.cpp --- a/src/hotspot/cpu/sparc/gc/g1/g1BarrierSetAssembler_sparc.cpp Thu Aug 09 11:39:18 2018 -0700 +++ b/src/hotspot/cpu/sparc/gc/g1/g1BarrierSetAssembler_sparc.cpp Thu Aug 09 22:51:48 2018 +0200 @@ -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" @@ -160,7 +161,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,8 +607,8 @@ __ call_VM_leaf(L7_thread_cache, CAST_FROM_FN_PTR(address, - SATBMarkQueueSet::handle_zero_index_for_thread), - G2_thread); + G1SATBMarkQueueSet::handle_zero_index_for_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 -r d9439d4b15e2 -r adcb0bb3d1e9 src/hotspot/share/gc/g1/g1BarrierSet.cpp --- a/src/hotspot/share/gc/g1/g1BarrierSet.cpp Thu Aug 09 11:39:18 2018 -0700 +++ b/src/hotspot/share/gc/g1/g1BarrierSet.cpp Thu Aug 09 22:51:48 2018 +0200 @@ -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 -r d9439d4b15e2 -r adcb0bb3d1e9 src/hotspot/share/gc/g1/g1BarrierSet.hpp --- a/src/hotspot/share/gc/g1/g1BarrierSet.hpp Thu Aug 09 11:39:18 2018 -0700 +++ b/src/hotspot/share/gc/g1/g1BarrierSet.hpp Thu Aug 09 22:51:48 2018 +0200 @@ -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 SATBMarkQueueSet _satb_mark_queue_set; + static G1SATBMarkQueueSet _satb_mark_queue_set; static DirtyCardQueueSet _dirty_card_queue_set; public: diff -r d9439d4b15e2 -r adcb0bb3d1e9 src/hotspot/share/gc/g1/g1SATBMarkQueueSet.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/hotspot/share/gc/g1/g1SATBMarkQueueSet.cpp Thu Aug 09 22:51:48 2018 +0200 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "gc/g1/g1SATBMarkQueueSet.hpp" +#include "gc/g1/g1ThreadLocalData.hpp" + +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 -r d9439d4b15e2 -r adcb0bb3d1e9 src/hotspot/share/gc/g1/g1SATBMarkQueueSet.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/hotspot/share/gc/g1/g1SATBMarkQueueSet.hpp Thu Aug 09 22:51:48 2018 +0200 @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_GC_G1_G1SATBMARKQUEUE_HPP +#define SHARE_VM_GC_G1_G1SATBMARKQUEUE_HPP + +#include "gc/g1/satbMarkQueue.hpp" + +class JavaThread; + +class G1SATBMarkQueueSet : public SATBMarkQueueSet { +public: + static void handle_zero_index_for_thread(JavaThread* t); + virtual SATBMarkQueue& satb_queue_for_thread(JavaThread* const t) const; +}; + +#endif // SHARE_VM_GC_G1_G1SATBMARKQUEUE_HPP diff -r d9439d4b15e2 -r adcb0bb3d1e9 src/hotspot/share/gc/g1/satbMarkQueue.cpp --- a/src/hotspot/share/gc/g1/satbMarkQueue.cpp Thu Aug 09 11:39:18 2018 -0700 +++ b/src/hotspot/share/gc/g1/satbMarkQueue.cpp Thu Aug 09 22:51:48 2018 +0200 @@ -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" @@ -117,17 +116,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 +136,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 +157,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 +218,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 +249,7 @@ 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(); } diff -r d9439d4b15e2 -r adcb0bb3d1e9 src/hotspot/share/gc/g1/satbMarkQueue.hpp --- a/src/hotspot/share/gc/g1/satbMarkQueue.hpp Thu Aug 09 11:39:18 2018 -0700 +++ b/src/hotspot/share/gc/g1/satbMarkQueue.hpp Thu Aug 09 22:51:48 2018 +0200 @@ -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