}
        sum += arch_irq_stat();
 
-       seq_printf(p, "cpu  %llu %llu %llu %llu %llu %llu %llu %llu %llu "
-               "%llu\n",
-               (unsigned long long)cputime64_to_clock_t(user),
-               (unsigned long long)cputime64_to_clock_t(nice),
-               (unsigned long long)cputime64_to_clock_t(system),
-               (unsigned long long)cputime64_to_clock_t(idle),
-               (unsigned long long)cputime64_to_clock_t(iowait),
-               (unsigned long long)cputime64_to_clock_t(irq),
-               (unsigned long long)cputime64_to_clock_t(softirq),
-               (unsigned long long)cputime64_to_clock_t(steal),
-               (unsigned long long)cputime64_to_clock_t(guest),
-               (unsigned long long)cputime64_to_clock_t(guest_nice));
+       seq_puts(p, "cpu ");
+       seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(user));
+       seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(nice));
+       seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(system));
+       seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(idle));
+       seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(iowait));
+       seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(irq));
+       seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(softirq));
+       seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(steal));
+       seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(guest));
+       seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(guest_nice));
+       seq_putc(p, '\n');
+
        for_each_online_cpu(i) {
                /* Copy values here to work around gcc-2.95.3, gcc-2.96 */
                user = kcpustat_cpu(i).cpustat[CPUTIME_USER];
                steal = kcpustat_cpu(i).cpustat[CPUTIME_STEAL];
                guest = kcpustat_cpu(i).cpustat[CPUTIME_GUEST];
                guest_nice = kcpustat_cpu(i).cpustat[CPUTIME_GUEST_NICE];
-               seq_printf(p,
-                       "cpu%d %llu %llu %llu %llu %llu %llu %llu %llu %llu "
-                       "%llu\n",
-                       i,
-                       (unsigned long long)cputime64_to_clock_t(user),
-                       (unsigned long long)cputime64_to_clock_t(nice),
-                       (unsigned long long)cputime64_to_clock_t(system),
-                       (unsigned long long)cputime64_to_clock_t(idle),
-                       (unsigned long long)cputime64_to_clock_t(iowait),
-                       (unsigned long long)cputime64_to_clock_t(irq),
-                       (unsigned long long)cputime64_to_clock_t(softirq),
-                       (unsigned long long)cputime64_to_clock_t(steal),
-                       (unsigned long long)cputime64_to_clock_t(guest),
-                       (unsigned long long)cputime64_to_clock_t(guest_nice));
+               seq_printf(p, "cpu%d", i);
+               seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(user));
+               seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(nice));
+               seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(system));
+               seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(idle));
+               seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(iowait));
+               seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(irq));
+               seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(softirq));
+               seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(steal));
+               seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(guest));
+               seq_put_decimal_ull(p, ' ', cputime64_to_clock_t(guest_nice));
+               seq_putc(p, '\n');
        }
        seq_printf(p, "intr %llu", (unsigned long long)sum);
 
        /* sum again ? it could be updated? */
        for_each_irq_nr(j)
-               seq_printf(p, " %u", kstat_irqs(j));
+               seq_put_decimal_ull(p, ' ', kstat_irqs(j));
 
        seq_printf(p,
                "\nctxt %llu\n"
        seq_printf(p, "softirq %llu", (unsigned long long)sum_softirq);
 
        for (i = 0; i < NR_SOFTIRQS; i++)
-               seq_printf(p, " %u", per_softirq_sums[i]);
+               seq_put_decimal_ull(p, ' ', per_softirq_sums[i]);
        seq_putc(p, '\n');
 
        return 0;
 
 }
 EXPORT_SYMBOL(seq_puts);
 
+/*
+ * A helper routine for putting decimal numbers without rich format of printf().
+ * only 'unsigned long long' is supported.
+ * This routine will put one byte delimiter + number into seq_file.
+ * This routine is very quick when you show lots of numbers.
+ * In usual cases, it will be better to use seq_printf(). It's easier to read.
+ */
+int seq_put_decimal_ull(struct seq_file *m, char delimiter,
+                       unsigned long long num)
+{
+       int len;
+
+       if (m->count + 2 >= m->size) /* we'll write 2 bytes at least */
+               goto overflow;
+
+       m->buf[m->count++] = delimiter;
+
+       if (num < 10) {
+               m->buf[m->count++] = num + '0';
+               return 0;
+       }
+
+       len = num_to_str(m->buf + m->count, m->size - m->count, num);
+       if (!len)
+               goto overflow;
+       m->count += len;
+       return 0;
+overflow:
+       m->count = m->size;
+       return -1;
+}
+EXPORT_SYMBOL(seq_put_decimal_ull);
+
 /**
  * seq_write - write arbitrary data to buffer
  * @seq: seq_file identifying the buffer to which data should be written