Use kstat.cpu_info.brand to determine sigar_cpu_info_t.vendor on Solaris 10+
This commit is contained in:
parent
f3137cb53a
commit
2fe2ab4349
@ -1,5 +1,7 @@
|
||||
2006-09-21 Doug MacEachern <dougm@hyperic.net>
|
||||
|
||||
* Use kstat.cpu_info.brand to determine sigar_cpu_info_t.vendor on Solaris 10+
|
||||
|
||||
* Fix Linux cpu_info /proc/cpuinfo parsing on ia64
|
||||
|
||||
2006-09-08 Doug MacEachern <dougm@hyperic.net>
|
||||
|
@ -245,6 +245,52 @@ int sigar_swap_get(sigar_t *sigar, sigar_swap_t *swap)
|
||||
return SIGAR_OK;
|
||||
}
|
||||
|
||||
static int get_chip_brand(sigar_t *sigar, int processor,
|
||||
sigar_cpu_info_t *info)
|
||||
{
|
||||
kstat_t *ksp = sigar->ks.cpu_info[processor];
|
||||
kstat_named_t *brand;
|
||||
|
||||
if (sigar->solaris_version < 10) {
|
||||
/* don't bother; doesn't exist. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ksp &&
|
||||
(kstat_read(sigar->kc, ksp, NULL) != -1) &&
|
||||
(brand = (kstat_named_t *)kstat_data_lookup(ksp, "brand")))
|
||||
{
|
||||
/* same offset as KSTAT_NAMED_STR_PTR(brand) */
|
||||
char *name = (char *)brand->value.i32;
|
||||
char *vendor = "Sun";
|
||||
char *vendors[] = {
|
||||
"Intel", "AMD", NULL
|
||||
};
|
||||
int i;
|
||||
|
||||
if (!name) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (i=0; vendors[i]; i++) {
|
||||
if (strstr(name, vendors[i])) {
|
||||
vendor = vendors[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
SIGAR_SSTRCPY(info->vendor, vendor);
|
||||
#if 0
|
||||
SIGAR_SSTRCPY(info->model, name);
|
||||
sigar_cpu_model_adjust(sigar, info);
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int get_chip_id(sigar_t *sigar, int processor)
|
||||
{
|
||||
kstat_t *ksp = sigar->ks.cpu_info[processor];
|
||||
@ -1551,6 +1597,7 @@ int sigar_cpu_info_list_get(sigar_t *sigar,
|
||||
processor_info_t stats;
|
||||
unsigned int i;
|
||||
int status = SIGAR_OK;
|
||||
int brand = -1;
|
||||
|
||||
if (sigar_kstat_update(sigar) == -1) { /* for sigar->ncpu */
|
||||
return errno;
|
||||
@ -1592,18 +1639,30 @@ int sigar_cpu_info_list_get(sigar_t *sigar,
|
||||
|
||||
SIGAR_SSTRCPY(info->model, stats.pi_processor_type);
|
||||
|
||||
if (brand == -1) {
|
||||
brand = get_chip_brand(sigar, i, info);
|
||||
}
|
||||
|
||||
if (strEQ(info->model, "i386")) {
|
||||
/* XXX assuming Intel on x86 */
|
||||
if (!brand) {
|
||||
/* assume Intel on x86 */
|
||||
SIGAR_SSTRCPY(info->vendor, "Intel");
|
||||
}
|
||||
SIGAR_SSTRCPY(info->model, "x86");
|
||||
}
|
||||
else {
|
||||
/* sparc */
|
||||
if (!brand) {
|
||||
/* assume Sun */
|
||||
SIGAR_SSTRCPY(info->vendor, "Sun");
|
||||
}
|
||||
/* s/sparc/Sparc/ */
|
||||
info->model[0] = toupper(info->model[0]);
|
||||
}
|
||||
|
||||
if (brand) {
|
||||
SIGAR_SSTRCPY(info->vendor, cpu_infos->data[0].vendor);
|
||||
}
|
||||
|
||||
info->mhz = stats.pi_clock;
|
||||
info->cache_size = SIGAR_FIELD_NOTIMPL; /*XXX*/
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user