aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--xen/drivers/char/serial.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/xen/drivers/char/serial.c b/xen/drivers/char/serial.c
index bec789e084..ad5ad5cde0 100644
--- a/xen/drivers/char/serial.c
+++ b/xen/drivers/char/serial.c
@@ -176,11 +176,15 @@ char serial_getc(int handle)
if ( port->rxbufp != port->rxbufc )
{
c = port->rxbuf[MASK_SERIAL_RXBUF_IDX(port->rxbufc++)];
+ spin_unlock_irqrestore(&port->lock, flags);
break;
}
if ( port->driver->getc(port, &c) )
+ {
+ spin_unlock_irqrestore(&port->lock, flags);
break;
+ }
spin_unlock_irqrestore(&port->lock, flags);