diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c index c260d603a9..6e79445abc 100644 --- a/src/util/virhostcpu.c +++ b/src/util/virhostcpu.c @@ -200,35 +200,6 @@ virHostCPUGetStatsFreeBSD(int cpuNum, # define LINUX_NB_CPU_STATS 4 - -static unsigned long -virHostCPUCountThreadSiblings(unsigned int cpu) -{ - unsigned long ret = 0; - int rv = -1; - char *str = NULL; - size_t i; - - rv = virFileReadValueString(&str, - "%s/cpu/cpu%u/topology/thread_siblings", - SYSFS_SYSTEM_PATH, cpu); - if (rv == -2) { - ret = 1; - goto cleanup; - } - if (rv < 0) - goto cleanup; - - for (i = 0; str[i] != '\0'; i++) { - if (c_isxdigit(str[i])) - ret += count_one_bits(virHexToBin(str[i])); - } - - cleanup: - VIR_FREE(str); - return ret; -} - int virHostCPUGetSocket(unsigned int cpu, unsigned int *socket) { @@ -289,6 +260,22 @@ virHostCPUGetSiblingsList(unsigned int cpu) return ret; } +static unsigned long +virHostCPUCountThreadSiblings(unsigned int cpu) +{ + virBitmapPtr siblings_map; + unsigned long ret = 0; + + if (!(siblings_map = virHostCPUGetSiblingsList(cpu))) + goto cleanup; + + ret = virBitmapCountBits(siblings_map); + + cleanup: + virBitmapFree(siblings_map); + return ret; +} + /* parses a node entry, returning number of processors in the node and * filling arguments */ static int