--- xen-unstable.hg/xen/drivers/char/serial.c 2007-12-19 14:18:45.000000000 -0800 +++ xen-unstable.hg.new/xen/drivers/char/serial.c 2007-12-19 09:21:29.000000000 -0800 @@ -126,6 +126,7 @@ { struct serial_port *port; unsigned long flags; + char cr; if ( handle == -1 ) return; @@ -137,7 +138,12 @@ spin_lock_irqsave(&port->tx_lock, flags); if ( (c == '\n') && (handle & SERHND_COOKED) ) - __serial_putc(port, '\r'); + { + cr = '\r'; + if ( handle & SERHND_HI ) + cr |= 0x80; + __serial_putc(port, cr); + } if ( handle & SERHND_HI ) c |= 0x80; @@ -153,7 +159,7 @@ { struct serial_port *port; unsigned long flags; - char c; + char c, cr; if ( handle == -1 ) return; @@ -167,7 +173,12 @@ while ( (c = *s++) != '\0' ) { if ( (c == '\n') && (handle & SERHND_COOKED) ) - __serial_putc(port, '\r'); + { + cr = '\r'; + if ( handle & SERHND_HI ) + cr |= 0x80; + __serial_putc(port, cr); + } if ( handle & SERHND_HI ) c |= 0x80;