Commit 06d28ca0 authored by Sebastian Andrzej Siewior's avatar Sebastian Andrzej Siewior Committed by Greg Kroah-Hartman

serial: pch: Remove eg20t_port::lock.

The struct eg20t_port has a spinlock_t which is used for locking while
access I/O of the device. Then there is the uart_portlock which is
sometimes and nests within eg20t_port's lock.

The uart_port lock is not used while using the struct in
pch_uart_hal_read() which might be okay. Then both locks are used in
pch_console_write() which looks odd especially the double try_lock part.

All in all it looks like the uart_port's lock could replace eg20t_port's
lock and simplify the code.

Remove eg20t_port::lock and use uart_port's lock for the lock scope.
Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
Link: https://lore.kernel.org/r/20240301215246.891055-18-bigeasy@linutronix.deSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 38f3fc2e
...@@ -237,9 +237,6 @@ struct eg20t_port { ...@@ -237,9 +237,6 @@ struct eg20t_port {
#define IRQ_NAME_SIZE 17 #define IRQ_NAME_SIZE 17
char irq_name[IRQ_NAME_SIZE]; char irq_name[IRQ_NAME_SIZE];
/* protect the eg20t_port private structure and io access to membase */
spinlock_t lock;
}; };
/** /**
...@@ -1013,7 +1010,7 @@ static irqreturn_t pch_uart_interrupt(int irq, void *dev_id) ...@@ -1013,7 +1010,7 @@ static irqreturn_t pch_uart_interrupt(int irq, void *dev_id)
int next = 1; int next = 1;
u8 msr; u8 msr;
spin_lock(&priv->lock); uart_port_lock(&priv->port);
handled = 0; handled = 0;
while (next) { while (next) {
iid = pch_uart_hal_get_iid(priv); iid = pch_uart_hal_get_iid(priv);
...@@ -1073,7 +1070,7 @@ static irqreturn_t pch_uart_interrupt(int irq, void *dev_id) ...@@ -1073,7 +1070,7 @@ static irqreturn_t pch_uart_interrupt(int irq, void *dev_id)
handled |= (unsigned int)ret; handled |= (unsigned int)ret;
} }
spin_unlock(&priv->lock); uart_port_unlock(&priv->port);
return IRQ_RETVAL(handled); return IRQ_RETVAL(handled);
} }
...@@ -1184,9 +1181,9 @@ static void pch_uart_break_ctl(struct uart_port *port, int ctl) ...@@ -1184,9 +1181,9 @@ static void pch_uart_break_ctl(struct uart_port *port, int ctl)
unsigned long flags; unsigned long flags;
priv = container_of(port, struct eg20t_port, port); priv = container_of(port, struct eg20t_port, port);
spin_lock_irqsave(&priv->lock, flags); uart_port_lock_irqsave(&priv->port, &flags);
pch_uart_hal_set_break(priv, ctl); pch_uart_hal_set_break(priv, ctl);
spin_unlock_irqrestore(&priv->lock, flags); uart_port_unlock_irqrestore(&priv->port, flags);
} }
/* Grab any interrupt resources and initialise any low level driver state. */ /* Grab any interrupt resources and initialise any low level driver state. */
...@@ -1336,8 +1333,7 @@ static void pch_uart_set_termios(struct uart_port *port, ...@@ -1336,8 +1333,7 @@ static void pch_uart_set_termios(struct uart_port *port,
baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk / 16); baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk / 16);
spin_lock_irqsave(&priv->lock, flags); uart_port_lock_irqsave(port, &flags);
uart_port_lock(port);
uart_update_timeout(port, termios->c_cflag, baud); uart_update_timeout(port, termios->c_cflag, baud);
rtn = pch_uart_hal_set_line(priv, baud, parity, bits, stb); rtn = pch_uart_hal_set_line(priv, baud, parity, bits, stb);
...@@ -1350,8 +1346,7 @@ static void pch_uart_set_termios(struct uart_port *port, ...@@ -1350,8 +1346,7 @@ static void pch_uart_set_termios(struct uart_port *port,
tty_termios_encode_baud_rate(termios, baud, baud); tty_termios_encode_baud_rate(termios, baud, baud);
out: out:
uart_port_unlock(port); uart_port_unlock_irqrestore(port, flags);
spin_unlock_irqrestore(&priv->lock, flags);
} }
static const char *pch_uart_type(struct uart_port *port) static const char *pch_uart_type(struct uart_port *port)
...@@ -1555,7 +1550,6 @@ pch_console_write(struct console *co, const char *s, unsigned int count) ...@@ -1555,7 +1550,6 @@ pch_console_write(struct console *co, const char *s, unsigned int count)
{ {
struct eg20t_port *priv; struct eg20t_port *priv;
unsigned long flags; unsigned long flags;
int priv_locked = 1;
int port_locked = 1; int port_locked = 1;
u8 ier; u8 ier;
...@@ -1565,15 +1559,11 @@ pch_console_write(struct console *co, const char *s, unsigned int count) ...@@ -1565,15 +1559,11 @@ pch_console_write(struct console *co, const char *s, unsigned int count)
local_irq_save(flags); local_irq_save(flags);
if (priv->port.sysrq) { if (priv->port.sysrq) {
/* call to uart_handle_sysrq_char already took the priv lock */
priv_locked = 0;
/* serial8250_handle_port() already took the port lock */ /* serial8250_handle_port() already took the port lock */
port_locked = 0; port_locked = 0;
} else if (oops_in_progress) { } else if (oops_in_progress) {
priv_locked = spin_trylock(&priv->lock);
port_locked = uart_port_trylock(&priv->port); port_locked = uart_port_trylock(&priv->port);
} else { } else {
spin_lock(&priv->lock);
uart_port_lock(&priv->port); uart_port_lock(&priv->port);
} }
...@@ -1595,8 +1585,6 @@ pch_console_write(struct console *co, const char *s, unsigned int count) ...@@ -1595,8 +1585,6 @@ pch_console_write(struct console *co, const char *s, unsigned int count)
if (port_locked) if (port_locked)
uart_port_unlock(&priv->port); uart_port_unlock(&priv->port);
if (priv_locked)
spin_unlock(&priv->lock);
local_irq_restore(flags); local_irq_restore(flags);
} }
...@@ -1694,8 +1682,6 @@ static struct eg20t_port *pch_uart_init_port(struct pci_dev *pdev, ...@@ -1694,8 +1682,6 @@ static struct eg20t_port *pch_uart_init_port(struct pci_dev *pdev,
pci_enable_msi(pdev); pci_enable_msi(pdev);
pci_set_master(pdev); pci_set_master(pdev);
spin_lock_init(&priv->lock);
iobase = pci_resource_start(pdev, 0); iobase = pci_resource_start(pdev, 0);
mapbase = pci_resource_start(pdev, 1); mapbase = pci_resource_start(pdev, 1);
priv->mapbase = mapbase; priv->mapbase = mapbase;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment