* [PATCH] serial: zs: Fix a transmit lockup in console output
@ 2016-01-30 9:11 Maciej W. Rozycki
0 siblings, 0 replies; only message in thread
From: Maciej W. Rozycki @ 2016-01-30 9:11 UTC (permalink / raw)
To: Greg Kroah-Hartman; +Cc: linux-serial, linux-kernel
Transmit interrupts are disabled and the transmit buffer drained in the
course of console output so that polled transmission is possible. That
however causes a lost transmit interrupt as the TxIP bit in RR3 is only
set on a transmit buffer full-to-empty transition and then iff transmit
interrupts are enabled at the same time. Consequently if console output
disturbs a regular transmission in progress, the TxIP bit is never set
again and the transmission locks up waiting for a transmit interrupt.
Fix the problem by restarting transmission manually rather than waiting
for a transmit interrupt that will never happen.
Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org>
---
linux-mips-dec-zs-console-transmit.diff
Index: linux-20150524-4maxp64/drivers/tty/serial/zs.c
===================================================================
--- linux-20150524-4maxp64.orig/drivers/tty/serial/zs.c
+++ linux-20150524-4maxp64/drivers/tty/serial/zs.c
@@ -1181,6 +1181,10 @@ static void zs_console_write(struct cons
if (txint & TxINT_ENAB) {
zport->regs[1] |= TxINT_ENAB;
write_zsreg(zport, R1, zport->regs[1]);
+
+ /* Resume any transmission as the TxIP bit won't be set. */
+ if (!zport->tx_stopped)
+ zs_raw_transmit_chars(zport);
}
spin_unlock_irqrestore(&scc->zlock, flags);
}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2016-01-30 9:11 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-01-30 9:11 [PATCH] serial: zs: Fix a transmit lockup in console output Maciej W. Rozycki
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).