[PATCH v5 6/6] xen/console: add conring buffer size alignment setting

dmukhin@xen.org posted 6 patches 2 days, 3 hours ago
[PATCH v5 6/6] xen/console: add conring buffer size alignment setting
Posted by dmukhin@xen.org 2 days, 3 hours ago
From: Denis Mukhin <dmukhin@ford.com> 

Introduce CONFIG_CONRING_ALIGN_PAGE_SIZE to control rounding down of the
user-defined conring buffer size.

Also, update the logline reporting the final conring buffer size to report
bytes instead of kilobytes, since the user-defined size may not necessarily
be kilobyte-alined.

Suggested-by: Andrew Cooper <andrew.cooper3@citrix.com>
Signed-off-by: Denis Mukhin <dmukhin@ford.com>
---
Changes since v4:
- new patch
---
 xen/drivers/char/Kconfig   |  7 +++++++
 xen/drivers/char/console.c | 15 +++++++++------
 2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/xen/drivers/char/Kconfig b/xen/drivers/char/Kconfig
index d083ba4c9cdf..1b96fbc3ed7c 100644
--- a/xen/drivers/char/Kconfig
+++ b/xen/drivers/char/Kconfig
@@ -95,6 +95,13 @@ config SERIAL_TX_BUFSIZE
 
 	  Default value is 32768 (32KiB).
 
+config CONRING_ALIGN_PAGE_SIZE
+	bool
+	default y
+	help
+	  This selects the console ring buffer size alignment (rounding down)
+	  to a multiple of PAGE_SIZE.
+
 config CONRING_SHIFT
 	int "Console ring buffer size (power of 2)"
 	range 14 27
diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c
index 9394ab2a89eb..c13818715a52 100644
--- a/xen/drivers/char/console.c
+++ b/xen/drivers/char/console.c
@@ -470,12 +470,15 @@ void __init console_init_ring(void)
         return;
 
     opt_conring_size = max(opt_conring_size, conring_size);
-    size = ROUNDDOWN(opt_conring_size, PAGE_SIZE);
-    if ( size != opt_conring_size )
+    if ( IS_ENABLED(CONFIG_CONRING_ALIGN_PAGE_SIZE) )
     {
-        opt_conring_size = size;
-        printk(XENLOG_WARNING "Rounding down console ring size to multiple of %lu KiB.\n",
-               PAGE_SIZE >> 10);
+        size = ROUNDDOWN(opt_conring_size, PAGE_SIZE);
+        if ( size != opt_conring_size )
+        {
+            opt_conring_size = size;
+            printk(XENLOG_WARNING "Rounding down console ring size to multiple of %lu KiB.\n",
+                   PAGE_SIZE >> 10);
+        }
     }
     if ( opt_conring_size >= GB(2) )
     {
@@ -512,7 +515,7 @@ void __init console_init_ring(void)
 
     nrspin_unlock_irqrestore(&console_lock, flags);
 
-    printk("Allocated console ring of %u KiB.\n", opt_conring_size >> 10);
+    printk("Allocated console ring of %u bytes.\n", opt_conring_size);
 }
 
 /*
-- 
2.52.0