# HG changeset patch # User jmasa # Date 1447793229 28800 # Node ID bedd8f8eb253603c9a172d86099abee2c4e55bdb # Parent 7f575c73e45eb0990d393c545c4828edfd39e239 8133023: ParallelGCThreads is not calculated correctly Reviewed-by: tschatzl, sangheki, kbarrett diff --git a/src/cpu/sparc/vm/vm_version_sparc.cpp b/src/cpu/sparc/vm/vm_version_sparc.cpp --- a/src/cpu/sparc/vm/vm_version_sparc.cpp +++ b/src/cpu/sparc/vm/vm_version_sparc.cpp @@ -35,7 +35,6 @@ unsigned int VM_Version::_L2_data_cache_line_size = 0; void VM_Version::initialize() { - _features = determine_features(); PrefetchCopyIntervalInBytes = prefetch_copy_interval_in_bytes(); PrefetchScanIntervalInBytes = prefetch_scan_interval_in_bytes(); PrefetchFieldsAhead = prefetch_fields_ahead(); @@ -455,3 +454,10 @@ } return result; } + +void VM_Version::early_initialize() { + + os::Solaris::initialize_features_info(); + + _features = determine_features(); +} diff --git a/src/cpu/sparc/vm/vm_version_sparc.hpp b/src/cpu/sparc/vm/vm_version_sparc.hpp --- a/src/cpu/sparc/vm/vm_version_sparc.hpp +++ b/src/cpu/sparc/vm/vm_version_sparc.hpp @@ -124,6 +124,7 @@ static int maximum_niagara1_processor_count() { return 32; } public: + static void early_initialize(); // Initialization static void initialize(); @@ -151,7 +152,7 @@ // Returns true if the platform is in the niagara line (T series) // and newer than the niagara1. - static bool is_niagara_plus() { return is_T_family(_features) && !is_T1_model(_features); } + static bool is_niagara_plus() { assert(_features != VM_Version::unknown_m, "System initialization is not complete."); return is_T_family(_features) && !is_T1_model(_features); } static bool is_M_series() { return is_M_family(_features); } static bool is_T4() { return is_T_family(_features) && has_cbcond(); } diff --git a/src/os/solaris/vm/os_solaris.cpp b/src/os/solaris/vm/os_solaris.cpp --- a/src/os/solaris/vm/os_solaris.cpp +++ b/src/os/solaris/vm/os_solaris.cpp @@ -288,6 +288,16 @@ (julong)sysconf(_SC_PAGESIZE); } + +void os::Solaris::initialize_features_info() { + + initialize_system_info(); + + // Initialize misc. symbols as soon as possible, so we can use them + // if we need them. + misc_sym_init(); +} + int os::active_processor_count() { int online_cpus = sysconf(_SC_NPROCESSORS_ONLN); pid_t pid = getpid(); @@ -4364,12 +4374,6 @@ } init_page_sizes((size_t) page_size); - Solaris::initialize_system_info(); - - // Initialize misc. symbols as soon as possible, so we can use them - // if we need them. - Solaris::misc_sym_init(); - int fd = ::open("/dev/zero", O_RDWR); if (fd < 0) { fatal("os::init: cannot open /dev/zero (%s)", strerror(errno)); diff --git a/src/os/solaris/vm/os_solaris.hpp b/src/os/solaris/vm/os_solaris.hpp --- a/src/os/solaris/vm/os_solaris.hpp +++ b/src/os/solaris/vm/os_solaris.hpp @@ -189,6 +189,7 @@ static void libthread_init(); static void synchronization_init(); static bool liblgrp_init(); + static void initialize_features_info(); // Load miscellaneous symbols. static void misc_sym_init(); // This boolean allows users to forward their own non-matching signals