Re: [PATCH] Fix a potential issue in mpc52xx uart driver
From: Grant Likely <hidden>
Date: 2008-05-01 18:07:07
On Tue, Apr 29, 2008 at 1:36 AM, Andrew Liu [off-list ref] 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 [off-list ref]
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.