[PATCH] Fix a potential issue in mpc52xx uart driver

Grant Likely grant.likely at secretlab.ca
Fri May 2 04:07:06 EST 2008


On Tue, Apr 29, 2008 at 1:36 AM, Andrew Liu <shengping.liu at windriver.com> wrote:
> mpc52xx_uart_int and __uart_put_char both try to acquire the
>  port->lock. Therefore the function sequence of:
>
>  mpc52xx_uart_int--> ...-->flush_to_ldisc-->...-->__uart_put_char
>
>  can potentially trigger a deadlock. To avoid this deadlock a fix
>  similar to that found in the 8250.c serial driver is applied. The
>  deadlock is avoided by releasing the lock before pushing a buffer
>  and reacquiring it when completed.
>
>  Signed-off-by: Andrew Liu <shengping.liu at windriver.com>

Your patch is whitespace damaged and does not apply (tabs have been
converted to spaces).  It was trivial so I've applied it manually, but
please be careful when posting future patches.

Thanks,
g.

>
>  diff --git a/drivers/serial/mpc52xx_uart.c b/drivers/serial/mpc52xx_uart.c
>  index d93b357..5f95e53 100644
>  --- a/drivers/serial/mpc52xx_uart.c
>  +++ b/drivers/serial/mpc52xx_uart.c
>  @@ -783,7 +783,9 @@ mpc52xx_uart_int_rx_chars(struct uart_port *port)
>                 }
>         }
>
>  +       spin_unlock(&port->lock);
>         tty_flip_buffer_push(tty);
>  +       spin_lock(&port->lock);
>
>         return psc_ops->raw_rx_rdy(port);
>   }
>



-- 
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.



More information about the Linuxppc-dev mailing list