serial: sh-sci: Fix up break timer scheduling race.
authorPaul Mundt <lethal@linux-sh.org>
Thu, 20 Jan 2011 14:30:19 +0000 (23:30 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Thu, 20 Jan 2011 14:30:19 +0000 (23:30 +0900)
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 <lethal@linux-sh.org>
drivers/serial/sh-sci.c

index 83bf1b8..999fe5f 100644 (file)
@@ -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. */