OSDN Git Service

cpustats: do not die in case a CPU is offlined
authorThierry Strudel <tstrudel@google.com>
Tue, 13 Oct 2015 22:10:32 +0000 (15:10 -0700)
committerThierry Strudel <tstrudel@google.com>
Wed, 9 Mar 2016 00:41:02 +0000 (00:41 +0000)
Change-Id: I05700266f1c7584ff51557b3e559654045379e87

cpustats/cpustats.c

index 32d75b2..0042caf 100644 (file)
@@ -267,16 +267,22 @@ static void read_freq_stats(int cpu) {
 
     sprintf(filename, "/sys/devices/system/cpu/cpu%d/cpufreq/stats/time_in_state", cpu);
     file = fopen(filename, "r");
-    if (!file) die("Could not open %s\n", filename);
     for (i = 0; i < new_cpus[cpu].freq_count; i++) {
-        fscanf(file, "%u %lu\n", &new_cpus[cpu].freqs[i].freq,
+        if (file) {
+            fscanf(file, "%u %lu\n", &new_cpus[cpu].freqs[i].freq,
                &new_cpus[cpu].freqs[i].time);
+        } else {
+            /* The CPU has been off lined for some reason */
+            new_cpus[cpu].freqs[i].freq = old_cpus[cpu].freqs[i].freq;
+            new_cpus[cpu].freqs[i].time = old_cpus[cpu].freqs[i].time;
+        }
         if (aggregate_freq_stats) {
             new_total_cpu.freqs[i].freq = new_cpus[cpu].freqs[i].freq;
             new_total_cpu.freqs[i].time += new_cpus[cpu].freqs[i].time;
         }
     }
-    fclose(file);
+    if (file)
+        fclose(file);
 }
 
 /*