# HG changeset patch # User dcubed # Date 1555006470 14400 # Node ID c201ca660afdc294790cde49eb5c71b79ecfd757 # Parent 5b1ad4cbe59e0d24e44b934696a0b5d416aaef4b 8222034: Thread-SMR functions should be updated to remove work around Reviewed-by: mdoerr, eosterlund diff -r 5b1ad4cbe59e -r c201ca660afd src/hotspot/share/runtime/threadSMR.cpp --- a/src/hotspot/share/runtime/threadSMR.cpp Thu Apr 11 03:05:11 2019 -0800 +++ b/src/hotspot/share/runtime/threadSMR.cpp Thu Apr 11 14:14:30 2019 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2019, 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 @@ -590,12 +590,9 @@ } void ThreadsList::dec_nested_handle_cnt() { - // The decrement needs to be MO_ACQ_REL. At the moment, the Atomic::dec - // backend on PPC does not yet conform to these requirements. Therefore - // the decrement is simulated with an Atomic::sub(1, &addr). - // Without this MO_ACQ_REL Atomic::dec simulation, the nested SMR mechanism - // is not generally safe to use. - Atomic::sub(1, &_nested_handle_cnt); + // The decrement only needs to be MO_ACQ_REL since the reference + // counter is volatile (and the hazard ptr is already NULL). + Atomic::dec(&_nested_handle_cnt); } int ThreadsList::find_index_of_JavaThread(JavaThread *target) { @@ -626,19 +623,9 @@ } void ThreadsList::inc_nested_handle_cnt() { - // The increment needs to be MO_SEQ_CST. At the moment, the Atomic::inc - // backend on PPC does not yet conform to these requirements. Therefore - // the increment is simulated with a load phi; cas phi + 1; loop. - // Without this MO_SEQ_CST Atomic::inc simulation, the nested SMR mechanism - // is not generally safe to use. - intx sample = OrderAccess::load_acquire(&_nested_handle_cnt); - for (;;) { - if (Atomic::cmpxchg(sample + 1, &_nested_handle_cnt, sample) == sample) { - return; - } else { - sample = OrderAccess::load_acquire(&_nested_handle_cnt); - } - } + // The increment needs to be MO_SEQ_CST so that the reference counter + // update is seen before the subsequent hazard ptr update. + Atomic::inc(&_nested_handle_cnt); } bool ThreadsList::includes(const JavaThread * const p) const {