diff mbox series

xen/console: introduce is_console_printable()

Message ID 20250207005532.345746-1-dmkhn@proton.me (mailing list archive)
State Superseded
Headers show
Series xen/console: introduce is_console_printable() | expand

Commit Message

Denis Mukhin Feb. 7, 2025, 12:58 a.m. UTC
From: Denis Mukhin <dmukhin@ford.com>

Add is_console_printable() to implement a common check for printable characters
in the UART emulation and guest logging code.

Signed-off-by: Denis Mukhin <dmukhin@ford.com>
---
Link to the original patch:
  https://lore.kernel.org/xen-devel/20250103-vuart-ns8250-v3-v1-1-c5d36b31d66c@ford.com/
---
---
 xen/arch/arm/vuart.c       | 5 ++---
 xen/arch/x86/hvm/hvm.c     | 5 ++---
 xen/drivers/char/console.c | 3 +--
 xen/include/xen/console.h  | 6 ++++++
 4 files changed, 11 insertions(+), 8 deletions(-)

Comments

Stefano Stabellini Feb. 7, 2025, 1:57 a.m. UTC | #1
On Fri, 7 Feb 2025, dmkhn@proton.me wrote:
> From: Denis Mukhin <dmukhin@ford.com>
> 
> Add is_console_printable() to implement a common check for printable characters
> in the UART emulation and guest logging code.
> 
> Signed-off-by: Denis Mukhin <dmukhin@ford.com>

Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
Jan Beulich Feb. 7, 2025, 8:51 a.m. UTC | #2
On 07.02.2025 01:58, dmkhn@proton.me wrote:
> --- a/xen/include/xen/console.h
> +++ b/xen/include/xen/console.h
> @@ -8,6 +8,7 @@
>  #define __CONSOLE_H__
>  
>  #include <xen/inttypes.h>
> +#include <xen/ctype.h>
>  #include <public/xen.h>
>  
>  struct xen_sysctl_readconsole;
> @@ -50,4 +51,9 @@ void console_serial_puts(const char *s, size_t nr);
>  
>  extern int8_t opt_console_xen;
>  
> +static inline bool is_console_printable(unsigned char c)
> +{
> +	return isprint(c) || c == '\n' || c == '\t';

Nit: Unlike ctype.h, console.h has no indication of using Linux style.
Hence when moving the function here the hard tab should have been
switched to four blanks. Can likely be adjusted while committing.

Jan
diff mbox series

Patch

diff --git a/xen/arch/arm/vuart.c b/xen/arch/arm/vuart.c
index d5ba483f1e..bd2f425214 100644
--- a/xen/arch/arm/vuart.c
+++ b/xen/arch/arm/vuart.c
@@ -24,7 +24,7 @@ 
 #include <xen/lib.h>
 #include <xen/sched.h>
 #include <xen/errno.h>
-#include <xen/ctype.h>
+#include <xen/console.h>
 #include <xen/serial.h>
 #include <asm/mmio.h>
 #include <xen/perfc.h>
@@ -79,8 +79,7 @@  static void vuart_print_char(struct vcpu *v, char c)
     struct domain *d = v->domain;
     struct vuart *uart = &d->arch.vuart;
 
-    /* Accept only printable characters, newline, and horizontal tab. */
-    if ( !isprint(c) && (c != '\n') && (c != '\t') )
+    if ( !is_console_printable(c) )
         return ;
 
     spin_lock(&uart->lock);
diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
index 39e39ce4ce..219028969a 100644
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -7,7 +7,6 @@ 
  * Copyright (c) 2008, Citrix Systems, Inc.
  */
 
-#include <xen/ctype.h>
 #include <xen/init.h>
 #include <xen/ioreq.h>
 #include <xen/lib.h>
@@ -30,6 +29,7 @@ 
 #include <xen/vpci.h>
 #include <xen/nospec.h>
 #include <xen/vm_event.h>
+#include <xen/console.h>
 #include <asm/shadow.h>
 #include <asm/hap.h>
 #include <asm/current.h>
@@ -561,8 +561,7 @@  static int cf_check hvm_print_line(
     if ( dir != IOREQ_WRITE )
         return X86EMUL_UNHANDLEABLE;
 
-    /* Accept only printable characters, newline, and horizontal tab. */
-    if ( !isprint(c) && (c != '\n') && (c != '\t') )
+    if ( !is_console_printable(c) )
         return X86EMUL_OKAY;
 
     spin_lock(&cd->pbuf_lock);
diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c
index 7da8c5296f..b4cec77247 100644
--- a/xen/drivers/char/console.c
+++ b/xen/drivers/char/console.c
@@ -24,7 +24,6 @@ 
 #include <xen/shutdown.h>
 #include <xen/video.h>
 #include <xen/kexec.h>
-#include <xen/ctype.h>
 #include <xen/warning.h>
 #include <asm/div64.h>
 #include <xen/hypercall.h> /* for do_console_io */
@@ -674,7 +673,7 @@  static long guest_console_write(XEN_GUEST_HANDLE_PARAM(char) buffer,
                 c = *kin++;
                 if ( c == '\n' )
                     break;
-                if ( isprint(c) || c == '\t' )
+                if ( is_console_printable(c) )
                     *kout++ = c;
             } while ( --kcount > 0 );
 
diff --git a/xen/include/xen/console.h b/xen/include/xen/console.h
index 6dfbade3ec..eac6525c30 100644
--- a/xen/include/xen/console.h
+++ b/xen/include/xen/console.h
@@ -8,6 +8,7 @@ 
 #define __CONSOLE_H__
 
 #include <xen/inttypes.h>
+#include <xen/ctype.h>
 #include <public/xen.h>
 
 struct xen_sysctl_readconsole;
@@ -50,4 +51,9 @@  void console_serial_puts(const char *s, size_t nr);
 
 extern int8_t opt_console_xen;
 
+static inline bool is_console_printable(unsigned char c)
+{
+	return isprint(c) || c == '\n' || c == '\t';
+}
+
 #endif /* __CONSOLE_H__ */