diff options
Diffstat (limited to 'fs/proc/stat.c')
| -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 64c3b3172367..e296572c73ed 100644 --- a/fs/proc/stat.c +++ b/fs/proc/stat.c | |||
| @@ -45,10 +45,13 @@ static cputime64_t get_iowait_time(int cpu) | |||
| 45 | 45 | ||
| 46 | static u64 get_idle_time(int cpu) | 46 | static u64 get_idle_time(int cpu) |
| 47 | { | 47 | { |
| 48 | u64 idle, idle_time = get_cpu_idle_time_us(cpu, NULL); | 48 | u64 idle, idle_time = -1ULL; |
| 49 | |||
| 50 | if (cpu_online(cpu)) | ||
| 51 | idle_time = get_cpu_idle_time_us(cpu, NULL); | ||
| 49 | 52 | ||
| 50 | if (idle_time == -1ULL) | 53 | if (idle_time == -1ULL) |
| 51 | /* !NO_HZ so we can rely on cpustat.idle */ | 54 | /* !NO_HZ or cpu offline so we can rely on cpustat.idle */ |
| 52 | idle = kcpustat_cpu(cpu).cpustat[CPUTIME_IDLE]; | 55 | idle = kcpustat_cpu(cpu).cpustat[CPUTIME_IDLE]; |
| 53 | else | 56 | else |
| 54 | idle = usecs_to_cputime64(idle_time); | 57 | idle = usecs_to_cputime64(idle_time); |
| @@ -58,10 +61,13 @@ static u64 get_idle_time(int cpu) | |||
| 58 | 61 | ||
| 59 | static u64 get_iowait_time(int cpu) | 62 | static u64 get_iowait_time(int cpu) |
| 60 | { | 63 | { |
| 61 | u64 iowait, iowait_time = get_cpu_iowait_time_us(cpu, NULL); | 64 | u64 iowait, iowait_time = -1ULL; |
| 65 | |||
| 66 | if (cpu_online(cpu)) | ||
| 67 | iowait_time = get_cpu_iowait_time_us(cpu, NULL); | ||
| 62 | 68 | ||
| 63 | if (iowait_time == -1ULL) | 69 | if (iowait_time == -1ULL) |
| 64 | /* !NO_HZ so we can rely on cpustat.iowait */ | 70 | /* !NO_HZ or cpu offline so we can rely on cpustat.iowait */ |
| 65 | iowait = kcpustat_cpu(cpu).cpustat[CPUTIME_IOWAIT]; | 71 | iowait = kcpustat_cpu(cpu).cpustat[CPUTIME_IOWAIT]; |
| 66 | else | 72 | else |
| 67 | iowait = usecs_to_cputime64(iowait_time); | 73 | iowait = usecs_to_cputime64(iowait_time); |
