From 9fcffe4e88fbc11faef56ed26fee33f09c56e4f6 Mon Sep 17 00:00:00 2001 From: Jiri Date: Aug 02 2016 09:17:09 +0000 Subject: Mon Aug 01 2016 Andrew Hughes - 1:1.8.0.101-3.b14 - Replace patch for S8162384 with upstream version. Document correctly along with SystemTap RH1204159 patch. - Resolves: rhbz#1358661 - Replace patch for S8157306 with upstream version, documented & applied on all archs with conditional in patch - Resolves: rhbz#1360863 --- diff --git a/8157306-pr3121-rh1360863.patch b/8157306-pr3121-rh1360863.patch new file mode 100644 index 0000000..8cb69ae --- /dev/null +++ b/8157306-pr3121-rh1360863.patch @@ -0,0 +1,29 @@ +# HG changeset patch +# User aph +# Date 1470065634 -3600 +# Mon Aug 01 16:33:54 2016 +0100 +# Node ID ee9bffb3bd390b2ad805c7b59d7d2ab8a68a4367 +# Parent ab3e0bde3c15bbba60de4decabcd70ffef657448 +8157306, PR3121: Random infrequent null pointer exceptions in javac +Reviewed-by: kvn + +diff -r ab3e0bde3c15 -r ee9bffb3bd39 src/share/vm/opto/lcm.cpp +--- openjdk/hotspot/src/share/vm/opto/lcm.cpp Tue Jul 26 04:42:03 2016 +0100 ++++ openjdk/hotspot/src/share/vm/opto/lcm.cpp Mon Aug 01 16:33:54 2016 +0100 +@@ -1090,11 +1090,14 @@ + Block *sb = block->_succs[i]; + // Clone the entire area; ignoring the edge fixup for now. + for( uint j = end; j > beg; j-- ) { +- // It is safe here to clone a node with anti_dependence +- // since clones dominate on each path. + Node *clone = block->get_node(j-1)->clone(); + sb->insert_node(clone, 1); + map_node_to_block(clone, sb); ++#ifdef AARCH64 ++ if (clone->needs_anti_dependence_check()) { ++ insert_anti_dependences(sb, clone); ++ } ++#endif + } + } + diff --git a/8162384-pr3122-rh1358661.patch b/8162384-pr3122-rh1358661.patch new file mode 100644 index 0000000..ff38413 --- /dev/null +++ b/8162384-pr3122-rh1358661.patch @@ -0,0 +1,54 @@ +# HG changeset patch +# User roland +# Date 1469615613 -7200 +# Wed Jul 27 12:33:33 2016 +0200 +# Node ID fd29eff8b797daa41a68394ced7fe80c9e8c96e9 +# Parent ee9bffb3bd390b2ad805c7b59d7d2ab8a68a4367 +8162384, PR3122: Performance regression: bimorphic inlining may be bypassed by type speculation +Summary: when speculation fails at a call fallback to profile data at the call site +Reviewed-by: kvn + +diff -r ee9bffb3bd39 -r fd29eff8b797 src/share/vm/opto/doCall.cpp +--- openjdk/hotspot/src/share/vm/opto/doCall.cpp Mon Aug 01 16:33:54 2016 +0100 ++++ openjdk/hotspot/src/share/vm/opto/doCall.cpp Wed Jul 27 12:33:33 2016 +0200 +@@ -205,16 +205,22 @@ + + int morphism = profile.morphism(); + if (speculative_receiver_type != NULL) { +- // We have a speculative type, we should be able to resolve +- // the call. We do that before looking at the profiling at +- // this invoke because it may lead to bimorphic inlining which +- // a speculative type should help us avoid. +- receiver_method = callee->resolve_invoke(jvms->method()->holder(), +- speculative_receiver_type); +- if (receiver_method == NULL) { ++ if (!too_many_traps(caller, bci, Deoptimization::Reason_speculate_class_check)) { ++ // We have a speculative type, we should be able to resolve ++ // the call. We do that before looking at the profiling at ++ // this invoke because it may lead to bimorphic inlining which ++ // a speculative type should help us avoid. ++ receiver_method = callee->resolve_invoke(jvms->method()->holder(), ++ speculative_receiver_type); ++ if (receiver_method == NULL) { ++ speculative_receiver_type = NULL; ++ } else { ++ morphism = 1; ++ } ++ } else { ++ // speculation failed before. Use profiling at the call ++ // (could allow bimorphic inlining for instance). + speculative_receiver_type = NULL; +- } else { +- morphism = 1; + } + } + if (receiver_method == NULL && +@@ -252,7 +258,7 @@ + Deoptimization::Reason_bimorphic : + (speculative_receiver_type == NULL ? Deoptimization::Reason_class_check : Deoptimization::Reason_speculate_class_check); + if ((morphism == 1 || (morphism == 2 && next_hit_cg != NULL)) && +- !too_many_traps(jvms->method(), jvms->bci(), reason) ++ !too_many_traps(caller, bci, reason) + ) { + // Generate uncommon trap for class check failure path + // in case of monomorphic or bimorphic virtual call site. diff --git a/hotspot-1358661.patch b/hotspot-1358661.patch deleted file mode 100644 index fd986c9..0000000 --- a/hotspot-1358661.patch +++ /dev/null @@ -1,43 +0,0 @@ ---- openjdk/hotspot/src/share/vm/opto/doCall.cpp 2016-07-22 11:32:42.953343258 +0200 -+++ openjdk/hotspot/src/share/vm/opto/doCall.cpp 2016-07-22 11:32:39.209369543 +0200 -@@ -209,16 +209,22 @@ - - int morphism = profile.morphism(); - if (speculative_receiver_type != NULL) { -- // We have a speculative type, we should be able to resolve -- // the call. We do that before looking at the profiling at -- // this invoke because it may lead to bimorphic inlining which -- // a speculative type should help us avoid. -- receiver_method = callee->resolve_invoke(jvms->method()->holder(), -- speculative_receiver_type); -- if (receiver_method == NULL) { -- speculative_receiver_type = NULL; -+ if (!too_many_traps(caller, bci, Deoptimization::Reason_speculate_class_check)) { -+ // We have a speculative type, we should be able to resolve -+ // the call. We do that before looking at the profiling at -+ // this invoke because it may lead to bimorphic inlining which -+ // a speculative type should help us avoid. -+ receiver_method = callee->resolve_invoke(jvms->method()->holder(), -+ speculative_receiver_type); -+ if (receiver_method == NULL) { -+ speculative_receiver_type = NULL; -+ } else { -+ morphism = 1; -+ } - } else { -- morphism = 1; -+ // speculation failed before. Use profiling at the call -+ // (could allow bimorphic inlining for instance). -+ speculative_receiver_type = NULL; - } - } - if (receiver_method == NULL && -@@ -255,7 +261,7 @@ - Deoptimization::Reason_bimorphic : - (speculative_receiver_type == NULL ? Deoptimization::Reason_class_check : Deoptimization::Reason_speculate_class_check); - if ((morphism == 1 || (morphism == 2 && next_hit_cg != NULL)) && -- !too_many_traps(jvms->method(), jvms->bci(), reason) -+ !too_many_traps(caller, bci, reason) - ) { - // Generate uncommon trap for class check failure path - // in case of monomorphic or bimorphic virtual call site. diff --git a/hotspot-8157306.changeset b/hotspot-8157306.changeset deleted file mode 100644 index 95f30eb..0000000 --- a/hotspot-8157306.changeset +++ /dev/null @@ -1,55 +0,0 @@ -# HG changeset patch -# User aph -# Date 1466704739 0 -# Thu Jun 23 17:58:59 2016 +0000 -# Node ID 89b3911c92aef18f2fd24ab4a31fbb47954462fa -# Parent 9febe12cbce4c6aa428a78f6a78906909e2954a4 -8157306: Random infrequent null pointer exceptions in javac -Reviewed-by: kvn - -diff --git openjdk/hotspot/src/share/vm/opto/block.cpp b/src/share/vm/opto/block.cpp ---- openjdk/hotspot/src/share/vm/opto/block.cpp -+++ openjdk/hotspot/src/share/vm/opto/block.cpp -@@ -1212,6 +1212,9 @@ - if (j >= 1 && n->is_Mach() && n->as_Mach()->ideal_Opcode() == Op_CreateEx) { - assert(j == 1 || block->get_node(j-1)->is_Phi(), "CreateEx must be first instruction in block"); - } -+ if (n->needs_anti_dependence_check()) { -+ verify_anti_dependences(block, n); -+ } - for (uint k = 0; k < n->req(); k++) { - Node *def = n->in(k); - if (def && def != n) { -diff --git a/src/share/vm/opto/block.hpp b/src/share/vm/opto/block.hpp ---- openjdk/hotspot/src/share/vm/opto/block.hpp -+++ openjdk/hotspot/src/share/vm/opto/block.hpp -@@ -481,9 +481,9 @@ - MachNode* _goto; - - Block* insert_anti_dependences(Block* LCA, Node* load, bool verify = false); -- void verify_anti_dependences(Block* LCA, Node* load) { -+ void verify_anti_dependences(Block* LCA, Node* load) const { - assert(LCA == get_block_for_node(load), "should already be scheduled"); -- insert_anti_dependences(LCA, load, true); -+ const_cast(this)->insert_anti_dependences(LCA, load, true); - } - - bool move_to_next(Block* bx, uint b_index); -diff --git a/src/share/vm/opto/lcm.cpp b/src/share/vm/opto/lcm.cpp ---- openjdk/hotspot/src/share/vm/opto/lcm.cpp -+++ openjdk/hotspot/src/share/vm/opto/lcm.cpp -@@ -1293,11 +1293,12 @@ - Block *sb = block->_succs[i]; - // Clone the entire area; ignoring the edge fixup for now. - for( uint j = end; j > beg; j-- ) { -- // It is safe here to clone a node with anti_dependence -- // since clones dominate on each path. - Node *clone = block->get_node(j-1)->clone(); - sb->insert_node(clone, 1); - map_node_to_block(clone, sb); -+ if (clone->needs_anti_dependence_check()) { -+ insert_anti_dependences(sb, clone); -+ } - } - } - diff --git a/java-1.8.0-openjdk.spec b/java-1.8.0-openjdk.spec index c53ddfa..3922ab7 100644 --- a/java-1.8.0-openjdk.spec +++ b/java-1.8.0-openjdk.spec @@ -785,7 +785,7 @@ Obsoletes: java-1.7.0-openjdk-accessibility%1 Name: java-%{javaver}-%{origin} Version: %{javaver}.%{updatever} -Release: 2.%{buildver}%{?dist} +Release: 3.%{buildver}%{?dist} # java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons, # and this change was brought into RHEL-4. java-1.5.0-ibm packages # also included the epoch in their virtual provides. This created a @@ -915,6 +915,10 @@ Patch524: 8158260-pr2991-rh1341258.patch Patch400: 8154313.patch # S6260348, PR3066: GTK+ L&F JTextComponent not respecting desktop caret blink rate Patch526: 6260348-pr3066.patch +# S8157306, PR3121, RH1360863: Random infrequent null pointer exceptions in javac +Patch531: 8157306-pr3121-rh1360863.patch +# S8162384, PR3122, RH1358661: Performance regression: bimorphic inlining may be bypassed by type speculation +Patch532: 8162384-pr3122-rh1358661.patch # Patches upstream and appearing in 8u102 # S8148752, PR2943, RH1330188: Compiled StringBuilder code throws StringIndexOutOfBoundsException @@ -937,8 +941,6 @@ Patch606: 8154210.patch Patch201: system-libjpeg.patch # Local fixes -Patch531: hotspot-8157306.changeset -Patch532: hotspot-1358661.patch # PR1834, RH1022017: Reduce curves reported by SSL to those in NSS Patch525: pr1834-rh1022017.patch # Temporary fix for typo in CORBA security patch @@ -946,6 +948,7 @@ Patch529: corba_typo_fix.patch # Non-OpenJDK fixes Patch300: jstack-pr1845.patch +# PR3090, RH1204159: SystemTap is heavily confused by multiple JDKs Patch301: bz1204159_java8.patch BuildRequires: autoconf @@ -1279,9 +1282,7 @@ sh %{SOURCE12} %patch527 %patch528 %patch529 -%ifarch %{aarch64} %patch531 -%endif %patch532 # Extract systemtap tapsets @@ -1872,6 +1873,12 @@ require "copy_jdk_configs.lua" %endif %changelog +* Mon Aug 01 2016 Andrew Hughes - 1:1.8.0.101-3.b14 +- Replace patch for S8162384 with upstream version. Document correctly along with SystemTap RH1204159 patch. +- Resolves: rhbz#1358661 +- Replace patch for S8157306 with upstream version, documented & applied on all archs with conditional in patch +- Resolves: rhbz#1360863 + * Mon Jul 25 2016 jvanek - 1:1.8.0.101-2.b14 - added patch532 hotspot-1358661.patch - to fix performance of bimorphic inlining may be bypassed by type speculation - added patch301 bz1204159_java8.patch - to fix systemtap on multiple jdks