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
	 Doug MacEachern
						Doug MacEachern