Merge branch 'akpm' (patches from Andrew)
[sfrench/cifs-2.6.git] / fs / proc / stat.c
index 49aa0a2b0d9ed4e4eb50f0eb93da0769f6872555..80c305f206bba89a9cb1e6b72074fdf9e1d0e713 100644 (file)
@@ -79,6 +79,31 @@ static u64 get_iowait_time(struct kernel_cpustat *kcs, 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;
@@ -160,9 +185,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"