ARM: 8705/1: early_printk: use printascii() rather than printch()
authorNicolas Pitre <nicolas.pitre@linaro.org>
Fri, 6 Oct 2017 18:49:19 +0000 (19:49 +0100)
committerRussell King <rmk+kernel@armlinux.org.uk>
Thu, 12 Oct 2017 10:29:29 +0000 (11:29 +0100)
With printch() the console messages are sent out one character at a time
which is agonizingly slow especially with semihosting as the whole trap
intercept, remote byte access, and system resume danse is performed for
every single character across a relatively slow remote debug connection.

Let's use printascii() to send a whole string at once. This is also going
to be more efficient, albeit to a quite lesser extent, with serial ports
as well.

Signed-off-by: Nicolas Pitre <nico@linaro.org>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
arch/arm/kernel/early_printk.c

index 4307653..9257736 100644 (file)
 #include <linux/kernel.h>
 #include <linux/console.h>
 #include <linux/init.h>
+#include <linux/string.h>
 
-extern void printch(int);
+extern void printascii(const char *);
 
 static void early_write(const char *s, unsigned n)
 {
-       while (n-- > 0) {
-               if (*s == '\n')
-                       printch('\r');
-               printch(*s);
-               s++;
+       char buf[128];
+       while (n) {
+               unsigned l = min(n, sizeof(buf)-1);
+               memcpy(buf, s, l);
+               buf[l] = 0;
+               s += l;
+               n -= l;
+               printascii(buf);
        }
 }