serial: 8250: Don't delay after transmitter is ready.
authorDavid Daney <ddaney@caviumnetworks.com>
Tue, 5 Oct 2010 18:40:07 +0000 (11:40 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 22 Oct 2010 17:20:06 +0000 (10:20 -0700)
The loop in wait_for_xmitr() is delaying one extra uS after the ready
condition has been met.  Rewrite the loop to only delay if the
transmitter is not ready.

Signed-off-by: David Daney <ddaney@caviumnetworks.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/serial/8250.c

index 24110f6f61e0efae9beddc0d509ba28968e73224..31b8cca179cd40fda7e267d3acb90349f461fba8 100644 (file)
@@ -1867,15 +1867,17 @@ static void wait_for_xmitr(struct uart_8250_port *up, int bits)
        unsigned int status, tmout = 10000;
 
        /* Wait up to 10ms for the character(s) to be sent. */
-       do {
+       for (;;) {
                status = serial_in(up, UART_LSR);
 
                up->lsr_saved_flags |= status & LSR_SAVE_FLAGS;
 
+               if ((status & bits) == bits)
+                       break;
                if (--tmout == 0)
                        break;
                udelay(1);
-       } while ((status & bits) != bits);
+       }
 
        /* Wait up to 1s for flow control if necessary */
        if (up->port.flags & UPF_CONS_FLOW) {