Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
8242273: Shenandoah: accept either SATB or IU barriers, but not both
Reviewed-by: rkennke
- Loading branch information
Showing
with
115 additions
and 29 deletions.
- +0 −6 src/hotspot/share/gc/shenandoah/heuristics/shenandoahAggressiveHeuristics.cpp
- +0 −6 src/hotspot/share/gc/shenandoah/heuristics/shenandoahCompactHeuristics.cpp
- +0 −6 src/hotspot/share/gc/shenandoah/heuristics/shenandoahStaticHeuristics.cpp
- +0 −8 src/hotspot/share/gc/shenandoah/shenandoahHeuristics.hpp
- +7 −2 src/hotspot/share/gc/shenandoah/shenandoahIUMode.cpp
- +16 −0 src/hotspot/share/gc/shenandoah/shenandoahMode.hpp
- +1 −0 src/hotspot/share/gc/shenandoah/shenandoahNormalMode.cpp
- +2 −1 test/hotspot/jtreg/gc/shenandoah/options/TestWrongBarrierDisable.java
- +89 −0 test/hotspot/jtreg/gc/shenandoah/options/TestWrongBarrierEnable.java
@@ -0,0 +1,89 @@ | ||
/* | ||
* Copyright (c) 2020, Red Hat, Inc. 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 | ||
* under the terms of the GNU General Public License version 2 only, as | ||
* published by the Free Software Foundation. | ||
* | ||
* This code is distributed in the hope that it will be useful, but WITHOUT | ||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
* version 2 for more details (a copy is included in the LICENSE file that | ||
* accompanied this code). | ||
* | ||
* You should have received a copy of the GNU General Public License version | ||
* 2 along with this work; if not, write to the Free Software Foundation, | ||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | ||
* | ||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | ||
* or visit www.oracle.com if you need additional information or have any | ||
* questions. | ||
* | ||
*/ | ||
|
||
/* @test TestWrongBarrierEnable | ||
* @summary Test that disabling wrong barriers fails early | ||
* @key gc | ||
* @requires vm.gc.Shenandoah & !vm.graal.enabled | ||
* @library /test/lib | ||
* @run main/othervm TestWrongBarrierEnable | ||
*/ | ||
|
||
import java.util.*; | ||
|
||
import jdk.test.lib.process.ProcessTools; | ||
import jdk.test.lib.process.OutputAnalyzer; | ||
|
||
public class TestWrongBarrierEnable { | ||
|
||
public static void main(String[] args) throws Exception { | ||
String[] concurrent = { | ||
"ShenandoahStoreValEnqueueBarrier", | ||
}; | ||
String[] iu = { | ||
"ShenandoahSATBBarrier", | ||
}; | ||
|
||
shouldFailAll("-XX:ShenandoahGCHeuristics=adaptive", concurrent); | ||
shouldFailAll("-XX:ShenandoahGCHeuristics=static", concurrent); | ||
shouldFailAll("-XX:ShenandoahGCHeuristics=compact", concurrent); | ||
shouldFailAll("-XX:ShenandoahGCHeuristics=aggressive", concurrent); | ||
shouldFailAll("-XX:ShenandoahGCMode=iu", iu); | ||
shouldPassAll("-XX:ShenandoahGCMode=passive", concurrent); | ||
shouldPassAll("-XX:ShenandoahGCMode=passive", iu); | ||
} | ||
|
||
private static void shouldFailAll(String h, String[] barriers) throws Exception { | ||
for (String b : barriers) { | ||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( | ||
"-XX:+UnlockDiagnosticVMOptions", | ||
"-XX:+UnlockExperimentalVMOptions", | ||
"-XX:+UseShenandoahGC", | ||
h, | ||
"-XX:+" + b, | ||
"-version" | ||
); | ||
OutputAnalyzer output = new OutputAnalyzer(pb.start()); | ||
output.shouldNotHaveExitValue(0); | ||
output.shouldContain("GC mode needs "); | ||
output.shouldContain("to work correctly"); | ||
} | ||
} | ||
|
||
private static void shouldPassAll(String h, String[] barriers) throws Exception { | ||
for (String b : barriers) { | ||
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( | ||
"-XX:+UnlockDiagnosticVMOptions", | ||
"-XX:+UnlockExperimentalVMOptions", | ||
"-XX:+UseShenandoahGC", | ||
h, | ||
"-XX:+" + b, | ||
"-version" | ||
); | ||
OutputAnalyzer output = new OutputAnalyzer(pb.start()); | ||
output.shouldHaveExitValue(0); | ||
} | ||
} | ||
|
||
} |