Commit 0fd60b68 authored by Jiri Slaby (SUSE)'s avatar Jiri Slaby (SUSE) Committed by Greg Kroah-Hartman
Browse files

serial: introduce uart_port_lock() guard()s



Having this, guards like these work:
  guard(uart_port_lock_irq)(&up->port);
or
  scoped_guard(uart_port_lock_irqsave, port) {
    ...
  }

See e.g. "serial: 8250: use guard()s" later in this series.

Signed-off-by: default avatar"Jiri Slaby (SUSE)" <jirislaby@kernel.org>
Link: https://lore.kernel.org/r/20250814072456.182853-4-jirislaby@kernel.org


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent e8398b8a
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -788,6 +788,19 @@ static inline void uart_port_unlock_irqrestore(struct uart_port *up, unsigned lo
	spin_unlock_irqrestore(&up->lock, flags);
}

DEFINE_GUARD(uart_port_lock, struct uart_port *, uart_port_lock(_T), uart_port_unlock(_T));
DEFINE_GUARD_COND(uart_port_lock, _try, uart_port_trylock(_T));

DEFINE_GUARD(uart_port_lock_irq, struct uart_port *, uart_port_lock_irq(_T),
	     uart_port_unlock_irq(_T));

DEFINE_LOCK_GUARD_1(uart_port_lock_irqsave, struct uart_port,
                    uart_port_lock_irqsave(_T->lock, &_T->flags),
                    uart_port_unlock_irqrestore(_T->lock, _T->flags),
                    unsigned long flags);
DEFINE_LOCK_GUARD_1_COND(uart_port_lock_irqsave, _try,
			 uart_port_trylock_irqsave(_T->lock, &_T->flags));

static inline int serial_port_in(struct uart_port *up, int offset)
{
	return up->serial_in(up, offset);