diff options
| -rw-r--r-- | Documentation/serial/driver | 4 | ||||
| -rw-r--r-- | drivers/serial/21285.c | 4 | ||||
| -rw-r--r-- | drivers/serial/8250.c | 3 | ||||
| -rw-r--r-- | drivers/serial/amba.c | 3 | ||||
| -rw-r--r-- | drivers/serial/anakin.c | 4 | ||||
| -rw-r--r-- | drivers/serial/core.c | 4 | ||||
| -rw-r--r-- | drivers/serial/sa1100.c | 3 |
7 files changed, 5 insertions, 20 deletions
diff --git a/Documentation/serial/driver b/Documentation/serial/driver index 637c89effb5b..6e06d1d4995a 100644 --- a/Documentation/serial/driver +++ b/Documentation/serial/driver @@ -138,8 +138,8 @@ hardware. Stop receiving characters; the port is in the process of being closed. - Locking: none. - Interrupts: caller dependent. + Locking: port->lock taken. + Interrupts: locally disabled. This call must not sleep enable_ms(port) diff --git a/drivers/serial/21285.c b/drivers/serial/21285.c index cc0b6ef0f1d1..f8a5a012c990 100644 --- a/drivers/serial/21285.c +++ b/drivers/serial/21285.c @@ -85,14 +85,10 @@ serial21285_start_tx(struct uart_port *port, unsigned int tty_start) static void serial21285_stop_rx(struct uart_port *port) { - unsigned long flags; - - spin_lock_irqsave(&port->lock, flags); if (rx_enabled(port)) { disable_irq(IRQ_CONRX); rx_enabled(port) = 0; } - spin_unlock_irqrestore(&port->lock, flags); } static void serial21285_enable_ms(struct uart_port *port) diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c index 8a3f86d45abc..83a16437a593 100644 --- a/drivers/serial/8250.c +++ b/drivers/serial/8250.c @@ -724,13 +724,10 @@ static void serial8250_start_tx(struct uart_port *port, unsigned int tty_start) static void serial8250_stop_rx(struct uart_port *port) { struct uart_8250_port *up = (struct uart_8250_port *)port; - unsigned long flags; - spin_lock_irqsave(&up->port.lock, flags); up->ier &= ~UART_IER_RLSI; up->port.read_status_mask &= ~UART_LSR_DR; serial_out(up, UART_IER, up->ier); - spin_unlock_irqrestore(&up->port.lock, flags); } static void serial8250_enable_ms(struct uart_port *port) diff --git a/drivers/serial/amba.c b/drivers/serial/amba.c index b350a5598663..fc4d964e55ef 100644 --- a/drivers/serial/amba.c +++ b/drivers/serial/amba.c @@ -138,14 +138,11 @@ static void ambauart_start_tx(struct uart_port *port, unsigned int tty_start) static void ambauart_stop_rx(struct uart_port *port) { - unsigned long flags; unsigned int cr; - spin_lock_irqsave(&port->lock, flags); cr = UART_GET_CR(port); cr &= ~(AMBA_UARTCR_RIE | AMBA_UARTCR_RTIE); UART_PUT_CR(port, cr); - spin_unlock_irqrestore(&port->lock, flags); } static void ambauart_enable_ms(struct uart_port *port) diff --git a/drivers/serial/anakin.c b/drivers/serial/anakin.c index dcb19b6630c9..040d6f47f391 100644 --- a/drivers/serial/anakin.c +++ b/drivers/serial/anakin.c @@ -119,13 +119,9 @@ anakin_start_tx(struct uart_port *port, unsigned int tty_start) static void anakin_stop_rx(struct uart_port *port) { - unsigned long flags; - - spin_lock_irqsave(&port->lock, flags); while (anakin_in(port, 0x10) & RXRELEASE) anakin_in(port, 0x14); anakin_out(port, 0x18, anakin_in(port, 0x18) | BLOCKRX); - spin_unlock_irqrestore(&port->lock, flags); } static void diff --git a/drivers/serial/core.c b/drivers/serial/core.c index b5910ea9d868..7fe15c45de4b 100644 --- a/drivers/serial/core.c +++ b/drivers/serial/core.c @@ -1200,7 +1200,9 @@ static void uart_close(struct tty_struct *tty, struct file *filp) * disable the receive line status interrupts. */ if (info->flags & UIF_INITIALIZED) { + spin_lock_irqsave(&port->lock, flags); port->ops->stop_rx(port); + spin_unlock_irqrestore(&port->lock, flags); /* * Before we drop DTR, make sure the UART transmitter * has completely drained; this is especially @@ -1948,8 +1950,8 @@ static int uart_pm_set_state(struct uart_state *state, int pm_state, int oldstat spin_lock_irq(&port->lock); ops->stop_tx(port, 0); ops->set_mctrl(port, 0); - spin_unlock_irq(&port->lock); ops->stop_rx(port); + spin_unlock_irq(&port->lock); ops->shutdown(port); } if (ops->pm) diff --git a/drivers/serial/sa1100.c b/drivers/serial/sa1100.c index aced0fa1b70b..0549a5fe4cd8 100644 --- a/drivers/serial/sa1100.c +++ b/drivers/serial/sa1100.c @@ -190,13 +190,10 @@ static void sa1100_start_tx(struct uart_port *port, unsigned int tty_start) static void sa1100_stop_rx(struct uart_port *port) { struct sa1100_port *sport = (struct sa1100_port *)port; - unsigned long flags; u32 utcr3; - spin_lock_irqsave(&sport->port.lock, flags); utcr3 = UART_GET_UTCR3(sport); UART_PUT_UTCR3(sport, utcr3 & ~UTCR3_RIE); - spin_unlock_irqrestore(&sport->port.lock, flags); } /* |
