Turbostat: fix topology detection
[collectd.git] / src / turbostat.c
index 6995df5..06f15cd 100644 (file)
@@ -1168,14 +1168,14 @@ mark_cpu_present(int cpu)
 }
 
 static int __attribute__((warn_unused_result))
-allocate_cpu_set(cpu_set_t * set, size_t * size) {
-       set = CPU_ALLOC(topology.max_cpu_id  + 1);
-       if (set == NULL) {
+allocate_cpu_set(cpu_set_t ** set, size_t * size) {
+       *set = CPU_ALLOC(topology.max_cpu_id  + 1);
+       if (*set == NULL) {
                ERROR("Unable to allocate CPU state");
                return -ERR_CPU_ALLOC;
        }
        *size = CPU_ALLOC_SIZE(topology.max_cpu_id  + 1);
-       CPU_ZERO_S(*size, set);
+       CPU_ZERO_S(*size, *set);
        return 0;
 }
 
@@ -1204,13 +1204,13 @@ topology_probe()
                return -ERR_CALLOC;
        }
 
-       ret = allocate_cpu_set(cpu_present_set, &cpu_present_setsize);
+       ret = allocate_cpu_set(&cpu_present_set, &cpu_present_setsize);
        if (ret != 0)
                goto err;
-       ret = allocate_cpu_set(cpu_affinity_set, &cpu_affinity_setsize);
+       ret = allocate_cpu_set(&cpu_affinity_set, &cpu_affinity_setsize);
        if (ret != 0)
                goto err;
-       ret = allocate_cpu_set(cpu_saved_affinity_set, &cpu_saved_affinity_setsize);
+       ret = allocate_cpu_set(&cpu_saved_affinity_set, &cpu_saved_affinity_setsize);
        if (ret != 0)
                goto err;
 
@@ -1249,7 +1249,7 @@ topology_probe()
                ret = parse_int_file("/sys/devices/system/cpu/cpu%d/topology/core_siblings_list", i);
                if (ret < 0)
                        goto err;
-               else if (ret == cpu->core_id)
+               else if (ret == i)
                        cpu->first_core_in_package = 1;
 
                ret = get_threads_on_core(i);
@@ -1259,13 +1259,12 @@ topology_probe()
                        num_threads = ret;
                if (num_threads > max_thread_id)
                        max_thread_id = num_threads;
-               if (num_threads > 1) {
-                       ret = parse_int_file("/sys/devices/system/cpu/cpu%d/topology/thread_siblings_list", i);
-                       if (ret < 0)
-                               goto err;
-                       else if (ret == num_threads)
-                               cpu->first_thread_in_core = 1;
-               }
+               ret = parse_int_file("/sys/devices/system/cpu/cpu%d/topology/thread_siblings_list", i);
+               if (ret < 0)
+                       goto err;
+               else if (ret == i)
+                       cpu->first_thread_in_core = 1;
+
                DEBUG("cpu %d pkg %d core %d\n",
                        i, cpu->package_id, cpu->core_id);
        }