|
|
|
|
|
|
|
|
|
|
xen-devel
[Xen-devel] [PATCH] ns16550: fix poll handling regression
Prior to c/s 23811:f1349a968a5a LSR_THRE was checked only once, while
there it got promoted into the surrounding loop's condition. Since that
bit may not clear for an extended period of time (i.e. when no new
output is generated), it must not be used in this way indefinitely.
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
--- a/xen/drivers/char/ns16550.c
+++ b/xen/drivers/char/ns16550.c
@@ -157,15 +157,18 @@ static void __ns16550_poll(struct cpu_us
{
struct serial_port *port = this_cpu(poll_port);
struct ns16550 *uart = port->uart;
- char lsr;
+ unsigned char lsr, mask = LSR_DR | LSR_THRE;
if ( uart->intr_works )
return; /* Interrupts work - no more polling */
- while ( (lsr = ns_read_reg(uart, LSR)) & (LSR_DR|LSR_THRE) )
+ while ( (lsr = ns_read_reg(uart, LSR)) & mask )
{
if ( lsr & LSR_THRE )
+ {
serial_tx_interrupt(port, regs);
+ mask &= ~LSR_THRE;
+ }
if ( lsr & LSR_DR )
serial_rx_interrupt(port, regs);
}
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
<Prev in Thread] |
Current Thread |
[Next in Thread>
|
- [Xen-devel] [PATCH] ns16550: fix poll handling regression,
Jan Beulich <=
|
|
|
|
|