@@ -315,25 +315,29 @@ struct topology* get_topology_info(struct cpuInfo* cpu) {
315315 }
316316 else {
317317 printWarn ("Can't read topology information from cpuid (needed extended level is 0x%.8X, max is 0x%.8X)" , 0x8000001E , cpu -> maxExtendedLevels );
318- topo -> smt_supported = 1 ;
319- topo -> smt_available = 1 ;
320- }
321- topo -> physical_cores = topo -> logical_cores / topo -> smt_available ;
318+ topo -> smt_supported = 1 ;
319+ }
322320 }
323321 else {
324- printWarn ("Can't read topology information from cpuid (needed extended level is 0x%.8X, max is 0x%.8X)" , 0x80000008 , cpu -> maxExtendedLevels );
322+ printErr ("Can't read topology information from cpuid (needed extended level is 0x%.8X, max is 0x%.8X)" , 0x80000008 , cpu -> maxExtendedLevels );
325323 topo -> physical_cores = 1 ;
326324 topo -> logical_cores = 1 ;
327- topo -> smt_supported = 1 ;
328- topo -> smt_available = 1 ;
325+ topo -> smt_supported = 1 ;
329326 }
330327 if (cpu -> maxLevels >= 0x0000000B ) {
331- // topo->smt_supported = is_smt_enabled(topo);
328+ topo -> smt_available = is_smt_enabled (topo );
332329 }
333330 else {
334- printWarn ("Can't read topology information from cpuid (needed level is 0x%.8X, max is 0x%.8X)" , 0x80000008 , cpu -> maxLevels );
335- topo -> smt_supported = 1 ;
331+ printWarn ("Can't read topology information from cpuid (needed level is 0x%.8X, max is 0x%.8X)" , 0x0000000B , cpu -> maxLevels );
332+ topo -> smt_available = 1 ;
336333 }
334+ topo -> physical_cores = topo -> logical_cores / topo -> smt_available ;
335+
336+ if (topo -> smt_supported > 1 )
337+ topo -> sockets = topo -> total_cores / topo -> smt_supported / topo -> physical_cores ; // Idea borrowed from lscpu
338+ else
339+ topo -> sockets = topo -> total_cores / topo -> physical_cores ;
340+
337341 break ;
338342 default :
339343 printBug ("Cant get topology because VENDOR is empty" );
@@ -760,7 +764,7 @@ char* get_str_cache_two(int32_t cache_size, uint32_t physical_cores) {
760764 printBug ("get_value_as_smallest_unit: snprintf returned a negative value for input: %d\n" , cache_size * physical_cores );
761765 return NULL ;
762766 }
763-
767+
764768 uint32_t size = tmp1_len + 2 + tmp2_len + 7 + 1 ;
765769 sanity_ret = snprintf (string , size , "%s (%s Total)" , tmp1 , tmp2 );
766770
0 commit comments