diff options
author | Jiri Slaby <jslaby@suse.cz> | 2013-01-03 09:53:06 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-01-16 01:30:15 -0500 |
commit | 2e124b4a390ca85325fae75764bef92f0547fa25 (patch) | |
tree | 5519fbcdbe954e79b271ea6d31ac5a4dc754c4f5 /drivers/tty/serial/pch_uart.c | |
parent | d6c53c0e9bd0a83f9f9ddbc9fd80141a54d83896 (diff) |
TTY: switch tty_flip_buffer_push
Now, we start converting tty buffer functions to actually use
tty_port. This will allow us to get rid of the need of tty in many
call sites. Only tty_port will needed and hence no more
tty_port_tty_get in those paths.
Now, the one where most of tty_port_tty_get gets removed:
tty_flip_buffer_push.
IOW we also closed all the races in drivers not using tty_port_tty_get
at all yet.
Also we move tty_flip_buffer_push declaration from include/linux/tty.h
to include/linux/tty_flip.h to all others while we are changing it
anyway.
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/tty/serial/pch_uart.c')
-rw-r--r-- | drivers/tty/serial/pch_uart.c | 19 |
1 files changed, 2 insertions, 17 deletions
diff --git a/drivers/tty/serial/pch_uart.c b/drivers/tty/serial/pch_uart.c index 967f1cb311f3..8b40a1fc9681 100644 --- a/drivers/tty/serial/pch_uart.c +++ b/drivers/tty/serial/pch_uart.c | |||
@@ -593,17 +593,9 @@ static int push_rx(struct eg20t_port *priv, const unsigned char *buf, | |||
593 | { | 593 | { |
594 | struct uart_port *port = &priv->port; | 594 | struct uart_port *port = &priv->port; |
595 | struct tty_port *tport = &port->state->port; | 595 | struct tty_port *tport = &port->state->port; |
596 | struct tty_struct *tty; | ||
597 | |||
598 | tty = tty_port_tty_get(tport); | ||
599 | if (!tty) { | ||
600 | dev_dbg(priv->port.dev, "%s:tty is busy now", __func__); | ||
601 | return -EBUSY; | ||
602 | } | ||
603 | 596 | ||
604 | tty_insert_flip_string(tport, buf, size); | 597 | tty_insert_flip_string(tport, buf, size); |
605 | tty_flip_buffer_push(tty); | 598 | tty_flip_buffer_push(tport); |
606 | tty_kref_put(tty); | ||
607 | 599 | ||
608 | return 0; | 600 | return 0; |
609 | } | 601 | } |
@@ -744,19 +736,12 @@ static void pch_dma_rx_complete(void *arg) | |||
744 | { | 736 | { |
745 | struct eg20t_port *priv = arg; | 737 | struct eg20t_port *priv = arg; |
746 | struct uart_port *port = &priv->port; | 738 | struct uart_port *port = &priv->port; |
747 | struct tty_struct *tty = tty_port_tty_get(&port->state->port); | ||
748 | int count; | 739 | int count; |
749 | 740 | ||
750 | if (!tty) { | ||
751 | dev_dbg(priv->port.dev, "%s:tty is busy now", __func__); | ||
752 | return; | ||
753 | } | ||
754 | |||
755 | dma_sync_sg_for_cpu(port->dev, &priv->sg_rx, 1, DMA_FROM_DEVICE); | 741 | dma_sync_sg_for_cpu(port->dev, &priv->sg_rx, 1, DMA_FROM_DEVICE); |
756 | count = dma_push_rx(priv, priv->trigger_level); | 742 | count = dma_push_rx(priv, priv->trigger_level); |
757 | if (count) | 743 | if (count) |
758 | tty_flip_buffer_push(tty); | 744 | tty_flip_buffer_push(&port->state->port); |
759 | tty_kref_put(tty); | ||
760 | async_tx_ack(priv->desc_rx); | 745 | async_tx_ack(priv->desc_rx); |
761 | pch_uart_hal_enable_interrupt(priv, PCH_UART_HAL_RX_INT | | 746 | pch_uart_hal_enable_interrupt(priv, PCH_UART_HAL_RX_INT | |
762 | PCH_UART_HAL_RX_ERR_INT); | 747 | PCH_UART_HAL_RX_ERR_INT); |