Skip to content

Commit 3b0b6ad

Browse files
committed
8275226: Shenandoah: Relax memory constraint for worker claiming tasks/ranges
Reviewed-by: shade
1 parent 8d9004b commit 3b0b6ad

File tree

4 files changed

+6
-6
lines changed

4 files changed

+6
-6
lines changed

src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ void ShenandoahParallelCodeHeapIterator::parallel_blobs_do(CodeBlobClosure* f) {
8787
int current = count++;
8888
if ((current & stride_mask) == 0) {
8989
process_block = (current >= _claimed_idx) &&
90-
(Atomic::cmpxchg(&_claimed_idx, current, current + stride) == current);
90+
(Atomic::cmpxchg(&_claimed_idx, current, current + stride, memory_order_relaxed) == current);
9191
}
9292
if (process_block) {
9393
if (cb->is_alive()) {

src/hotspot/share/gc/shenandoah/shenandoahNMethod.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ void ShenandoahNMethodTableSnapshot::parallel_blobs_do(CodeBlobClosure *f) {
493493

494494
size_t max = (size_t)_limit;
495495
while (_claimed < max) {
496-
size_t cur = Atomic::fetch_and_add(&_claimed, stride);
496+
size_t cur = Atomic::fetch_and_add(&_claimed, stride, memory_order_relaxed);
497497
size_t start = cur;
498498
size_t end = MIN2(cur + stride, max);
499499
if (start >= max) break;
@@ -520,7 +520,7 @@ void ShenandoahNMethodTableSnapshot::concurrent_nmethods_do(NMethodClosure* cl)
520520
ShenandoahNMethod** list = _list->list();
521521
size_t max = (size_t)_limit;
522522
while (_claimed < max) {
523-
size_t cur = Atomic::fetch_and_add(&_claimed, stride);
523+
size_t cur = Atomic::fetch_and_add(&_claimed, stride, memory_order_relaxed);
524524
size_t start = cur;
525525
size_t end = MIN2(cur + stride, max);
526526
if (start >= max) break;

src/hotspot/share/gc/shenandoah/shenandoahReferenceProcessor.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -453,14 +453,14 @@ void ShenandoahReferenceProcessor::process_references(ShenandoahRefProcThreadLoc
453453
void ShenandoahReferenceProcessor::work() {
454454
// Process discovered references
455455
uint max_workers = ShenandoahHeap::heap()->max_workers();
456-
uint worker_id = Atomic::add(&_iterate_discovered_list_id, 1U) - 1;
456+
uint worker_id = Atomic::add(&_iterate_discovered_list_id, 1U, memory_order_relaxed) - 1;
457457
while (worker_id < max_workers) {
458458
if (UseCompressedOops) {
459459
process_references<narrowOop>(_ref_proc_thread_locals[worker_id], worker_id);
460460
} else {
461461
process_references<oop>(_ref_proc_thread_locals[worker_id], worker_id);
462462
}
463-
worker_id = Atomic::add(&_iterate_discovered_list_id, 1U) - 1;
463+
worker_id = Atomic::add(&_iterate_discovered_list_id, 1U, memory_order_relaxed) - 1;
464464
}
465465
}
466466

src/hotspot/share/gc/shenandoah/shenandoahTaskqueue.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ T* ParallelClaimableQueueSet<T, F>::claim_next() {
337337
return NULL;
338338
}
339339

340-
jint index = Atomic::add(&_claimed_index, 1);
340+
jint index = Atomic::add(&_claimed_index, 1, memory_order_relaxed);
341341

342342
if (index <= size) {
343343
return GenericTaskQueueSet<T, F>::queue((uint)index - 1);

0 commit comments

Comments
 (0)