RFR: 8266557: assert(SafepointMechanism::local_poll_armed(_handshakee)) failed: Must be [v6]
Robbin Ehn
rehn at openjdk.java.net
Mon Jun 7 09:07:09 UTC 2021
> Please consider this change-set which address the issue on hand.
>
> I identified two problems:
>
> - is_locked() uses the _owner field which is unordered (no storestore|storeload) on store-side.
> Fixed by leaving the handshakee being processed in queue until completed.
> And remove looping, since if ever the queue is empty the handshakee may processed.
> If ever want to loop again, we must make sure queue is not empty before removing the processed handshake.
> But there is, at this moment, no performance benefit to that, so I chosse the simple, easy to reason about version. (some crazy stress test can see a difference)
>
> Note that I'll do a follow-up and make is_locked() ifdef ASSERT only.
>
> - have_non_self_executable_operation() only provide correct acquire if first in queue matched, if second item matched it could be re-orderd with reading the poll state.
> Fixed by adding a loadload.
>
> I could at first reproduce by checking _active_handshaker in update_poll (~1/50) and an increase in the test time by ten.
> (real reprod ~1/400 with increased test time)
> If we are updating the poll there should not be an active handshaker.
> The above fixed the issue.
> But after a rebase when I was trying to pin point the issue I could no longer reproduce even without any changes.
>
> Added Atomic store/load to _active_handshaker since it may be concurrently loaded (it may only be used to ask if current thread is active handshaker).
>
> Passes stressing relevant test on aarch64 and t1-7.
>
> Thanks, Robbin
Robbin Ehn 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 ten additional commits since the last revision:
- Merge branch 'master' into handshakee
- Merge branch 'master' into handshakee
- Added comment
- Small review updates
- Merge branch 'master' into handshakee
- Merge branch 'master' into handshakee
- Small update
- Merge branch 'master' into handshakee
- Fix
-------------
Changes:
- all: https://git.openjdk.java.net/jdk/pull/3973/files
- new: https://git.openjdk.java.net/jdk/pull/3973/files/b0b22231..7277d7a6
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=jdk&pr=3973&range=05
- incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=3973&range=04-05
Stats: 11266 lines in 295 files changed: 8827 ins; 1635 del; 804 mod
Patch: https://git.openjdk.java.net/jdk/pull/3973.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/3973/head:pull/3973
PR: https://git.openjdk.java.net/jdk/pull/3973
More information about the hotspot-runtime-dev
mailing list