RFR: 8369469: Rdtsc: Remove potential races in Rdtsc::initialize [v3]
David Holmes
dholmes at openjdk.org
Mon Oct 13 10:34:08 UTC 2025
On Mon, 13 Oct 2025 08:11:44 GMT, Axel Boldt-Christmas <aboldtch at openjdk.org> wrote:
>> The whole chain of Rdtsc uses static block scope variables which are guaranteed to be constructed only once (implements some sort of double checked locking).
>> However the current implementation does not do this correctly in all places, where it does:
>>
>> static bool initialized = false;
>> if (!initialized) {
>> ...
>> initialized = true;
>> }
>>
>> It should do
>>
>> static bool initialized = initialize_impl(); // Do the logic inside a function call
>>
>> to guarantee that initialize is only called once.
>>
>> We have observed this from some GC threads if we start using Ticks to early.
>>
>> The suggested patch makes `Rdtsc::initialize` private an is only called from the `Rdtsc::enabled` which uses a static bock scoped variable to ensure the call once semantics. The property called from outside is now `Rdtsc::enabled`. Which is more true to what how it is used on all call sites.
>
> Axel Boldt-Christmas has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains four additional commits since the last revision:
>
> - Merge remote-tracking branch 'upstream_jdk/master' into JDK-8369469
> - Fix typo
>
> Co-authored-by: David Holmes <62092539+dholmes-ora at users.noreply.github.com>
> - 8369469: Rdtsc: Remove potential races in Rdtsc::initialize
> - 8369468: Rdtsc: Move getCPUIDBrandString_stub into VM_Version stub area
Marked as reviewed by dholmes (Reviewer).
-------------
PR Review: https://git.openjdk.org/jdk/pull/27712#pullrequestreview-3330911163
More information about the hotspot-dev
mailing list