diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-04-20 14:40:43 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-04-20 14:40:43 -0400 |
commit | 3a5374303923a543ff3e5f491030b21836d288f5 (patch) | |
tree | 05664edf4a6f10bcb196c9e103eda60e8765334c | |
parent | 1cd653a665b08a3920e320a71b4ac5b80d36953c (diff) | |
parent | d3a7b83f865b46bb7b5e1ed18a129ce1af349db4 (diff) |
Merge tag 'tty-3.4-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty
Pull 3 tiny tty bugfixes from Greg Kroah-Hartman.
* tag 'tty-3.4-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty:
drivers/tty/amiserial.c: add missing tty_unlock
pch_uart: Fix dma channel unallocated issue
ARM: clps711x: serial driver hungs are a result of call disable_irq within ISR
-rw-r--r-- | drivers/tty/amiserial.c | 4 | ||||
-rw-r--r-- | drivers/tty/serial/clps711x.c | 14 | ||||
-rw-r--r-- | drivers/tty/serial/pch_uart.c | 4 |
3 files changed, 14 insertions, 8 deletions
diff --git a/drivers/tty/amiserial.c b/drivers/tty/amiserial.c index 24145c30c9b0..6cc4358f68c1 100644 --- a/drivers/tty/amiserial.c +++ b/drivers/tty/amiserial.c | |||
@@ -1073,8 +1073,10 @@ static int set_serial_info(struct tty_struct *tty, struct serial_state *state, | |||
1073 | (new_serial.close_delay != port->close_delay) || | 1073 | (new_serial.close_delay != port->close_delay) || |
1074 | (new_serial.xmit_fifo_size != state->xmit_fifo_size) || | 1074 | (new_serial.xmit_fifo_size != state->xmit_fifo_size) || |
1075 | ((new_serial.flags & ~ASYNC_USR_MASK) != | 1075 | ((new_serial.flags & ~ASYNC_USR_MASK) != |
1076 | (port->flags & ~ASYNC_USR_MASK))) | 1076 | (port->flags & ~ASYNC_USR_MASK))) { |
1077 | tty_unlock(); | ||
1077 | return -EPERM; | 1078 | return -EPERM; |
1079 | } | ||
1078 | port->flags = ((port->flags & ~ASYNC_USR_MASK) | | 1080 | port->flags = ((port->flags & ~ASYNC_USR_MASK) | |
1079 | (new_serial.flags & ASYNC_USR_MASK)); | 1081 | (new_serial.flags & ASYNC_USR_MASK)); |
1080 | state->custom_divisor = new_serial.custom_divisor; | 1082 | state->custom_divisor = new_serial.custom_divisor; |
diff --git a/drivers/tty/serial/clps711x.c b/drivers/tty/serial/clps711x.c index e6c3dbd781d6..836fe2731234 100644 --- a/drivers/tty/serial/clps711x.c +++ b/drivers/tty/serial/clps711x.c | |||
@@ -154,10 +154,9 @@ static irqreturn_t clps711xuart_int_tx(int irq, void *dev_id) | |||
154 | port->x_char = 0; | 154 | port->x_char = 0; |
155 | return IRQ_HANDLED; | 155 | return IRQ_HANDLED; |
156 | } | 156 | } |
157 | if (uart_circ_empty(xmit) || uart_tx_stopped(port)) { | 157 | |
158 | clps711xuart_stop_tx(port); | 158 | if (uart_circ_empty(xmit) || uart_tx_stopped(port)) |
159 | return IRQ_HANDLED; | 159 | goto disable_tx_irq; |
160 | } | ||
161 | 160 | ||
162 | count = port->fifosize >> 1; | 161 | count = port->fifosize >> 1; |
163 | do { | 162 | do { |
@@ -171,8 +170,11 @@ static irqreturn_t clps711xuart_int_tx(int irq, void *dev_id) | |||
171 | if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) | 170 | if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) |
172 | uart_write_wakeup(port); | 171 | uart_write_wakeup(port); |
173 | 172 | ||
174 | if (uart_circ_empty(xmit)) | 173 | if (uart_circ_empty(xmit)) { |
175 | clps711xuart_stop_tx(port); | 174 | disable_tx_irq: |
175 | disable_irq_nosync(TX_IRQ(port)); | ||
176 | tx_enabled(port) = 0; | ||
177 | } | ||
176 | 178 | ||
177 | return IRQ_HANDLED; | 179 | return IRQ_HANDLED; |
178 | } | 180 | } |
diff --git a/drivers/tty/serial/pch_uart.c b/drivers/tty/serial/pch_uart.c index bbbec4a74cfb..c2816f494807 100644 --- a/drivers/tty/serial/pch_uart.c +++ b/drivers/tty/serial/pch_uart.c | |||
@@ -1447,9 +1447,11 @@ static int pch_uart_verify_port(struct uart_port *port, | |||
1447 | __func__); | 1447 | __func__); |
1448 | return -EOPNOTSUPP; | 1448 | return -EOPNOTSUPP; |
1449 | #endif | 1449 | #endif |
1450 | priv->use_dma = 1; | ||
1451 | priv->use_dma_flag = 1; | 1450 | priv->use_dma_flag = 1; |
1452 | dev_info(priv->port.dev, "PCH UART : Use DMA Mode\n"); | 1451 | dev_info(priv->port.dev, "PCH UART : Use DMA Mode\n"); |
1452 | if (!priv->use_dma) | ||
1453 | pch_request_dma(port); | ||
1454 | priv->use_dma = 1; | ||
1453 | } | 1455 | } |
1454 | 1456 | ||
1455 | return 0; | 1457 | return 0; |