|
@@ -45,10 +45,13 @@ static cputime64_t get_iowait_time(int cpu)
|
|
|
|
|
|
static u64 get_idle_time(int cpu)
|
|
static u64 get_idle_time(int cpu)
|
|
{
|
|
{
|
|
- u64 idle, idle_time = get_cpu_idle_time_us(cpu, NULL);
|
|
|
|
|
|
+ u64 idle, idle_time = -1ULL;
|
|
|
|
+
|
|
|
|
+ if (cpu_online(cpu))
|
|
|
|
+ idle_time = get_cpu_idle_time_us(cpu, NULL);
|
|
|
|
|
|
if (idle_time == -1ULL)
|
|
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 = kcpustat_cpu(cpu).cpustat[CPUTIME_IDLE];
|
|
idle = kcpustat_cpu(cpu).cpustat[CPUTIME_IDLE];
|
|
else
|
|
else
|
|
idle = usecs_to_cputime64(idle_time);
|
|
idle = usecs_to_cputime64(idle_time);
|
|
@@ -58,10 +61,13 @@ static u64 get_idle_time(int cpu)
|
|
|
|
|
|
static u64 get_iowait_time(int cpu)
|
|
static u64 get_iowait_time(int cpu)
|
|
{
|
|
{
|
|
- u64 iowait, iowait_time = get_cpu_iowait_time_us(cpu, NULL);
|
|
|
|
|
|
+ u64 iowait, iowait_time = -1ULL;
|
|
|
|
+
|
|
|
|
+ if (cpu_online(cpu))
|
|
|
|
+ iowait_time = get_cpu_iowait_time_us(cpu, NULL);
|
|
|
|
|
|
if (iowait_time == -1ULL)
|
|
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 = kcpustat_cpu(cpu).cpustat[CPUTIME_IOWAIT];
|
|
iowait = kcpustat_cpu(cpu).cpustat[CPUTIME_IOWAIT];
|
|
else
|
|
else
|
|
iowait = usecs_to_cputime64(iowait_time);
|
|
iowait = usecs_to_cputime64(iowait_time);
|