Sat, 08 Oct 2016 09:31:28 -0400
The parallel GC mark-phase should be MT-safe for 3A2000.
1.1 --- a/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp Thu Sep 29 09:54:38 2016 +0800 1.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/parMarkBitMap.cpp Sat Oct 08 09:31:28 2016 -0400 1.3 @@ -105,6 +105,9 @@ 1.4 assert(end_bit_ok, "concurrency problem"); 1.5 DEBUG_ONLY(Atomic::inc_ptr(&mark_bitmap_count)); 1.6 DEBUG_ONLY(Atomic::add_ptr(size, &mark_bitmap_size)); 1.7 +#ifdef MIPS64 1.8 + if (Use3A2000) OrderAccess::fence(); 1.9 +#endif 1.10 return true; 1.11 } 1.12 return false;
2.1 --- a/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.inline.hpp Thu Sep 29 09:54:38 2016 +0800 2.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.inline.hpp Sat Oct 08 09:31:28 2016 -0400 2.3 @@ -33,6 +33,9 @@ 2.4 ObjArrayTask task(obj, index); 2.5 assert(task.is_valid(), "bad ObjArrayTask"); 2.6 _objarray_stack.push(task); 2.7 +#ifdef MIPS64 2.8 + if (Use3A2000) OrderAccess::fence(); 2.9 +#endif 2.10 } 2.11 2.12 void ParCompactionManager::push_region(size_t index) 2.13 @@ -44,6 +47,9 @@ 2.14 assert(region_ptr->_pushed++ == 0, "should only be pushed once"); 2.15 #endif 2.16 region_stack()->push(index); 2.17 +#ifdef MIPS64 2.18 + if (Use3A2000) OrderAccess::fence(); 2.19 +#endif 2.20 } 2.21 2.22 #endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSCOMPACTIONMANAGER_INLINE_HPP
3.1 --- a/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp Thu Sep 29 09:54:38 2016 +0800 3.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp Sat Oct 08 09:31:28 2016 -0400 3.3 @@ -496,6 +496,9 @@ 3.4 if (beg_region == end_region) { 3.5 // All in one region. 3.6 _region_data[beg_region].add_live_obj(len); 3.7 +#ifdef MIPS64 3.8 + if (Use3A2000) OrderAccess::fence(); 3.9 +#endif 3.10 return; 3.11 } 3.12 3.13 @@ -514,6 +517,9 @@ 3.14 const size_t end_ofs = region_offset(addr + len - 1); 3.15 _region_data[end_region].set_partial_obj_size(end_ofs + 1); 3.16 _region_data[end_region].set_partial_obj_addr(addr); 3.17 +#ifdef MIPS64 3.18 + if (Use3A2000) OrderAccess::fence(); 3.19 +#endif 3.20 } 3.21 3.22 void
4.1 --- a/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp Thu Sep 29 09:54:38 2016 +0800 4.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp Sat Oct 08 09:31:28 2016 -0400 4.3 @@ -1322,6 +1322,9 @@ 4.4 const int obj_size = obj->size(); 4.5 if (mark_bitmap()->mark_obj(obj, obj_size)) { 4.6 _summary_data.add_obj(obj, obj_size); 4.7 +#ifdef MIPS64 4.8 + if (Use3A2000) OrderAccess::fence(); 4.9 +#endif 4.10 return true; 4.11 } else { 4.12 return false; 4.13 @@ -1356,6 +1359,9 @@ 4.14 oop obj = oopDesc::decode_heap_oop_not_null(heap_oop); 4.15 if (mark_bitmap()->is_unmarked(obj) && mark_obj(obj)) { 4.16 cm->push(obj); 4.17 +#ifdef MIPS64 4.18 + if (Use3A2000) OrderAccess::fence(); 4.19 +#endif 4.20 } 4.21 } 4.22 }