TTY: sn_console: Replace spin_is_locked() with spin_trylock()
authorLance Roy <ldr709@gmail.com>
Thu, 4 Oct 2018 07:14:04 +0000 (00:14 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 4 Oct 2018 18:06:35 +0000 (11:06 -0700)
sn_sal_console_write() used spin_is_locked() + spin_lock() to get
achieve the same thing as a spin_trylock(), so simplify it by using that
instead. This is also a step towards possibly removing spin_is_locked().

Signed-off-by: Lance Roy <ldr709@gmail.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Jiri Slaby <jslaby@suse.com>
Cc: <linux-serial@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/sn_console.c

index 42b9aded4eb1c6d47a9795d743a27af9627fa563..fe9170731c167a4f09ee0f60047de1ca46f05834 100644 (file)
@@ -888,7 +888,7 @@ sn_sal_console_write(struct console *co, const char *s, unsigned count)
 
        /* somebody really wants this output, might be an
         * oops, kdb, panic, etc.  make sure they get it. */
-       if (spin_is_locked(&port->sc_port.lock)) {
+       if (!spin_trylock_irqsave(&port->sc_port.lock, flags)) {
                int lhead = port->sc_port.state->xmit.head;
                int ltail = port->sc_port.state->xmit.tail;
                int counter, got_lock = 0;
@@ -905,13 +905,11 @@ sn_sal_console_write(struct console *co, const char *s, unsigned count)
                 */
 
                for (counter = 0; counter < 150; mdelay(125), counter++) {
-                       if (!spin_is_locked(&port->sc_port.lock)
-                           || stole_lock) {
-                               if (!stole_lock) {
-                                       spin_lock_irqsave(&port->sc_port.lock,
-                                                         flags);
-                                       got_lock = 1;
-                               }
+                       if (stole_lock)
+                               break;
+
+                       if (spin_trylock_irqsave(&port->sc_port.lock, flags)) {
+                               got_lock = 1;
                                break;
                        } else {
                                /* still locked */
@@ -938,7 +936,6 @@ sn_sal_console_write(struct console *co, const char *s, unsigned count)
                puts_raw_fixed(port->sc_ops->sal_puts_raw, s, count);
        } else {
                stole_lock = 0;
-               spin_lock_irqsave(&port->sc_port.lock, flags);
                sn_transmit_chars(port, 1);
                spin_unlock_irqrestore(&port->sc_port.lock, flags);