Projects
openEuler:24.03:SP1:Everything
openjdk-1.8.0
_service:tar_scm:8033552.patch
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:8033552.patch of Package openjdk-1.8.0
From 0b1075c6504aa93a027b1dc84797e7ecaa0880b9 Mon Sep 17 00:00:00 2001 Date: Fri, 22 Jan 2021 15:20:45 +0800 Subject: 8033552:Fix missing missing volatile specifiers in CAS operations in GC code Summary: GC:Fix missing missing volatile specifiers in CAS operations in GC code LLT: org.openjdk.jcstress.tests.defaultValues.arrays.small.plain.StringTest Bug url: https://bugs.openjdk.java.net/browse/JDK-8033552 --- .../concurrentMarkSweep/cmsOopClosures.hpp | 4 ++-- .../concurrentMarkSweep/concurrentMarkSweepGeneration.cpp | 8 ++++---- .../concurrentMarkSweep/concurrentMarkSweepGeneration.hpp | 2 +- .../share/vm/gc_implementation/g1/heapRegionRemSet.cpp | 4 ++-- hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp | 2 +- hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp | 2 +- .../parallelScavenge/parallelScavengeHeap.hpp | 2 +- .../vm/gc_implementation/parallelScavenge/psYoungGen.hpp | 2 +- .../parallelScavenge/vmStructs_parallelgc.hpp | 3 ++- .../share/vm/gc_implementation/shared/mutableSpace.hpp | 4 ++-- hotspot/src/share/vm/gc_interface/collectedHeap.hpp | 2 +- hotspot/src/share/vm/memory/defNewGeneration.cpp | 2 +- hotspot/src/share/vm/memory/defNewGeneration.hpp | 2 +- hotspot/src/share/vm/memory/genCollectedHeap.cpp | 2 +- hotspot/src/share/vm/memory/genCollectedHeap.hpp | 2 +- hotspot/src/share/vm/memory/generation.hpp | 2 +- hotspot/src/share/vm/runtime/vmStructs.cpp | 3 +++ 17 files changed, 26 insertions(+), 22 deletions(-) diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp index 5220ee1f3..2697beda2 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp @@ -295,7 +295,7 @@ class Par_PushOrMarkClosure: public MetadataAwareOopClosure { OopTaskQueue* _work_queue; CMSMarkStack* _overflow_stack; HeapWord* const _finger; - HeapWord** const _global_finger_addr; + HeapWord*volatile* const _global_finger_addr; Par_MarkFromRootsClosure* const _parent; protected: @@ -307,7 +307,7 @@ class Par_PushOrMarkClosure: public MetadataAwareOopClosure { OopTaskQueue* work_queue, CMSMarkStack* mark_stack, HeapWord* finger, - HeapWord** global_finger_addr, + HeapWord*volatile* global_finger_addr, Par_MarkFromRootsClosure* parent); virtual void do_oop(oop* p); virtual void do_oop(narrowOop* p); diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp index d48e208c5..56fb1c451 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp @@ -3920,7 +3920,7 @@ class CMSConcMarkingTask: public YieldingFlexibleGangTask { bool _result; CompactibleFreeListSpace* _cms_space; char _pad_front[64]; // padding to ... - HeapWord* _global_finger; // ... avoid sharing cache line + HeapWord* volatile _global_finger; // ... avoid sharing cache line char _pad_back[64]; HeapWord* _restart_addr; @@ -3959,7 +3959,7 @@ class CMSConcMarkingTask: public YieldingFlexibleGangTask { OopTaskQueue* work_queue(int i) { return task_queues()->queue(i); } - HeapWord** global_finger_addr() { return &_global_finger; } + HeapWord*volatile* global_finger_addr() { return &_global_finger; } CMSConcMarkingTerminator* terminator() { return &_term; } @@ -7668,7 +7668,7 @@ void Par_MarkFromRootsClosure::scan_oops_in_oop(HeapWord* ptr) { // Note: the local finger doesn't advance while we drain // the stack below, but the global finger sure can and will. - HeapWord** gfa = _task->global_finger_addr(); + HeapWord*volatile* gfa = _task->global_finger_addr(); Par_PushOrMarkClosure pushOrMarkClosure(_collector, _span, _bit_map, _work_queue, @@ -7837,7 +7837,7 @@ Par_PushOrMarkClosure::Par_PushOrMarkClosure(CMSCollector* collector, OopTaskQueue* work_queue, CMSMarkStack* overflow_stack, HeapWord* finger, - HeapWord** global_finger_addr, + HeapWord*volatile* global_finger_addr, Par_MarkFromRootsClosure* parent) : MetadataAwareOopClosure(collector->ref_processor()), _collector(collector), diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp index c28f8d6c1..8b65d3426 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp @@ -750,7 +750,7 @@ class CMSCollector: public CHeapObj<mtGC> { private: // Support for parallelizing young gen rescan in CMS remark phase Generation* _young_gen; // the younger gen - HeapWord** _top_addr; // ... Top of Eden + HeapWord*volatile* _top_addr; // ... Top of Eden HeapWord** _end_addr; // ... End of Eden Mutex* _eden_chunk_lock; HeapWord** _eden_chunk_array; // ... Eden partitioning array diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp index ad8a3562e..8167d2b09 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp @@ -56,7 +56,7 @@ class PerRegionTable: public CHeapObj<mtGC> { PerRegionTable * _collision_list_next; // Global free list of PRTs - static PerRegionTable* _free_list; + static PerRegionTable* volatile _free_list; protected: // We need access in order to union things into the base table. @@ -250,7 +250,7 @@ public: static void test_fl_mem_size(); }; -PerRegionTable* PerRegionTable::_free_list = NULL; +PerRegionTable*volatile PerRegionTable::_free_list = NULL; size_t OtherRegionsTable::_max_fine_entries = 0; size_t OtherRegionsTable::_mod_max_fine_entries_mask = 0; diff --git a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp b/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp index 1439fe668..b9020002b 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp @@ -376,7 +376,7 @@ size_t RSHashTable::mem_size() const { // ---------------------------------------------------------------------- -SparsePRT* SparsePRT::_head_expanded_list = NULL; +SparsePRT* volatile SparsePRT::_head_expanded_list = NULL; void SparsePRT::add_to_expanded_list(SparsePRT* sprt) { // We could expand multiple times in a pause -- only put on list once. diff --git a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp b/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp index 5cc884621..17bd4a145 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.hpp @@ -236,7 +236,7 @@ class SparsePRT VALUE_OBJ_CLASS_SPEC { bool should_be_on_expanded_list(); - static SparsePRT* _head_expanded_list; + static SparsePRT*volatile _head_expanded_list; public: SparsePRT(HeapRegion* hr); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp index 5173ff94e..bf3a207cd 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp @@ -177,7 +177,7 @@ class ParallelScavengeHeap : public CollectedHeap { bool supports_inline_contig_alloc() const { return !UseNUMA; } - HeapWord** top_addr() const { return !UseNUMA ? young_gen()->top_addr() : (HeapWord**)-1; } + HeapWord*volatile* top_addr() const { return !UseNUMA ? young_gen()->top_addr() : (HeapWord**)-1; } HeapWord** end_addr() const { return !UseNUMA ? young_gen()->end_addr() : (HeapWord**)-1; } void ensure_parsability(bool retire_tlabs); diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp index e3da6bdf2..9bb7eb8e6 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp @@ -162,7 +162,7 @@ class PSYoungGen : public CHeapObj<mtGC> { return result; } - HeapWord** top_addr() const { return eden_space()->top_addr(); } + HeapWord*volatile* top_addr() const { return eden_space()->top_addr(); } HeapWord** end_addr() const { return eden_space()->end_addr(); } // Iteration. diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/vmStructs_parallelgc.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/vmStructs_parallelgc.hpp index 3c1a20284..051bcbd80 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/vmStructs_parallelgc.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/vmStructs_parallelgc.hpp @@ -26,6 +26,7 @@ #define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_VMSTRUCTS_PARALLELGC_HPP #define VM_STRUCTS_PARALLELGC(nonstatic_field, \ + volatile_nonstatic_field, \ static_field) \ \ /**********************/ \ @@ -40,7 +41,7 @@ nonstatic_field(ImmutableSpace, _bottom, HeapWord*) \ nonstatic_field(ImmutableSpace, _end, HeapWord*) \ \ - nonstatic_field(MutableSpace, _top, HeapWord*) \ + volatile_nonstatic_field(MutableSpace, _top, HeapWord*) \ \ nonstatic_field(PSYoungGen, _reserved, MemRegion) \ nonstatic_field(PSYoungGen, _virtual_space, PSVirtualSpace*) \ diff --git a/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.hpp b/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.hpp index 0f1dd075d..dbd52f24b 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.hpp @@ -51,7 +51,7 @@ class MutableSpace: public ImmutableSpace { MemRegion _last_setup_region; size_t _alignment; protected: - HeapWord* _top; + HeapWord *volatile _top; MutableSpaceMangler* mangler() { return _mangler; } @@ -69,7 +69,7 @@ class MutableSpace: public ImmutableSpace { HeapWord* top() const { return _top; } virtual void set_top(HeapWord* value) { _top = value; } - HeapWord** top_addr() { return &_top; } + HeapWord*volatile* top_addr() { return &_top; } HeapWord** end_addr() { return &_end; } virtual void set_bottom(HeapWord* value) { _bottom = value; } diff --git a/hotspot/src/share/vm/gc_interface/collectedHeap.hpp b/hotspot/src/share/vm/gc_interface/collectedHeap.hpp index c13d29780..88632ddc8 100644 --- a/hotspot/src/share/vm/gc_interface/collectedHeap.hpp +++ b/hotspot/src/share/vm/gc_interface/collectedHeap.hpp @@ -371,7 +371,7 @@ class CollectedHeap : public CHeapObj<mtInternal> { // These functions return the addresses of the fields that define the // boundaries of the contiguous allocation area. (These fields should be // physically near to one another.) - virtual HeapWord** top_addr() const { + virtual HeapWord*volatile* top_addr() const { guarantee(false, "inline contiguous allocation not supported"); return NULL; } diff --git a/hotspot/src/share/vm/memory/defNewGeneration.cpp b/hotspot/src/share/vm/memory/defNewGeneration.cpp index a9e1befed..e5ac4f847 100644 --- a/hotspot/src/share/vm/memory/defNewGeneration.cpp +++ b/hotspot/src/share/vm/memory/defNewGeneration.cpp @@ -494,7 +494,7 @@ size_t DefNewGeneration::contiguous_available() const { } -HeapWord** DefNewGeneration::top_addr() const { return eden()->top_addr(); } +HeapWord*volatile* DefNewGeneration::top_addr() const { return eden()->top_addr(); } HeapWord** DefNewGeneration::end_addr() const { return eden()->end_addr(); } void DefNewGeneration::object_iterate(ObjectClosure* blk) { diff --git a/hotspot/src/share/vm/memory/defNewGeneration.hpp b/hotspot/src/share/vm/memory/defNewGeneration.hpp index 28738619f..24d1b4c0f 100644 --- a/hotspot/src/share/vm/memory/defNewGeneration.hpp +++ b/hotspot/src/share/vm/memory/defNewGeneration.hpp @@ -233,7 +233,7 @@ protected: size_t max_survivor_size() const { return _max_survivor_size; } bool supports_inline_contig_alloc() const { return true; } - HeapWord** top_addr() const; + HeapWord*volatile* top_addr() const; HeapWord** end_addr() const; // Thread-local allocation buffers diff --git a/hotspot/src/share/vm/memory/genCollectedHeap.cpp b/hotspot/src/share/vm/memory/genCollectedHeap.cpp index 7f4fc0d61..bbe6370a6 100644 --- a/hotspot/src/share/vm/memory/genCollectedHeap.cpp +++ b/hotspot/src/share/vm/memory/genCollectedHeap.cpp @@ -782,7 +782,7 @@ bool GenCollectedHeap::supports_inline_contig_alloc() const { return _gens[0]->supports_inline_contig_alloc(); } -HeapWord** GenCollectedHeap::top_addr() const { +HeapWord*volatile* GenCollectedHeap::top_addr() const { return _gens[0]->top_addr(); } diff --git a/hotspot/src/share/vm/memory/genCollectedHeap.hpp b/hotspot/src/share/vm/memory/genCollectedHeap.hpp index 416ae8741..6d0dd591c 100644 --- a/hotspot/src/share/vm/memory/genCollectedHeap.hpp +++ b/hotspot/src/share/vm/memory/genCollectedHeap.hpp @@ -162,7 +162,7 @@ public: // We may support a shared contiguous allocation area, if the youngest // generation does. bool supports_inline_contig_alloc() const; - HeapWord** top_addr() const; + HeapWord*volatile* top_addr() const; HeapWord** end_addr() const; // Does this heap support heap inspection? (+PrintClassHistogram) diff --git a/hotspot/src/share/vm/memory/generation.hpp b/hotspot/src/share/vm/memory/generation.hpp index ca3fe949d..ef5457890 100644 --- a/hotspot/src/share/vm/memory/generation.hpp +++ b/hotspot/src/share/vm/memory/generation.hpp @@ -291,7 +291,7 @@ class Generation: public CHeapObj<mtGC> { // These functions return the addresses of the fields that define the // boundaries of the contiguous allocation area. (These fields should be // physicall near to one another.) - virtual HeapWord** top_addr() const { return NULL; } + virtual HeapWord*volatile* top_addr() const { return NULL; } virtual HeapWord** end_addr() const { return NULL; } // Thread-local allocation buffers diff --git a/hotspot/src/share/vm/runtime/vmStructs.cpp b/hotspot/src/share/vm/runtime/vmStructs.cpp index 60eb2682a..428e07c75 100644 --- a/hotspot/src/share/vm/runtime/vmStructs.cpp +++ b/hotspot/src/share/vm/runtime/vmStructs.cpp @@ -2918,6 +2918,7 @@ VMStructEntry VMStructs::localHotSpotVMStructs[] = { #if INCLUDE_ALL_GCS VM_STRUCTS_PARALLELGC(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, + GENERATE_NONSTATIC_VM_STRUCT_ENTRY, GENERATE_STATIC_VM_STRUCT_ENTRY) VM_STRUCTS_CMS(GENERATE_NONSTATIC_VM_STRUCT_ENTRY, @@ -3075,6 +3076,7 @@ VMStructs::init() { #if INCLUDE_ALL_GCS VM_STRUCTS_PARALLELGC(CHECK_NONSTATIC_VM_STRUCT_ENTRY, + CHECK_VOLATILE_NONSTATIC_VM_STRUCT_ENTRY, CHECK_STATIC_VM_STRUCT_ENTRY); VM_STRUCTS_CMS(CHECK_NONSTATIC_VM_STRUCT_ENTRY, @@ -3191,6 +3193,7 @@ VMStructs::init() { CHECK_NO_OP)); #if INCLUDE_ALL_GCS debug_only(VM_STRUCTS_PARALLELGC(ENSURE_FIELD_TYPE_PRESENT, + ENSURE_FIELD_TYPE_PRESENT, ENSURE_FIELD_TYPE_PRESENT)); debug_only(VM_STRUCTS_CMS(ENSURE_FIELD_TYPE_PRESENT, ENSURE_FIELD_TYPE_PRESENT, -- 2.19.0
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2