|
@@ -18,19 +18,39 @@
|
|
|
#ifndef arch_irq_stat
|
|
|
#define arch_irq_stat() 0
|
|
|
#endif
|
|
|
-#ifndef arch_idle_time
|
|
|
-#define arch_idle_time(cpu) 0
|
|
|
-#endif
|
|
|
+
|
|
|
+#ifdef arch_idle_time
|
|
|
+
|
|
|
+static cputime64_t get_idle_time(int cpu)
|
|
|
+{
|
|
|
+ cputime64_t idle;
|
|
|
+
|
|
|
+ idle = kcpustat_cpu(cpu).cpustat[CPUTIME_IDLE];
|
|
|
+ if (cpu_online(cpu) && !nr_iowait_cpu(cpu))
|
|
|
+ idle += arch_idle_time(cpu);
|
|
|
+ return idle;
|
|
|
+}
|
|
|
+
|
|
|
+static cputime64_t get_iowait_time(int cpu)
|
|
|
+{
|
|
|
+ cputime64_t iowait;
|
|
|
+
|
|
|
+ iowait = kcpustat_cpu(cpu).cpustat[CPUTIME_IOWAIT];
|
|
|
+ if (cpu_online(cpu) && nr_iowait_cpu(cpu))
|
|
|
+ iowait += arch_idle_time(cpu);
|
|
|
+ return iowait;
|
|
|
+}
|
|
|
+
|
|
|
+#else
|
|
|
|
|
|
static u64 get_idle_time(int cpu)
|
|
|
{
|
|
|
u64 idle, 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 */
|
|
|
idle = kcpustat_cpu(cpu).cpustat[CPUTIME_IDLE];
|
|
|
- idle += arch_idle_time(cpu);
|
|
|
- } else
|
|
|
+ else
|
|
|
idle = usecs_to_cputime64(idle_time);
|
|
|
|
|
|
return idle;
|
|
@@ -49,6 +69,8 @@ static u64 get_iowait_time(int cpu)
|
|
|
return iowait;
|
|
|
}
|
|
|
|
|
|
+#endif
|
|
|
+
|
|
|
static int show_stat(struct seq_file *p, void *v)
|
|
|
{
|
|
|
int i, j;
|