diff options
Diffstat (limited to 'fs/proc')
-rw-r--r-- | fs/proc/stat.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/fs/proc/stat.c b/fs/proc/stat.c index 0855e6f..4c9a859 100644 --- a/fs/proc/stat.c +++ b/fs/proc/stat.c @@ -24,11 +24,14 @@ static cputime64_t get_idle_time(int cpu) { - u64 idle_time = get_cpu_idle_time_us(cpu, NULL); + u64 idle_time = -1ULL; cputime64_t idle; + if (cpu_online(cpu)) + idle_time = get_cpu_idle_time_us(cpu, NULL); + if (idle_time == -1ULL) { - /* !NO_HZ so we can rely on cpustat.idle */ + /* !NO_HZ or cpu offline so we can rely on cpustat.idle */ idle = kstat_cpu(cpu).cpustat.idle; idle = cputime64_add(idle, arch_idle_time(cpu)); } else @@ -39,11 +42,14 @@ static cputime64_t get_idle_time(int cpu) static cputime64_t get_iowait_time(int cpu) { - u64 iowait_time = get_cpu_iowait_time_us(cpu, NULL); + u64 iowait_time = -1ULL; cputime64_t iowait; + if (cpu_online(cpu)) + iowait_time = get_cpu_iowait_time_us(cpu, NULL); + if (iowait_time == -1ULL) - /* !NO_HZ so we can rely on cpustat.iowait */ + /* !NO_HZ or cpu offline so we can rely on cpustat.iowait */ iowait = kstat_cpu(cpu).cpustat.iowait; else iowait = usecs_to_cputime64(iowait_time); |