]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
serial: core: don't check port twice in a row
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Thu, 24 Nov 2016 12:18:55 +0000 (14:18 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 28 Nov 2016 07:29:34 +0000 (08:29 +0100)
There is no need to check port for NULL in uart_port_deref() since we call it
only when port is defined.

There are few places that violate this. Fix them here as well.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/serial_core.c

index f2303f390345e14664f31976662f7c804fbbb9d9..d0847375ea64891e44de5aa44505e43aa62c6b86 100644 (file)
@@ -73,7 +73,7 @@ static inline struct uart_port *uart_port_ref(struct uart_state *state)
 
 static inline void uart_port_deref(struct uart_port *uport)
 {
-       if (uport && atomic_dec_and_test(&uport->state->refcount))
+       if (atomic_dec_and_test(&uport->state->refcount))
                wake_up(&uport->state->remove_wait);
 }
 
@@ -88,9 +88,10 @@ static inline void uart_port_deref(struct uart_port *uport)
 #define uart_port_unlock(uport, flags)                                 \
        ({                                                              \
                struct uart_port *__uport = uport;                      \
-               if (__uport)                                            \
+               if (__uport) {                                          \
                        spin_unlock_irqrestore(&__uport->lock, flags);  \
-               uart_port_deref(__uport);                               \
+                       uart_port_deref(__uport);                       \
+               }                                                       \
        })
 
 static inline struct uart_port *uart_port_check(struct uart_state *state)
@@ -1515,7 +1516,10 @@ static void uart_wait_until_sent(struct tty_struct *tty, int timeout)
        unsigned long char_time, expire;
 
        port = uart_port_ref(state);
-       if (!port || port->type == PORT_UNKNOWN || port->fifosize == 0) {
+       if (!port)
+               return;
+
+       if (port->type == PORT_UNKNOWN || port->fifosize == 0) {
                uart_port_deref(port);
                return;
        }
@@ -2365,9 +2369,10 @@ static int uart_poll_get_char(struct tty_driver *driver, int line)
 
        if (state) {
                port = uart_port_ref(state);
-               if (port)
+               if (port) {
                        ret = port->ops->poll_get_char(port);
-               uart_port_deref(port);
+                       uart_port_deref(port);
+               }
        }
        return ret;
 }