Forráskód Böngészése

[ARM] 4417/1: Serial: Fix AMBA drivers locking

The -rt patch triggered a lockdep warning in the amba serial drivers, which never
shows up on UP kernels. On SMP systems this would trigger as well.

Release the port lock before calling tty_flip_buffer_push() and reacquire it after
the call. This matches the code in the 8250 serial driver.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Thomas Gleixner 18 éve
szülő
commit
2389b27216
2 módosított fájl, 4 hozzáadás és 2 törlés
  1. 2 1
      drivers/serial/amba-pl010.c
  2. 2 1
      drivers/serial/amba-pl011.c

+ 2 - 1
drivers/serial/amba-pl010.c

@@ -167,8 +167,9 @@ static void pl010_rx_chars(struct uart_amba_port *uap)
 	ignore_char:
 		status = readb(uap->port.membase + UART01x_FR);
 	}
+	spin_unlock(&port->lock);
 	tty_flip_buffer_push(tty);
-	return;
+	spin_lock(&port->lock);
 }
 
 static void pl010_tx_chars(struct uart_amba_port *uap)

+ 2 - 1
drivers/serial/amba-pl011.c

@@ -153,8 +153,9 @@ static void pl011_rx_chars(struct uart_amba_port *uap)
 	ignore_char:
 		status = readw(uap->port.membase + UART01x_FR);
 	}
+	spin_unlock(&uap->port.lock);
 	tty_flip_buffer_push(tty);
-	return;
+	spin_lock(&uap->port.lock);
 }
 
 static void pl011_tx_chars(struct uart_amba_port *uap)