tools/power turbostat: Allocate correct amount of fd and irq entries
authorMika Westerberg <mika.westerberg@linux.intel.com>
Fri, 22 Apr 2016 08:13:23 +0000 (11:13 +0300)
committerLen Brown <len.brown@intel.com>
Thu, 1 Dec 2016 06:33:16 +0000 (01:33 -0500)
The tool uses topo.max_cpu_num to determine number of entries needed for
fd_percpu[] and irqs_per_cpu[]. For example on a system with 4 CPUs
topo.max_cpu_num is 3 so we get too small array for holding per-CPU items.

Fix this to use right number of entries, which is topo.max_cpu_num + 1.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
tools/power/x86/turbostat/turbostat.c

index be50892f27aa33551489f9170f8da6a24cbef44e..741fefa2f07ee168eab1eeb89850e24d909e58c2 100644 (file)
@@ -1618,7 +1618,7 @@ void free_fd_percpu(void)
 {
        int i;
 
-       for (i = 0; i < topo.max_cpu_num; ++i) {
+       for (i = 0; i < topo.max_cpu_num + 1; ++i) {
                if (fd_percpu[i] != 0)
                        close(fd_percpu[i]);
        }
@@ -3584,7 +3584,7 @@ void allocate_output_buffer()
 }
 void allocate_fd_percpu(void)
 {
-       fd_percpu = calloc(topo.max_cpu_num, sizeof(int));
+       fd_percpu = calloc(topo.max_cpu_num + 1, sizeof(int));
        if (fd_percpu == NULL)
                err(-1, "calloc fd_percpu");
 }
@@ -3594,9 +3594,9 @@ void allocate_irq_buffers(void)
        if (irq_column_2_cpu == NULL)
                err(-1, "calloc %d", topo.num_cpus);
 
-       irqs_per_cpu = calloc(topo.max_cpu_num, sizeof(int));
+       irqs_per_cpu = calloc(topo.max_cpu_num + 1, sizeof(int));
        if (irqs_per_cpu == NULL)
-               err(-1, "calloc %d", topo.max_cpu_num);
+               err(-1, "calloc %d", topo.max_cpu_num + 1);
 }
 void setup_all_buffers(void)
 {