[PATCH 3/3] ARM: early_printk: use printascii() rather than printch()

Uwe Kleine-König u.kleine-koenig at pengutronix.de
Sun Oct 1 22:20:32 PDT 2017


Hello Nicolas,

On Sun, Oct 01, 2017 at 10:06:18PM -0400, Nicolas Pitre wrote:
> 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

s/danse/dance/ ?

> 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 at linaro.org>
> ---
>  arch/arm/kernel/early_printk.c | 16 ++++++++++------
>  1 file changed, 10 insertions(+), 6 deletions(-)
> 
> diff --git a/arch/arm/kernel/early_printk.c b/arch/arm/kernel/early_printk.c
> index 4307653696..9257736ec9 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);

I wonder if it is a usual case that n < 128 and s[n] == '\0'. If so this
could be tested for and then the memcpy could be dropped.
(The downside of course is that s[n] might also be something completely
different?)

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |



More information about the linux-arm-kernel mailing list