Revert "serial: omap: unlock the port lock"
authorFelipe Balbi <balbi@ti.com>
Wed, 23 Apr 2014 14:58:27 +0000 (09:58 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 24 Apr 2014 23:16:33 +0000 (16:16 -0700)
This reverts commit 0324a821029e1f54e7a7f8fed48693cfce42dc0e.

That commit tried to fix a deadlock problem when using
hci_ldisc, but it turns out the bug was in hci_ldsic
all along where it was calling ->write() from within
->write_wakeup() callback.

The problem is that ->write_wakeup() was called with
port lock held and ->write() tried to grab the same
port lock.

Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/omap-serial.c

index 08b6b9419f0d042aaf478127dfde959e5c4216c1..837f6c1c8e7a7c730aa47e3ddb6ebffccd23d4a1 100644 (file)
@@ -398,11 +398,8 @@ static void transmit_chars(struct uart_omap_port *up, unsigned int lsr)
                        break;
        } while (--count > 0);
 
-       if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) {
-               spin_unlock(&up->port.lock);
+       if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
                uart_write_wakeup(&up->port);
-               spin_lock(&up->port.lock);
-       }
 
        if (uart_circ_empty(xmit))
                serial_omap_stop_tx(&up->port);