8133023: ParallelGCThreads is not calculated correctly
authorjmasa
Tue, 24 Nov 2015 15:56:40 -0800
changeset 35043 30543d2a0a20
parent 35042 46984d6a0998
child 35044 b4013c3f6807
child 35053 cd0fc9dee122
8133023: ParallelGCThreads is not calculated correctly Reviewed-by: kbarrett, tschatzl, sangheki, dholmes
hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp
hotspot/src/cpu/sparc/vm/vm_version_sparc.hpp
hotspot/src/share/vm/runtime/os.cpp
hotspot/src/share/vm/runtime/vm_version.hpp
--- a/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp	Wed Dec 09 22:27:37 2015 +0000
+++ b/hotspot/src/cpu/sparc/vm/vm_version_sparc.cpp	Tue Nov 24 15:56:40 2015 -0800
@@ -35,7 +35,10 @@
 unsigned int VM_Version::_L2_data_cache_line_size = 0;
 
 void VM_Version::initialize() {
-  _features = determine_features();
+
+  assert(_features != VM_Version::unknown_m, "System pre-initialization is not complete.");
+  guarantee(VM_Version::has_v9(), "only SPARC v9 is supported");
+
   PrefetchCopyIntervalInBytes = prefetch_copy_interval_in_bytes();
   PrefetchScanIntervalInBytes = prefetch_scan_interval_in_bytes();
   PrefetchFieldsAhead         = prefetch_fields_ahead();
@@ -60,8 +63,6 @@
     FLAG_SET_DEFAULT(AllocatePrefetchStyle, 1);
   }
 
-  guarantee(VM_Version::has_v9(), "only SPARC v9 is supported");
-
   UseSSE = 0; // Only on x86 and x64
 
   _supports_cx8 = has_v9();
--- a/hotspot/src/cpu/sparc/vm/vm_version_sparc.hpp	Wed Dec 09 22:27:37 2015 +0000
+++ b/hotspot/src/cpu/sparc/vm/vm_version_sparc.hpp	Tue Nov 24 15:56:40 2015 -0800
@@ -127,6 +127,8 @@
   // Initialization
   static void initialize();
 
+  static void init_before_ergo()        { _features = determine_features(); }
+
   // Instruction support
   static bool has_v8()                  { return (_features & v8_instructions_m) != 0; }
   static bool has_v9()                  { return (_features & v9_instructions_m) != 0; }
--- a/hotspot/src/share/vm/runtime/os.cpp	Wed Dec 09 22:27:37 2015 +0000
+++ b/hotspot/src/share/vm/runtime/os.cpp	Tue Nov 24 15:56:40 2015 -0800
@@ -315,6 +315,10 @@
   // We need to initialize large page support here because ergonomics takes some
   // decisions depending on large page support and the calculated large page size.
   large_page_init();
+
+  // VM version initialization identifies some characteristics of the
+  // the platform that are used during ergonomic decisions.
+  VM_Version::init_before_ergo();
 }
 
 void os::signal_init() {
--- a/hotspot/src/share/vm/runtime/vm_version.hpp	Wed Dec 09 22:27:37 2015 +0000
+++ b/hotspot/src/share/vm/runtime/vm_version.hpp	Tue Nov 24 15:56:40 2015 -0800
@@ -56,6 +56,12 @@
                                                   unsigned int dem,
                                                   unsigned int switch_pt);
  public:
+  // Called as part of the runtime services initialization which is
+  // called from the management module initialization (via init_globals())
+  // after argument parsing and attaching of the main thread has
+  // occurred.  Examines a variety of the hardware capabilities of
+  // the platform to determine which features can be used to execute the
+  // program.
   static void initialize();
 
   // This allows for early initialization of VM_Version information
@@ -65,6 +71,11 @@
   // need to specialize this define VM_Version::early_initialize().
   static void early_initialize() { }
 
+  // Called to initialize VM variables needing initialization
+  // after command line parsing. Platforms that need to specialize
+  // this should define VM_Version::init_before_ergo().
+  static void init_before_ergo() {}
+
   // Name
   static const char* vm_name();
   // Vendor