8165482
: java in ldoms, with cpu-arch=generic has problems
Reviewed-by: dholmes, alanbur
This commit is contained in:
parent
c13329714b
commit
811ccf69ad
@ -179,7 +179,7 @@ void VM_Version::initialize() {
|
|||||||
assert((OptoLoopAlignment % relocInfo::addr_unit()) == 0, "alignment is not a multiple of NOP size");
|
assert((OptoLoopAlignment % relocInfo::addr_unit()) == 0, "alignment is not a multiple of NOP size");
|
||||||
|
|
||||||
char buf[512];
|
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%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%s",
|
||||||
(has_v9() ? ", v9" : (has_v8() ? ", v8" : "")),
|
(has_v9() ? ", v9" : (has_v8() ? ", v8" : "")),
|
||||||
(has_hardware_popc() ? ", popc" : ""),
|
(has_hardware_popc() ? ", popc" : ""),
|
||||||
(has_vis1() ? ", vis1" : ""),
|
(has_vis1() ? ", vis1" : ""),
|
||||||
@ -193,6 +193,7 @@ void VM_Version::initialize() {
|
|||||||
(has_sha512() ? ", sha512" : ""),
|
(has_sha512() ? ", sha512" : ""),
|
||||||
(has_crc32c() ? ", crc32c" : ""),
|
(has_crc32c() ? ", crc32c" : ""),
|
||||||
(is_ultra3() ? ", ultra3" : ""),
|
(is_ultra3() ? ", ultra3" : ""),
|
||||||
|
(has_sparc5_instr() ? ", sparc5" : ""),
|
||||||
(is_sun4v() ? ", sun4v" : ""),
|
(is_sun4v() ? ", sun4v" : ""),
|
||||||
(is_niagara_plus() ? ", niagara_plus" : (is_niagara() ? ", niagara" : "")),
|
(is_niagara_plus() ? ", niagara_plus" : (is_niagara() ? ", niagara" : "")),
|
||||||
(is_sparc64() ? ", sparc64" : ""),
|
(is_sparc64() ? ", sparc64" : ""),
|
||||||
@ -487,16 +488,11 @@ int VM_Version::parse_features(const char* implementation) {
|
|||||||
if (strstr(impl, "SPARC-T1") != NULL) {
|
if (strstr(impl, "SPARC-T1") != NULL) {
|
||||||
features |= T1_model_m;
|
features |= T1_model_m;
|
||||||
}
|
}
|
||||||
|
} else if (strstr(impl, "SUN4V-CPU") != NULL) {
|
||||||
|
// Generic or migration class LDOM
|
||||||
|
features |= T_family_m;
|
||||||
} else {
|
} else {
|
||||||
if (strstr(impl, "SPARC") == NULL) {
|
log_info(os, cpu)("Failed to parse CPU implementation = '%s'", impl);
|
||||||
#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);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
os::free((void*)impl);
|
os::free((void*)impl);
|
||||||
return features;
|
return features;
|
||||||
|
@ -440,36 +440,39 @@ int VM_Version::platform_features(int features) {
|
|||||||
features |= sun4v_m;
|
features |= sun4v_m;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool use_solaris_12_api = false;
|
// If SI_CPUBRAND works, that means Solaris 12 API to get the cache line sizes
|
||||||
Sysinfo impl(SI_CPUBRAND);
|
// is available to us as well
|
||||||
if (impl.valid()) {
|
Sysinfo cpu_info(SI_CPUBRAND);
|
||||||
// If SI_CPUBRAND works, that means Solaris 12 API to get the cache line sizes
|
bool use_solaris_12_api = cpu_info.valid();
|
||||||
// is available to us as well
|
const char* impl;
|
||||||
use_solaris_12_api = true;
|
int impl_m = 0;
|
||||||
features |= parse_features(impl.value());
|
if (use_solaris_12_api) {
|
||||||
|
impl = cpu_info.value();
|
||||||
|
log_info(os, cpu)("Parsing CPU implementation from %s", impl);
|
||||||
|
impl_m = parse_features(impl);
|
||||||
} else {
|
} else {
|
||||||
// Otherwise use kstat to determine the machine type.
|
// Otherwise use kstat to determine the machine type.
|
||||||
kstat_ctl_t* kc = kstat_open();
|
kstat_ctl_t* kc = kstat_open();
|
||||||
kstat_t* ksp = kstat_lookup(kc, (char*)"cpu_info", -1, NULL);
|
if (kc != NULL) {
|
||||||
const char* implementation;
|
kstat_t* ksp = kstat_lookup(kc, (char*)"cpu_info", -1, NULL);
|
||||||
bool has_implementation = false;
|
if (ksp != NULL) {
|
||||||
if (ksp != NULL) {
|
if (kstat_read(kc, ksp, NULL) != -1 && ksp->ks_data != NULL) {
|
||||||
if (kstat_read(kc, ksp, NULL) != -1 && ksp->ks_data != NULL) {
|
kstat_named_t* knm = (kstat_named_t *)ksp->ks_data;
|
||||||
kstat_named_t* knm = (kstat_named_t *)ksp->ks_data;
|
for (int i = 0; i < ksp->ks_ndata; i++) {
|
||||||
for (int i = 0; i < ksp->ks_ndata; i++) {
|
if (strcmp((const char*)&(knm[i].name), "implementation") == 0) {
|
||||||
if (strcmp((const char*)&(knm[i].name),"implementation") == 0) {
|
impl = KSTAT_NAMED_STR_PTR(&knm[i]);
|
||||||
implementation = KSTAT_NAMED_STR_PTR(&knm[i]);
|
log_info(os, cpu)("Parsing CPU implementation from %s", impl);
|
||||||
has_implementation = true;
|
impl_m = parse_features(impl);
|
||||||
log_info(os, cpu)("cpu_info.implementation: %s", implementation);
|
break;
|
||||||
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, "Unknown CPU implementation %s", impl);
|
||||||
|
features |= impl_m;
|
||||||
|
|
||||||
bool is_sun4v = (features & sun4v_m) != 0;
|
bool is_sun4v = (features & sun4v_m) != 0;
|
||||||
if (use_solaris_12_api && is_sun4v) {
|
if (use_solaris_12_api && is_sun4v) {
|
||||||
|
Loading…
Reference in New Issue
Block a user