Messages in this thread | | | Subject | RE: [PATCH] atmel_serial: Fix hang in set_termios when crtscts is enabled | Date | Mon, 8 Jun 2009 10:24:51 +0200 | From | "Eirik Aanonsen" <> |
| |
> > Fix it by removing the busy-loop altogether. > > Reported-by: Eirik Aanonsen <eaa@wprmedical.com> > Signed-off-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com> > --- > I have not tested this patch yet. Eirik, can you give it a try? > > drivers/serial/atmel_serial.c | 8 +++++--- > 1 files changed, 5 insertions(+), 3 deletions(-) > > diff --git a/drivers/serial/atmel_serial.c > b/drivers/serial/atmel_serial.c > index b3497d7..338b15c 100644 > --- a/drivers/serial/atmel_serial.c > +++ b/drivers/serial/atmel_serial.c > @@ -1104,11 +1104,13 @@ static void atmel_set_termios(struct uart_port > *port, struct ktermios *termios, > /* update the per-port timeout */ > uart_update_timeout(port, termios->c_cflag, baud); > > - /* save/disable interrupts and drain transmitter */ > + /* > + * save/disable interrupts. The tty layer will ensure that the > + * transmitter is empty if requested by the caller, so there's > + * no need to wait for it here. > + */ > imr = UART_GET_IMR(port); > UART_PUT_IDR(port, -1); > - while (!(UART_GET_CSR(port) & ATMEL_US_TXEMPTY)) > - cpu_relax(); > > /* disable receiver and transmitter */ > UART_PUT_CR(port, ATMEL_US_TXDIS | ATMEL_US_RXDIS); > -- > 1.6.0.4
Works like a charm :) Thanx. I sis not use the patch but I just Added a 0& inside the condition to the while loop.
Regards ____________________________________________________ Eirik Aanonsen SW Developer E-mail: eaa@wprmedical.com Phone: +47 90 68 11 92 Fax: +47 37 03 56 77 ____________________________________________________
| |