Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

8252853: AArch64: gc/shenandoah/TestVerifyJCStress.java fails intermittently with C1 #68

Closed
wants to merge 1 commit into from

Conversation

@nick-arm
Copy link
Member

@nick-arm nick-arm commented Sep 8, 2020

This test fails occasionally when run with -XX:TieredStopAtLevel=1 on
AArch64 with the error

  java.util.concurrent.ExecutionException: java.lang.NullPointerException: Cannot assign field "prev" because "node" is null
      at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
      at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
      at TestVerifyJCStress.main(TestVerifyJCStress.java:109)
      [..snip..]
  Caused by: java.lang.NullPointerException: Cannot assign field "prev" because "node" is null
      at java.base/java.util.concurrent.locks.StampedLock.acquireWrite(StampedLock.java:1221)
      at java.base/java.util.concurrent.locks.StampedLock.writeLockInterruptibly(StampedLock.java:536)
      at TestVerifyJCStress$Test.WLI_Us(TestVerifyJCStress.java:133)

The particular configuration that fails is -XX:ShenandoahGCMode=iu. In
this mode the Shenandoah C1 CAS implementation calls into
ShenandoahBarrierSetAssembler::storeval_barrier() which performs a VM
leaf call in the slow path (via satb_write_barrier_pre()) but only saves
R0-R4 and V0 (for the interpreter, I guess). Instead it needs to
preserve all the caller saved registers as some of these might hold live
values over the CAS in the C1 generated code.

Tested jtreg hotspot_all_no_apps, jdk_core, plus jcstress with -jvmArgs
'-XX:+UseShenandoahGC -XX:ShenandoahGCMode=iu -XX:TieredStopAtLevel=1'
which would also fail in the same way.


Progress

  • Change must not contain extraneous whitespace
  • Commit message must refer to an issue
  • Change must be properly reviewed

Issue

  • JDK-8252853: AArch64: gc/shenandoah/TestVerifyJCStress.java fails intermittently with C1

Reviewers

Download

$ git fetch https://git.openjdk.java.net/jdk pull/68/head:pull/68
$ git checkout pull/68

…ttently with C1

This test fails occasionally when run with -XX:TieredStopAtLevel=1 on
AArch64 with the error

  java.util.concurrent.ExecutionException: java.lang.NullPointerException: Cannot assign field "prev" because "node" is null
      at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
      at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
      at TestVerifyJCStress.main(TestVerifyJCStress.java:109)
      [..snip..]
  Caused by: java.lang.NullPointerException: Cannot assign field "prev" because "node" is null
      at java.base/java.util.concurrent.locks.StampedLock.acquireWrite(StampedLock.java:1221)
      at java.base/java.util.concurrent.locks.StampedLock.writeLockInterruptibly(StampedLock.java:536)
      at TestVerifyJCStress$Test.WLI_Us(TestVerifyJCStress.java:133)

The particular configuration that fails is -XX:ShenandoahGCMode=iu. In
this mode the Shenandoah C1 CAS implementation calls into
ShenandoahBarrierSetAssembler::storeval_barrier() which performs a VM
leaf call in the slow path (via satb_write_barrier_pre()) but only saves
R0-R4 and V0 (for the interpreter, I guess). Instead it needs to
preserve all the caller saved registers as some of these might hold live
values over the CAS in the C1 generated code.

Tested jtreg hotspot_all_no_apps, jdk_core, plus jcstress with -jvmArgs
'-XX:+UseShenandoahGC -XX:ShenandoahGCMode=iu -XX:TieredStopAtLevel=1'
which would also fail in the same way.
@bridgekeeper
Copy link

@bridgekeeper bridgekeeper bot commented Sep 8, 2020

👋 Welcome back ngasson! A progress list of the required criteria for merging this PR into master will be added to the body of your pull request. There are additional pull request commands available for use with this pull request.

@openjdk openjdk bot added the rfr label Sep 8, 2020
@openjdk
Copy link

@openjdk openjdk bot commented Sep 8, 2020

@nick-arm The following labels will be automatically applied to this pull request: hotspot shenandoah.

When this pull request is ready to be reviewed, an RFR email will be sent to the corresponding mailing lists. If you would like to change these labels, use the /label (add|remove) "label" command.

@nick-arm
Copy link
Member Author

@nick-arm nick-arm commented Sep 8, 2020

/label add hotspot-gc

@openjdk openjdk bot added the hotspot-gc label Sep 8, 2020
@openjdk
Copy link

@openjdk openjdk bot commented Sep 8, 2020

@nick-arm
The hotspot-gc label was successfully added.

@nick-arm
Copy link
Member Author

@nick-arm nick-arm commented Sep 8, 2020

/label remove hotspot

@openjdk openjdk bot removed the hotspot label Sep 8, 2020
@openjdk
Copy link

@openjdk openjdk bot commented Sep 8, 2020

@nick-arm
The hotspot label was successfully removed.

@mlbridge
Copy link

@mlbridge mlbridge bot commented Sep 8, 2020

Webrevs

@openjdk
Copy link

@openjdk openjdk bot commented Sep 8, 2020

@nick-arm This change now passes all automated pre-integration checks. In addition to the automated checks, the change must also fulfill all project specific requirements

After integration, the commit message will be:

8252853: AArch64: gc/shenandoah/TestVerifyJCStress.java fails intermittently with C1

Reviewed-by: shade
  • If you would like to add a summary, use the /summary command.
  • To credit additional contributors, use the /contributor command.
  • To add additional solved issues, use the /issue command.

Since the source branch of this PR was last updated there has been 1 commit pushed to the master branch:

  • 73ba3ae: 8252500: ZGC on aarch64: Unable to allocate heap for certain Linux kernel configurations

As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid automatic rebasing, please merge master into your branch, and then specify the current head hash when integrating, like this: /integrate 73ba3ae1f5f5bfb0cc5cf9733ffa5c4a44508777.

➡️ To integrate this PR with the above commit message to the master branch, type /integrate in a new comment.

@openjdk openjdk bot added the ready label Sep 8, 2020
@nick-arm
Copy link
Member Author

@nick-arm nick-arm commented Sep 8, 2020

/integrate

@openjdk openjdk bot closed this Sep 8, 2020
@openjdk openjdk bot added integrated and removed ready rfr labels Sep 8, 2020
@openjdk
Copy link

@openjdk openjdk bot commented Sep 8, 2020

@nick-arm Since your change was applied there has been 1 commit pushed to the master branch:

  • 73ba3ae: 8252500: ZGC on aarch64: Unable to allocate heap for certain Linux kernel configurations

Your commit was automatically rebased without conflicts.

Pushed as commit 4fb1980.

💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
2 participants