[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] Drop characters if an asynchronous serial tx buffer fills up.



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1208956655 -3600
# Node ID 64c0014ae75787eddb7da44c9cbbbed53e85385f
# Parent  a7ddd6bcd564965af54a9df236d89503a76923e1
Drop characters if an asynchronous serial tx buffer fills up.
Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
 xen/drivers/char/serial.c |   15 ++++++++++-----
 1 files changed, 10 insertions(+), 5 deletions(-)

diff -r a7ddd6bcd564 -r 64c0014ae757 xen/drivers/char/serial.c
--- a/xen/drivers/char/serial.c Wed Apr 23 14:06:51 2008 +0100
+++ b/xen/drivers/char/serial.c Wed Apr 23 14:17:35 2008 +0100
@@ -15,6 +15,9 @@
 #include <xen/mm.h>
 #include <xen/serial.h>
 
+/* Never drop characters, even if the async transmit buffer fills. */
+/* #define SERIAL_NEVER_DROP_CHARS 1 */
+
 unsigned int serial_txbufsz = 16384;
 static void __init parse_serial_tx_buffer(const char *s)
 {
@@ -91,22 +94,24 @@ void serial_tx_interrupt(struct serial_p
 
 static void __serial_putc(struct serial_port *port, char c)
 {
-    int i;
-
     if ( (port->txbuf != NULL) && !port->sync )
     {
         /* Interrupt-driven (asynchronous) transmitter. */
+#ifdef SERIAL_NEVER_DROP_CHARS
         if ( (port->txbufp - port->txbufc) == serial_txbufsz )
         {
-            /* Buffer is full: we spin, but could alternatively drop chars. */
+            /* Buffer is full: we spin waiting for space to appear. */
+            int i;
             while ( !port->driver->tx_empty(port) )
                 cpu_relax();
             for ( i = 0; i < port->tx_fifo_size; i++ )
                 port->driver->putc(
                     port, port->txbuf[mask_serial_txbuf_idx(port->txbufc++)]);
             port->txbuf[mask_serial_txbuf_idx(port->txbufp++)] = c;
-        }
-        else if ( ((port->txbufp - port->txbufc) == 0) &&
+            return;
+        }
+#endif
+        if ( ((port->txbufp - port->txbufc) == 0) &&
                   port->driver->tx_empty(port) )
         {
             /* Buffer and UART FIFO are both empty. */

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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.