Hi! > commit 277375b864e8147975b064b513f491e2a910e66a upstream > > In case the cable is not connected then the target gets into > an infinite wait for tx empty. > Add a timeout to the tx empty wait. Was this tested? Because it does not work... > Reported-by: Jean-Francois Dagenais <jeff.dagenais@xxxxxxxxx> > Signed-off-by: Shubhrajyoti Datta <shubhrajyoti.datta@xxxxxxxxxx> > Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > Cc: stable <stable@xxxxxxxxxxxxxxx> # 4.19 > Signed-off-by: Mathieu Poirier <mathieu.poirier@xxxxxxxxxx> > Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx> > @@ -681,16 +683,20 @@ static void cdns_uart_set_termios(struct uart_port *port, ... > + int err; > > spin_lock_irqsave(&port->lock, flags); > > /* Wait for the transmit FIFO to empty before making changes */ > if (!(readl(port->membase + CDNS_UART_CR) & > CDNS_UART_CR_TX_DIS)) { > - while (!(readl(port->membase + CDNS_UART_SR) & > - CDNS_UART_SR_TXEMPTY)) { > - cpu_relax(); > + err = readl_poll_timeout(port->membase + CDNS_UART_SR, > + val, (val & CDNS_UART_SR_TXEMPTY), > + 1000, TX_TIMEOUT); > + if (err) { > + dev_err(port->dev, "timed out waiting for tx empty"); > + return; > } > } > It will return with lock held and interrupts disabled. Mainline takes spinlock later, so it does not have a problem. Merging 107475685abfdee504bb0ef4824f15797f6d2d4d before this one should fix the problem. Best regards, Pavel -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Attachment:
signature.asc
Description: Digital signature