cpupower: Do not analyse offlined cpus
authorThomas Renninger <trenn@suse.com>
Tue, 1 Dec 2015 16:14:15 +0000 (17:14 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 3 Dec 2015 01:30:30 +0000 (02:30 +0100)
Use sysfs_is_cpu_online(cpu) instead of cpufreq_cpu_exists(cpu) to detect offlined cpus.

Re-arrange printfs slightly to have a consistent output even if you have multiple CPUs
as output and even if offlined cores are in between.

Signed-off-by: Thomas Renninger <trenn@suse.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
tools/power/cpupower/utils/cpufreq-info.c
tools/power/cpupower/utils/cpuidle-info.c
tools/power/cpupower/utils/cpupower-info.c
tools/power/cpupower/utils/cpupower-set.c

index 0e676433024109bef6d9a87e08709c40be37b2df..522b357f411080a4a477a689ce05aa302b37578c 100644 (file)
@@ -14,6 +14,7 @@
 #include <getopt.h>
 
 #include "cpufreq.h"
+#include "helpers/sysfs.h"
 #include "helpers/helpers.h"
 #include "helpers/bitmask.h"
 
@@ -647,11 +648,14 @@ int cmd_freq_info(int argc, char **argv)
 
                if (!bitmask_isbitset(cpus_chosen, cpu))
                        continue;
-               if (cpufreq_cpu_exists(cpu)) {
-                       printf(_("couldn't analyze CPU %d as it doesn't seem to be present\n"), cpu);
+
+               printf(_("analyzing CPU %d:\n"), cpu);
+
+               if (sysfs_is_cpu_online(cpu) != 1) {
+                       printf(_(" *is offline\n"));
+                       printf("\n");
                        continue;
                }
-               printf(_("analyzing CPU %d:\n"), cpu);
 
                switch (output_param) {
                case 'b':
@@ -693,6 +697,7 @@ int cmd_freq_info(int argc, char **argv)
                }
                if (ret)
                        return ret;
+               printf("\n");
        }
        return ret;
 }
index 750c1d82c3f7b7f16a3eea71df3c9d6e7a4ceb7d..8bf8ab5ffa25d18580a850eb79b276fed712cfbf 100644 (file)
@@ -12,7 +12,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <getopt.h>
-#include <cpufreq.h>
 
 #include "helpers/helpers.h"
 #include "helpers/sysfs.h"
@@ -25,8 +24,6 @@ static void cpuidle_cpu_output(unsigned int cpu, int verbose)
        unsigned int idlestates, idlestate;
        char *tmp;
 
-       printf(_ ("Analyzing CPU %d:\n"), cpu);
-
        idlestates = sysfs_get_idlestate_count(cpu);
        if (idlestates == 0) {
                printf(_("CPU %u: No idle states\n"), cpu);
@@ -71,7 +68,6 @@ static void cpuidle_cpu_output(unsigned int cpu, int verbose)
                printf(_("Duration: %llu\n"),
                       sysfs_get_idlestate_time(cpu, idlestate));
        }
-       printf("\n");
 }
 
 static void cpuidle_general_output(void)
@@ -189,10 +185,17 @@ int cmd_idle_info(int argc, char **argv)
        for (cpu = bitmask_first(cpus_chosen);
             cpu <= bitmask_last(cpus_chosen); cpu++) {
 
-               if (!bitmask_isbitset(cpus_chosen, cpu) ||
-                   cpufreq_cpu_exists(cpu))
+               if (!bitmask_isbitset(cpus_chosen, cpu))
                        continue;
 
+               printf(_("analyzing CPU %d:\n"), cpu);
+
+               if (sysfs_is_cpu_online(cpu) != 1) {
+                       printf(_(" *is offline\n"));
+                       printf("\n");
+                       continue;
+               }
+
                switch (output_param) {
 
                case 'o':
@@ -203,6 +206,7 @@ int cmd_idle_info(int argc, char **argv)
                        cpuidle_cpu_output(cpu, verbose);
                        break;
                }
+               printf("\n");
        }
        return EXIT_SUCCESS;
 }
index 10299f2e9d2a6917f0601dd07eedb0ff03c6bc92..c7caa8eaa6d06e13581c597724cc9452a6957cca 100644 (file)
@@ -12,7 +12,6 @@
 #include <string.h>
 #include <getopt.h>
 
-#include <cpufreq.h>
 #include "helpers/helpers.h"
 #include "helpers/sysfs.h"
 
@@ -83,12 +82,16 @@ int cmd_info(int argc, char **argv)
        for (cpu = bitmask_first(cpus_chosen);
             cpu <= bitmask_last(cpus_chosen); cpu++) {
 
-               if (!bitmask_isbitset(cpus_chosen, cpu) ||
-                   cpufreq_cpu_exists(cpu))
+               if (!bitmask_isbitset(cpus_chosen, cpu))
                        continue;
 
                printf(_("analyzing CPU %d:\n"), cpu);
 
+               if (sysfs_is_cpu_online(cpu) != 1){
+                       printf(_(" *is offline\n"));
+                       continue;
+               }
+
                if (params.perf_bias) {
                        ret = msr_intel_get_perf_bias(cpu);
                        if (ret < 0) {
index 3e6f374f8dd73ddc1fd1b6d3b30f175fcc7f9e4b..532f46b9a3351d33848cccce2c5d212ff6fd671a 100644 (file)
@@ -12,7 +12,6 @@
 #include <string.h>
 #include <getopt.h>
 
-#include <cpufreq.h>
 #include "helpers/helpers.h"
 #include "helpers/sysfs.h"
 #include "helpers/bitmask.h"
@@ -78,10 +77,15 @@ int cmd_set(int argc, char **argv)
        for (cpu = bitmask_first(cpus_chosen);
             cpu <= bitmask_last(cpus_chosen); cpu++) {
 
-               if (!bitmask_isbitset(cpus_chosen, cpu) ||
-                   cpufreq_cpu_exists(cpu))
+               if (!bitmask_isbitset(cpus_chosen, cpu))
                        continue;
 
+               if (sysfs_is_cpu_online(cpu) != 1){
+                       fprintf(stderr, _("Cannot set values on CPU %d:"), cpu);
+                       fprintf(stderr, _(" *is offline\n"));
+                       continue;
+               }
+
                if (params.perf_bias) {
                        ret = msr_intel_set_perf_bias(cpu, perf_bias);
                        if (ret) {