WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] Add a xencons_bufsz= option to allow a larger than usual

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Add a xencons_bufsz= option to allow a larger than usual console
From: BitKeeper Bot <riel@xxxxxxxxxxx>
Date: Thu, 14 Apr 2005 23:30:47 +0000
Delivery-date: Fri, 15 Apr 2005 00:02:35 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: Xen Development List <xen-devel@xxxxxxxxxxxxxxxxxxx>
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
ChangeSet 1.1159.256.94, 2005/04/15 00:30:47+01:00, kaf24@xxxxxxxxxxxxxxxxxxxx

        Add a xencons_bufsz= option to allow a larger than usual console
        buffer to be allocated. Reduces chance of console output being
        truncated.
        Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>



 console.c |   37 +++++++++++++++++++++++++------------
 1 files changed, 25 insertions(+), 12 deletions(-)


diff -Nru a/linux-2.6.11-xen-sparse/drivers/xen/console/console.c 
b/linux-2.6.11-xen-sparse/drivers/xen/console/console.c
--- a/linux-2.6.11-xen-sparse/drivers/xen/console/console.c     2005-04-14 
20:02:47 -04:00
+++ b/linux-2.6.11-xen-sparse/drivers/xen/console/console.c     2005-04-14 
20:02:47 -04:00
@@ -44,6 +44,7 @@
 #include <linux/slab.h>
 #include <linux/init.h>
 #include <linux/console.h>
+#include <linux/bootmem.h>
 #include <asm/io.h>
 #include <asm/irq.h>
 #include <asm/uaccess.h>
@@ -77,11 +78,21 @@
 __setup("xencons=", xencons_setup);
 
 /* The kernel and user-land drivers share a common transmit buffer. */
-#define WBUF_SIZE     4096
-#define WBUF_MASK(_i) ((_i)&(WBUF_SIZE-1))
-static char wbuf[WBUF_SIZE];
+static unsigned int wbuf_size = 4096;
+#define WBUF_MASK(_i) ((_i)&(wbuf_size-1))
+static char *wbuf;
 static unsigned int wc, wp; /* write_cons, write_prod */
 
+static int __init xencons_bufsz_setup(char *str)
+{
+    unsigned int goal;
+    goal = simple_strtoul(str, NULL, 0);
+    while ( wbuf_size < goal )
+        wbuf_size <<= 1;
+    return 1;
+}
+__setup("xencons_bufsz=", xencons_bufsz_setup);
+
 /* This lock protects accesses to the common transmit buffer. */
 static spinlock_t xencons_lock = SPIN_LOCK_UNLOCKED;
 
@@ -114,7 +125,7 @@
     
     for ( i = 0; i < count; i++ )
     {
-        if ( (wp - wc) >= (WBUF_SIZE - 1) )
+        if ( (wp - wc) >= (wbuf_size - 1) )
             break;
         if ( (wbuf[WBUF_MASK(wp++)] = s[i]) == '\n' )
             wbuf[WBUF_MASK(wp++)] = '\r';
@@ -195,6 +206,8 @@
     else
         strcpy(kcons_info.name, "tty");
 
+    wbuf = alloc_bootmem(wbuf_size);
+
     register_console(&kcons_info);
     return __RETCODE;
 }
@@ -246,8 +259,8 @@
             continue;
         if ( sz > sizeof(msg.msg) )
             sz = sizeof(msg.msg);
-        if ( sz > (WBUF_SIZE - WBUF_MASK(wc)) )
-            sz = WBUF_SIZE - WBUF_MASK(wc);
+        if ( sz > (wbuf_size - WBUF_MASK(wc)) )
+            sz = wbuf_size - WBUF_MASK(wc);
 
         msg.type    = CMSG_CONSOLE;
         msg.subtype = CMSG_CONSOLE_DATA;
@@ -315,8 +328,8 @@
         while ( wc != wp )
         {
             sz = wp - wc;
-            if ( sz > (WBUF_SIZE - WBUF_MASK(wc)) )
-                sz = WBUF_SIZE - WBUF_MASK(wc);
+            if ( sz > (wbuf_size - WBUF_MASK(wc)) )
+                sz = wbuf_size - WBUF_MASK(wc);
             kcons_write_dom0(NULL, &wbuf[WBUF_MASK(wc)], sz);
             wc += sz;
             work_done = 1;
@@ -344,8 +357,8 @@
             sz = wp - wc;
             if ( sz > sizeof(msg.msg) )
                 sz = sizeof(msg.msg);
-            if ( sz > (WBUF_SIZE - WBUF_MASK(wc)) )
-                sz = WBUF_SIZE - WBUF_MASK(wc);
+            if ( sz > (wbuf_size - WBUF_MASK(wc)) )
+                sz = wbuf_size - WBUF_MASK(wc);
 
             msg.type    = CMSG_CONSOLE;
             msg.subtype = CMSG_CONSOLE_DATA;
@@ -409,7 +422,7 @@
 
 static int xencons_write_room(struct tty_struct *tty)
 {
-    return WBUF_SIZE - (wp - wc);
+    return wbuf_size - (wp - wc);
 }
 
 static int xencons_chars_in_buffer(struct tty_struct *tty)
@@ -468,7 +481,7 @@
 static inline int __xencons_put_char(int ch)
 {
     char _ch = (char)ch;
-    if ( (wp - wc) == WBUF_SIZE )
+    if ( (wp - wc) == wbuf_size )
         return 0;
     wbuf[WBUF_MASK(wp++)] = _ch;
     return 1;

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>