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);