Mercurial > hg > icedtea8-forest > hotspot
changeset 9764:41e0713bcca2 jdk8u131-b31
8165482: java in ldoms, with cpu-arch=generic has problems
Reviewed-by: dholmes, alanbur
author | kevinw |
---|---|
date | Fri, 31 Mar 2017 07:46:19 -0700 |
parents | 0516a915fb39 |
children | 47ea82f54bdd |
files | src/cpu/sparc/vm/vm_version_sparc.cpp src/os_cpu/solaris_sparc/vm/vm_version_solaris_sparc.cpp |
diffstat | 2 files changed, 38 insertions(+), 33 deletions(-) [+] |
line wrap: on
line diff
--- a/src/cpu/sparc/vm/vm_version_sparc.cpp Fri Mar 17 07:52:54 2017 -0700 +++ b/src/cpu/sparc/vm/vm_version_sparc.cpp Fri Mar 31 07:46:19 2017 -0700 @@ -236,7 +236,7 @@ assert((OptoLoopAlignment % relocInfo::addr_unit()) == 0, "alignment is not a multiple of NOP size"); char buf[512]; - jio_snprintf(buf, sizeof(buf), "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", + jio_snprintf(buf, sizeof(buf), "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", (has_v9() ? ", v9" : (has_v8() ? ", v8" : "")), (has_hardware_popc() ? ", popc" : ""), (has_vis1() ? ", vis1" : ""), @@ -249,6 +249,7 @@ (has_sha256() ? ", sha256" : ""), (has_sha512() ? ", sha512" : ""), (is_ultra3() ? ", ultra3" : ""), + (has_sparc5_instr() ? ", sparc5" : ""), (is_sun4v() ? ", sun4v" : ""), (is_niagara_plus() ? ", niagara_plus" : (is_niagara() ? ", niagara" : "")), (is_sparc64() ? ", sparc64" : ""), @@ -479,16 +480,13 @@ if (strstr(impl, "SPARC-T1") != NULL) { features |= T1_model_m; } + } else if (strstr(impl, "SUN4V-CPU") != NULL) { + // Generic or migration class LDOM + features |= T_family_m; } else { - if (strstr(impl, "SPARC") == NULL) { #ifndef PRODUCT - // kstat on Solaris 8 virtual machines (branded zones) - // returns "(unsupported)" implementation. Solaris 8 is not - // supported anymore, but include this check to be on the - // safe side. - warning("Can't parse CPU implementation = '%s', assume generic SPARC", impl); + warning("Failed to parse CPU implementation = '%s'", impl); #endif - } } os::free((void*)impl); return features;
--- a/src/os_cpu/solaris_sparc/vm/vm_version_solaris_sparc.cpp Fri Mar 17 07:52:54 2017 -0700 +++ b/src/os_cpu/solaris_sparc/vm/vm_version_solaris_sparc.cpp Fri Mar 31 07:46:19 2017 -0700 @@ -438,40 +438,47 @@ features |= sun4v_m; } - bool use_solaris_12_api = false; - Sysinfo impl(SI_CPUBRAND); - if (impl.valid()) { - // If SI_CPUBRAND works, that means Solaris 12 API to get the cache line sizes - // is available to us as well - use_solaris_12_api = true; - features |= parse_features(impl.value()); + // If SI_CPUBRAND works, that means Solaris 12 API to get the cache line sizes + // is available to us as well + Sysinfo cpu_info(SI_CPUBRAND); + bool use_solaris_12_api = cpu_info.valid(); + const char* impl; + int impl_m = 0; + if (use_solaris_12_api) { + impl = cpu_info.value(); +#ifndef PRODUCT + if (PrintMiscellaneous && Verbose) { + tty->print_cr("Parsing CPU implementation from %s", impl); + } +#endif + impl_m = parse_features(impl); } else { // Otherwise use kstat to determine the machine type. kstat_ctl_t* kc = kstat_open(); - kstat_t* ksp = kstat_lookup(kc, (char*)"cpu_info", -1, NULL); - const char* implementation; - bool has_implementation = false; - if (ksp != NULL) { - if (kstat_read(kc, ksp, NULL) != -1 && ksp->ks_data != NULL) { - kstat_named_t* knm = (kstat_named_t *)ksp->ks_data; - for (int i = 0; i < ksp->ks_ndata; i++) { - if (strcmp((const char*)&(knm[i].name),"implementation") == 0) { - implementation = KSTAT_NAMED_STR_PTR(&knm[i]); - has_implementation = true; + if (kc != NULL) { + kstat_t* ksp = kstat_lookup(kc, (char*)"cpu_info", -1, NULL); + if (ksp != NULL) { + if (kstat_read(kc, ksp, NULL) != -1 && ksp->ks_data != NULL) { + kstat_named_t* knm = (kstat_named_t *)ksp->ks_data; + for (int i = 0; i < ksp->ks_ndata; i++) { + if (strcmp((const char*)&(knm[i].name), "implementation") == 0) { + impl = KSTAT_NAMED_STR_PTR(&knm[i]); #ifndef PRODUCT - if (PrintMiscellaneous && Verbose) { - tty->print_cr("cpu_info.implementation: %s", implementation); + if (PrintMiscellaneous && Verbose) { + tty->print_cr("Parsing CPU implementation from %s", impl); + } +#endif + impl_m = parse_features(impl); + break; } -#endif - features |= parse_features(implementation); - break; } - } // for( + } } + kstat_close(kc); } - assert(has_implementation, "unknown cpu info (changed kstat interface?)"); - kstat_close(kc); } + assert(impl_m != 0, err_msg("Unknown CPU implementation %s", impl)); + features |= impl_m; bool is_sun4v = (features & sun4v_m) != 0; if (use_solaris_12_api && is_sun4v) {