From: Paul Mundt Date: Thu, 20 Jan 2011 14:30:19 +0000 (+0900) Subject: serial: sh-sci: Fix up break timer scheduling race. X-Git-Tag: v2.6.39-rc1~456^2~17^3~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bc9b3f5c9f3702e71066a4de0afe509a201d98b4;p=platform%2Fupstream%2Fkernel-adaptation-pc.git serial: sh-sci: Fix up break timer scheduling race. The break flag timer is presently added through add_timer() via the interrupt and error paths, where it is possible to send multiple breaks in rapid succession and trigger the timer pending BUG_ON(). This moves over to a mod_timer() instead. Signed-off-by: Paul Mundt --- diff --git a/drivers/serial/sh-sci.c b/drivers/serial/sh-sci.c index 83bf1b8..999fe5f 100644 --- a/drivers/serial/sh-sci.c +++ b/drivers/serial/sh-sci.c @@ -554,8 +554,7 @@ static void sci_receive_chars(struct uart_port *port) */ static inline void sci_schedule_break_timer(struct sci_port *port) { - port->break_timer.expires = jiffies + SCI_BREAK_JIFFIES; - add_timer(&port->break_timer); + mod_timer(&port->break_timer, jiffies + SCI_BREAK_JIFFIES); } /* Ensure that two consecutive samples find the break over. */