lkml.org 
[lkml]   [2009]   [Jun]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRE: [PATCH] atmel_serial: Fix hang in set_termios when crtscts is enabled
Date
From
> 
> 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
____________________________________________________





\
 
 \ /
  Last update: 2009-06-08 10:33    [W:0.031 / U:0.232 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site