diff options
author | Nicolas Pitre <nicolas.pitre@linaro.org> | 2017-10-06 19:49:19 +0100 |
---|---|---|
committer | Russell King <rmk+kernel@armlinux.org.uk> | 2017-10-12 11:29:29 +0100 |
commit | de880632fc02a889c0c3d2247fa08dc9e1afa228 (patch) | |
tree | 69836d177cedae6334eb8072da15e61f0fe85942 /arch/arm/kernel | |
parent | e11d1314d83ec7f562fa01df29878d0b1138cf00 (diff) | |
download | lwn-de880632fc02a889c0c3d2247fa08dc9e1afa228.tar.gz lwn-de880632fc02a889c0c3d2247fa08dc9e1afa228.zip |
ARM: 8705/1: early_printk: use printascii() rather than printch()
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>
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r-- | arch/arm/kernel/early_printk.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/arch/arm/kernel/early_printk.c b/arch/arm/kernel/early_printk.c index 43076536965c..9257736ec9fa 100644 --- a/arch/arm/kernel/early_printk.c +++ b/arch/arm/kernel/early_printk.c @@ -11,16 +11,20 @@ #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); } } |