diff options
Diffstat (limited to 'fs/proc/stat.c')
| -rw-r--r-- | fs/proc/stat.c | 29 | 
1 files changed, 26 insertions, 3 deletions
diff --git a/fs/proc/stat.c b/fs/proc/stat.c index 535eda7857cf..76175211b304 100644 --- a/fs/proc/stat.c +++ b/fs/proc/stat.c @@ -79,6 +79,31 @@ static u64 get_iowait_time(int cpu)  #endif +static void show_irq_gap(struct seq_file *p, unsigned int gap) +{ +	static const char zeros[] = " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + +	while (gap > 0) { +		unsigned int inc; + +		inc = min_t(unsigned int, gap, ARRAY_SIZE(zeros) / 2); +		seq_write(p, zeros, 2 * inc); +		gap -= inc; +	} +} + +static void show_all_irqs(struct seq_file *p) +{ +	unsigned int i, next = 0; + +	for_each_active_irq(i) { +		show_irq_gap(p, i - next); +		seq_put_decimal_ull(p, " ", kstat_irqs_usr(i)); +		next = i + 1; +	} +	show_irq_gap(p, nr_irqs - next); +} +  static int show_stat(struct seq_file *p, void *v)  {  	int i, j; @@ -156,9 +181,7 @@ static int show_stat(struct seq_file *p, void *v)  	}  	seq_put_decimal_ull(p, "intr ", (unsigned long long)sum); -	/* sum again ? it could be updated? */ -	for_each_irq_nr(j) -		seq_put_decimal_ull(p, " ", kstat_irqs_usr(j)); +	show_all_irqs(p);  	seq_printf(p,  		"\nctxt %llu\n"  | 
