diff options
Diffstat (limited to 'fs/proc/stat.c')
| -rw-r--r-- | fs/proc/stat.c | 34 | 
1 files changed, 28 insertions, 6 deletions
diff --git a/fs/proc/stat.c b/fs/proc/stat.c index 6a0c62d6e44..64c3b317236 100644 --- a/fs/proc/stat.c +++ b/fs/proc/stat.c @@ -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;  |