]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/serial/bfin_5xx.c
Fix DMA rx ring buffer handling
[linux-2.6-omap-h63xx.git] / drivers / serial / bfin_5xx.c
index 318d69dce8e1351f72cf1c100c0eba4b508cf54f..12b11da40b494661b4adc5128d1ba3a2c6ee6c38 100644 (file)
@@ -174,10 +174,10 @@ static void bfin_serial_rx_chars(struct bfin_serial_port *uart)
                        return;
                }
 
-       if (!uart->port.info || !uart->port.info->tty)
+       if (!uart->port.info || !uart->port.info->port.tty)
                return;
 #endif
-       tty = uart->port.info->tty;
+       tty = uart->port.info->port.tty;
 
        if (ANOMALY_05000363) {
                /* The BF533 (and BF561) family of processors have a nice anomaly
@@ -401,9 +401,11 @@ static void bfin_serial_dma_rx_chars(struct bfin_serial_port *uart)
        else
                flg = TTY_NORMAL;
 
-       for (i = uart->rx_dma_buf.tail; i != uart->rx_dma_buf.head; i++) {
+       for (i = uart->rx_dma_buf.tail; ; i++) {
                if (i >= UART_XMIT_SIZE)
                        i = 0;
+               if (i == uart->rx_dma_buf.head)
+                       break;
                if (!uart_handle_sysrq_char(&uart->port, uart->rx_dma_buf.buf[i]))
                        uart_insert_char(&uart->port, status, OE,
                                uart->rx_dma_buf.buf[i], flg);
@@ -415,7 +417,8 @@ static void bfin_serial_dma_rx_chars(struct bfin_serial_port *uart)
 
 void bfin_serial_rx_dma_timeout(struct bfin_serial_port *uart)
 {
-       int x_pos, pos, flags;
+       int x_pos, pos;
+       unsigned long flags;
 
        spin_lock_irqsave(&uart->port.lock, flags);
 
@@ -1088,7 +1091,7 @@ static void
 bfin_serial_console_write(struct console *co, const char *s, unsigned int count)
 {
        struct bfin_serial_port *uart = &bfin_serial_ports[co->index];
-       int flags = 0;
+       unsigned long flags;
 
        spin_lock_irqsave(&uart->port.lock, flags);
        uart_console_write(&uart->port, s, count, bfin_serial_console_putchar);