From: John Ogness <john.ogness@linutronix.de> To: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: "Jiri Slaby" <jirislaby@kernel.org>, linux-serial@vger.kernel.org, "Petr Mladek" <pmladek@suse.com>, "Thomas Gleixner" <tglx@linutronix.de>, linux-kernel@vger.kernel.org, "Shawn Guo" <shawnguo@kernel.org>, "Sascha Hauer" <s.hauer@pengutronix.de>, "Pengutronix Kernel Team" <kernel@pengutronix.de>, "Fabio Estevam" <festevam@gmail.com>, "NXP Linux Team" <linux-imx@nxp.com>, "Sergey Organov" <sorganov@gmail.com>, "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>, "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>, "Rob Herring" <robh@kernel.org>, "Tom Rix" <trix@redhat.com>, "Marek Vasut" <marex@denx.de>, linux-arm-kernel@lists.infradead.org Subject: [PATCH tty v1 29/74] serial: imx: Use port lock wrappers Date: Thu, 14 Sep 2023 20:43:46 +0206 [thread overview] Message-ID: <20230914183831.587273-30-john.ogness@linutronix.de> (raw) In-Reply-To: <20230914183831.587273-1-john.ogness@linutronix.de> From: Thomas Gleixner <tglx@linutronix.de> When a serial port is used for kernel console output, then all modifications to the UART registers which are done from other contexts, e.g. getty, termios, are interference points for the kernel console. So far this has been ignored and the printk output is based on the principle of hope. The rework of the console infrastructure which aims to support threaded and atomic consoles, requires to mark sections which modify the UART registers as unsafe. This allows the atomic write function to make informed decisions and eventually to restore operational state. It also allows to prevent the regular UART code from modifying UART registers while printk output is in progress. All modifications of UART registers are guarded by the UART port lock, which provides an obvious synchronization point with the console infrastructure. To avoid adding this functionality to all UART drivers, wrap the spin_[un]lock*() invocations for uart_port::lock into helper functions which just contain the spin_[un]lock*() invocations for now. In a subsequent step these helpers will gain the console synchronization mechanisms. Converted with coccinelle. No functional change. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- drivers/tty/serial/imx.c | 84 ++++++++++++++++++++-------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c index 13cb78340709..0fb679cdb15e 100644 --- a/drivers/tty/serial/imx.c +++ b/drivers/tty/serial/imx.c @@ -575,7 +575,7 @@ static void imx_uart_dma_tx_callback(void *data) unsigned long flags; u32 ucr1; - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); dma_unmap_sg(sport->port.dev, sgl, sport->dma_tx_nents, DMA_TO_DEVICE); @@ -600,7 +600,7 @@ static void imx_uart_dma_tx_callback(void *data) imx_uart_writel(sport, ucr4, UCR4); } - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); } /* called with port.lock taken and irqs off */ @@ -766,11 +766,11 @@ static irqreturn_t imx_uart_rtsint(int irq, void *dev_id) struct imx_port *sport = dev_id; irqreturn_t ret; - spin_lock(&sport->port.lock); + uart_port_lock(&sport->port); ret = __imx_uart_rtsint(irq, dev_id); - spin_unlock(&sport->port.lock); + uart_port_unlock(&sport->port); return ret; } @@ -779,9 +779,9 @@ static irqreturn_t imx_uart_txint(int irq, void *dev_id) { struct imx_port *sport = dev_id; - spin_lock(&sport->port.lock); + uart_port_lock(&sport->port); imx_uart_transmit_buffer(sport); - spin_unlock(&sport->port.lock); + uart_port_unlock(&sport->port); return IRQ_HANDLED; } @@ -895,11 +895,11 @@ static irqreturn_t imx_uart_rxint(int irq, void *dev_id) struct imx_port *sport = dev_id; irqreturn_t ret; - spin_lock(&sport->port.lock); + uart_port_lock(&sport->port); ret = __imx_uart_rxint(irq, dev_id); - spin_unlock(&sport->port.lock); + uart_port_unlock(&sport->port); return ret; } @@ -962,7 +962,7 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id) unsigned int usr1, usr2, ucr1, ucr2, ucr3, ucr4; irqreturn_t ret = IRQ_NONE; - spin_lock(&sport->port.lock); + uart_port_lock(&sport->port); usr1 = imx_uart_readl(sport, USR1); usr2 = imx_uart_readl(sport, USR2); @@ -1032,7 +1032,7 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id) ret = IRQ_HANDLED; } - spin_unlock(&sport->port.lock); + uart_port_unlock(&sport->port); return ret; } @@ -1115,7 +1115,7 @@ static void imx_uart_break_ctl(struct uart_port *port, int break_state) unsigned long flags; u32 ucr1; - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); ucr1 = imx_uart_readl(sport, UCR1) & ~UCR1_SNDBRK; @@ -1124,7 +1124,7 @@ static void imx_uart_break_ctl(struct uart_port *port, int break_state) imx_uart_writel(sport, ucr1, UCR1); - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); } /* @@ -1137,9 +1137,9 @@ static void imx_uart_timeout(struct timer_list *t) unsigned long flags; if (sport->port.state) { - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); imx_uart_mctrl_check(sport); - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); mod_timer(&sport->timer, jiffies + MCTRL_TIMEOUT); } @@ -1169,9 +1169,9 @@ static void imx_uart_dma_rx_callback(void *data) status = dmaengine_tx_status(chan, sport->rx_cookie, &state); if (status == DMA_ERROR) { - spin_lock(&sport->port.lock); + uart_port_lock(&sport->port); imx_uart_clear_rx_errors(sport); - spin_unlock(&sport->port.lock); + uart_port_unlock(&sport->port); return; } @@ -1200,9 +1200,9 @@ static void imx_uart_dma_rx_callback(void *data) r_bytes = rx_ring->head - rx_ring->tail; /* If we received something, check for 0xff flood */ - spin_lock(&sport->port.lock); + uart_port_lock(&sport->port); imx_uart_check_flood(sport, imx_uart_readl(sport, USR2)); - spin_unlock(&sport->port.lock); + uart_port_unlock(&sport->port); if (!(sport->port.ignore_status_mask & URXD_DUMMY_READ)) { @@ -1460,7 +1460,7 @@ static int imx_uart_startup(struct uart_port *port) if (!uart_console(port) && imx_uart_dma_init(sport) == 0) dma_is_inited = 1; - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); /* Reset fifo's and state machines */ imx_uart_soft_reset(sport); @@ -1533,7 +1533,7 @@ static int imx_uart_startup(struct uart_port *port) imx_uart_disable_loopback_rs485(sport); - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); return 0; } @@ -1558,21 +1558,21 @@ static void imx_uart_shutdown(struct uart_port *port) sport->dma_is_rxing = 0; } - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); imx_uart_stop_tx(port); imx_uart_stop_rx(port); imx_uart_disable_dma(sport); - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); imx_uart_dma_exit(sport); } mctrl_gpio_disable_ms(sport->gpios); - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); ucr2 = imx_uart_readl(sport, UCR2); ucr2 &= ~(UCR2_TXEN | UCR2_ATEN); imx_uart_writel(sport, ucr2, UCR2); - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); /* * Stop our timer. @@ -1583,7 +1583,7 @@ static void imx_uart_shutdown(struct uart_port *port) * Disable all interrupts, port and break condition. */ - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); ucr1 = imx_uart_readl(sport, UCR1); ucr1 &= ~(UCR1_TRDYEN | UCR1_RRDYEN | UCR1_RTSDEN | UCR1_RXDMAEN | @@ -1605,7 +1605,7 @@ static void imx_uart_shutdown(struct uart_port *port) ucr4 &= ~UCR4_TCEN; imx_uart_writel(sport, ucr4, UCR4); - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); clk_disable_unprepare(sport->clk_per); clk_disable_unprepare(sport->clk_ipg); @@ -1668,7 +1668,7 @@ imx_uart_set_termios(struct uart_port *port, struct ktermios *termios, baud = uart_get_baud_rate(port, termios, old, 50, port->uartclk / 16); quot = uart_get_divisor(port, baud); - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); /* * Read current UCR2 and save it for future use, then clear all the bits @@ -1796,7 +1796,7 @@ imx_uart_set_termios(struct uart_port *port, struct ktermios *termios, if (UART_ENABLE_MS(&sport->port, termios->c_cflag)) imx_uart_enable_ms(&sport->port); - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); } static const char *imx_uart_type(struct uart_port *port) @@ -1858,7 +1858,7 @@ static int imx_uart_poll_init(struct uart_port *port) imx_uart_setup_ufcr(sport, TXTL_DEFAULT, RXTL_DEFAULT); - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); /* * Be careful about the order of enabling bits here. First enable the @@ -1886,7 +1886,7 @@ static int imx_uart_poll_init(struct uart_port *port) imx_uart_writel(sport, ucr1 | UCR1_RRDYEN, UCR1); imx_uart_writel(sport, ucr2 | UCR2_ATEN, UCR2); - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); return 0; } @@ -2005,9 +2005,9 @@ imx_uart_console_write(struct console *co, const char *s, unsigned int count) if (sport->port.sysrq) locked = 0; else if (oops_in_progress) - locked = spin_trylock_irqsave(&sport->port.lock, flags); + locked = uart_port_trylock_irqsave(&sport->port, &flags); else - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); /* * First, save UCR1/2/3 and then disable interrupts @@ -2035,7 +2035,7 @@ imx_uart_console_write(struct console *co, const char *s, unsigned int count) imx_uart_ucrs_restore(sport, &old_ucr); if (locked) - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); } /* @@ -2193,10 +2193,10 @@ static enum hrtimer_restart imx_trigger_start_tx(struct hrtimer *t) struct imx_port *sport = container_of(t, struct imx_port, trigger_start_tx); unsigned long flags; - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); if (sport->tx_state == WAIT_AFTER_RTS) imx_uart_start_tx(&sport->port); - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); return HRTIMER_NORESTART; } @@ -2206,10 +2206,10 @@ static enum hrtimer_restart imx_trigger_stop_tx(struct hrtimer *t) struct imx_port *sport = container_of(t, struct imx_port, trigger_stop_tx); unsigned long flags; - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); if (sport->tx_state == WAIT_AFTER_SEND) imx_uart_stop_tx(&sport->port); - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); return HRTIMER_NORESTART; } @@ -2482,9 +2482,9 @@ static void imx_uart_restore_context(struct imx_port *sport) { unsigned long flags; - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); if (!sport->context_saved) { - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); return; } @@ -2499,7 +2499,7 @@ static void imx_uart_restore_context(struct imx_port *sport) imx_uart_writel(sport, sport->saved_reg[2], UCR3); imx_uart_writel(sport, sport->saved_reg[3], UCR4); sport->context_saved = false; - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); } static void imx_uart_save_context(struct imx_port *sport) @@ -2507,7 +2507,7 @@ static void imx_uart_save_context(struct imx_port *sport) unsigned long flags; /* Save necessary regs */ - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); sport->saved_reg[0] = imx_uart_readl(sport, UCR1); sport->saved_reg[1] = imx_uart_readl(sport, UCR2); sport->saved_reg[2] = imx_uart_readl(sport, UCR3); @@ -2519,7 +2519,7 @@ static void imx_uart_save_context(struct imx_port *sport) sport->saved_reg[8] = imx_uart_readl(sport, UBMR); sport->saved_reg[9] = imx_uart_readl(sport, IMX21_UTS); sport->context_saved = true; - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); } static void imx_uart_enable_wakeup(struct imx_port *sport, bool on) -- 2.39.2
WARNING: multiple messages have this Message-ID (diff)
From: John Ogness <john.ogness@linutronix.de> To: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: "Jiri Slaby" <jirislaby@kernel.org>, linux-serial@vger.kernel.org, "Petr Mladek" <pmladek@suse.com>, "Thomas Gleixner" <tglx@linutronix.de>, linux-kernel@vger.kernel.org, "Shawn Guo" <shawnguo@kernel.org>, "Sascha Hauer" <s.hauer@pengutronix.de>, "Pengutronix Kernel Team" <kernel@pengutronix.de>, "Fabio Estevam" <festevam@gmail.com>, "NXP Linux Team" <linux-imx@nxp.com>, "Sergey Organov" <sorganov@gmail.com>, "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>, "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>, "Rob Herring" <robh@kernel.org>, "Tom Rix" <trix@redhat.com>, "Marek Vasut" <marex@denx.de>, linux-arm-kernel@lists.infradead.org Subject: [PATCH tty v1 29/74] serial: imx: Use port lock wrappers Date: Thu, 14 Sep 2023 20:43:46 +0206 [thread overview] Message-ID: <20230914183831.587273-30-john.ogness@linutronix.de> (raw) In-Reply-To: <20230914183831.587273-1-john.ogness@linutronix.de> From: Thomas Gleixner <tglx@linutronix.de> When a serial port is used for kernel console output, then all modifications to the UART registers which are done from other contexts, e.g. getty, termios, are interference points for the kernel console. So far this has been ignored and the printk output is based on the principle of hope. The rework of the console infrastructure which aims to support threaded and atomic consoles, requires to mark sections which modify the UART registers as unsafe. This allows the atomic write function to make informed decisions and eventually to restore operational state. It also allows to prevent the regular UART code from modifying UART registers while printk output is in progress. All modifications of UART registers are guarded by the UART port lock, which provides an obvious synchronization point with the console infrastructure. To avoid adding this functionality to all UART drivers, wrap the spin_[un]lock*() invocations for uart_port::lock into helper functions which just contain the spin_[un]lock*() invocations for now. In a subsequent step these helpers will gain the console synchronization mechanisms. Converted with coccinelle. No functional change. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- drivers/tty/serial/imx.c | 84 ++++++++++++++++++++-------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c index 13cb78340709..0fb679cdb15e 100644 --- a/drivers/tty/serial/imx.c +++ b/drivers/tty/serial/imx.c @@ -575,7 +575,7 @@ static void imx_uart_dma_tx_callback(void *data) unsigned long flags; u32 ucr1; - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); dma_unmap_sg(sport->port.dev, sgl, sport->dma_tx_nents, DMA_TO_DEVICE); @@ -600,7 +600,7 @@ static void imx_uart_dma_tx_callback(void *data) imx_uart_writel(sport, ucr4, UCR4); } - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); } /* called with port.lock taken and irqs off */ @@ -766,11 +766,11 @@ static irqreturn_t imx_uart_rtsint(int irq, void *dev_id) struct imx_port *sport = dev_id; irqreturn_t ret; - spin_lock(&sport->port.lock); + uart_port_lock(&sport->port); ret = __imx_uart_rtsint(irq, dev_id); - spin_unlock(&sport->port.lock); + uart_port_unlock(&sport->port); return ret; } @@ -779,9 +779,9 @@ static irqreturn_t imx_uart_txint(int irq, void *dev_id) { struct imx_port *sport = dev_id; - spin_lock(&sport->port.lock); + uart_port_lock(&sport->port); imx_uart_transmit_buffer(sport); - spin_unlock(&sport->port.lock); + uart_port_unlock(&sport->port); return IRQ_HANDLED; } @@ -895,11 +895,11 @@ static irqreturn_t imx_uart_rxint(int irq, void *dev_id) struct imx_port *sport = dev_id; irqreturn_t ret; - spin_lock(&sport->port.lock); + uart_port_lock(&sport->port); ret = __imx_uart_rxint(irq, dev_id); - spin_unlock(&sport->port.lock); + uart_port_unlock(&sport->port); return ret; } @@ -962,7 +962,7 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id) unsigned int usr1, usr2, ucr1, ucr2, ucr3, ucr4; irqreturn_t ret = IRQ_NONE; - spin_lock(&sport->port.lock); + uart_port_lock(&sport->port); usr1 = imx_uart_readl(sport, USR1); usr2 = imx_uart_readl(sport, USR2); @@ -1032,7 +1032,7 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id) ret = IRQ_HANDLED; } - spin_unlock(&sport->port.lock); + uart_port_unlock(&sport->port); return ret; } @@ -1115,7 +1115,7 @@ static void imx_uart_break_ctl(struct uart_port *port, int break_state) unsigned long flags; u32 ucr1; - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); ucr1 = imx_uart_readl(sport, UCR1) & ~UCR1_SNDBRK; @@ -1124,7 +1124,7 @@ static void imx_uart_break_ctl(struct uart_port *port, int break_state) imx_uart_writel(sport, ucr1, UCR1); - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); } /* @@ -1137,9 +1137,9 @@ static void imx_uart_timeout(struct timer_list *t) unsigned long flags; if (sport->port.state) { - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); imx_uart_mctrl_check(sport); - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); mod_timer(&sport->timer, jiffies + MCTRL_TIMEOUT); } @@ -1169,9 +1169,9 @@ static void imx_uart_dma_rx_callback(void *data) status = dmaengine_tx_status(chan, sport->rx_cookie, &state); if (status == DMA_ERROR) { - spin_lock(&sport->port.lock); + uart_port_lock(&sport->port); imx_uart_clear_rx_errors(sport); - spin_unlock(&sport->port.lock); + uart_port_unlock(&sport->port); return; } @@ -1200,9 +1200,9 @@ static void imx_uart_dma_rx_callback(void *data) r_bytes = rx_ring->head - rx_ring->tail; /* If we received something, check for 0xff flood */ - spin_lock(&sport->port.lock); + uart_port_lock(&sport->port); imx_uart_check_flood(sport, imx_uart_readl(sport, USR2)); - spin_unlock(&sport->port.lock); + uart_port_unlock(&sport->port); if (!(sport->port.ignore_status_mask & URXD_DUMMY_READ)) { @@ -1460,7 +1460,7 @@ static int imx_uart_startup(struct uart_port *port) if (!uart_console(port) && imx_uart_dma_init(sport) == 0) dma_is_inited = 1; - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); /* Reset fifo's and state machines */ imx_uart_soft_reset(sport); @@ -1533,7 +1533,7 @@ static int imx_uart_startup(struct uart_port *port) imx_uart_disable_loopback_rs485(sport); - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); return 0; } @@ -1558,21 +1558,21 @@ static void imx_uart_shutdown(struct uart_port *port) sport->dma_is_rxing = 0; } - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); imx_uart_stop_tx(port); imx_uart_stop_rx(port); imx_uart_disable_dma(sport); - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); imx_uart_dma_exit(sport); } mctrl_gpio_disable_ms(sport->gpios); - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); ucr2 = imx_uart_readl(sport, UCR2); ucr2 &= ~(UCR2_TXEN | UCR2_ATEN); imx_uart_writel(sport, ucr2, UCR2); - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); /* * Stop our timer. @@ -1583,7 +1583,7 @@ static void imx_uart_shutdown(struct uart_port *port) * Disable all interrupts, port and break condition. */ - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); ucr1 = imx_uart_readl(sport, UCR1); ucr1 &= ~(UCR1_TRDYEN | UCR1_RRDYEN | UCR1_RTSDEN | UCR1_RXDMAEN | @@ -1605,7 +1605,7 @@ static void imx_uart_shutdown(struct uart_port *port) ucr4 &= ~UCR4_TCEN; imx_uart_writel(sport, ucr4, UCR4); - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); clk_disable_unprepare(sport->clk_per); clk_disable_unprepare(sport->clk_ipg); @@ -1668,7 +1668,7 @@ imx_uart_set_termios(struct uart_port *port, struct ktermios *termios, baud = uart_get_baud_rate(port, termios, old, 50, port->uartclk / 16); quot = uart_get_divisor(port, baud); - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); /* * Read current UCR2 and save it for future use, then clear all the bits @@ -1796,7 +1796,7 @@ imx_uart_set_termios(struct uart_port *port, struct ktermios *termios, if (UART_ENABLE_MS(&sport->port, termios->c_cflag)) imx_uart_enable_ms(&sport->port); - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); } static const char *imx_uart_type(struct uart_port *port) @@ -1858,7 +1858,7 @@ static int imx_uart_poll_init(struct uart_port *port) imx_uart_setup_ufcr(sport, TXTL_DEFAULT, RXTL_DEFAULT); - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); /* * Be careful about the order of enabling bits here. First enable the @@ -1886,7 +1886,7 @@ static int imx_uart_poll_init(struct uart_port *port) imx_uart_writel(sport, ucr1 | UCR1_RRDYEN, UCR1); imx_uart_writel(sport, ucr2 | UCR2_ATEN, UCR2); - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); return 0; } @@ -2005,9 +2005,9 @@ imx_uart_console_write(struct console *co, const char *s, unsigned int count) if (sport->port.sysrq) locked = 0; else if (oops_in_progress) - locked = spin_trylock_irqsave(&sport->port.lock, flags); + locked = uart_port_trylock_irqsave(&sport->port, &flags); else - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); /* * First, save UCR1/2/3 and then disable interrupts @@ -2035,7 +2035,7 @@ imx_uart_console_write(struct console *co, const char *s, unsigned int count) imx_uart_ucrs_restore(sport, &old_ucr); if (locked) - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); } /* @@ -2193,10 +2193,10 @@ static enum hrtimer_restart imx_trigger_start_tx(struct hrtimer *t) struct imx_port *sport = container_of(t, struct imx_port, trigger_start_tx); unsigned long flags; - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); if (sport->tx_state == WAIT_AFTER_RTS) imx_uart_start_tx(&sport->port); - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); return HRTIMER_NORESTART; } @@ -2206,10 +2206,10 @@ static enum hrtimer_restart imx_trigger_stop_tx(struct hrtimer *t) struct imx_port *sport = container_of(t, struct imx_port, trigger_stop_tx); unsigned long flags; - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); if (sport->tx_state == WAIT_AFTER_SEND) imx_uart_stop_tx(&sport->port); - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); return HRTIMER_NORESTART; } @@ -2482,9 +2482,9 @@ static void imx_uart_restore_context(struct imx_port *sport) { unsigned long flags; - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); if (!sport->context_saved) { - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); return; } @@ -2499,7 +2499,7 @@ static void imx_uart_restore_context(struct imx_port *sport) imx_uart_writel(sport, sport->saved_reg[2], UCR3); imx_uart_writel(sport, sport->saved_reg[3], UCR4); sport->context_saved = false; - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); } static void imx_uart_save_context(struct imx_port *sport) @@ -2507,7 +2507,7 @@ static void imx_uart_save_context(struct imx_port *sport) unsigned long flags; /* Save necessary regs */ - spin_lock_irqsave(&sport->port.lock, flags); + uart_port_lock_irqsave(&sport->port, &flags); sport->saved_reg[0] = imx_uart_readl(sport, UCR1); sport->saved_reg[1] = imx_uart_readl(sport, UCR2); sport->saved_reg[2] = imx_uart_readl(sport, UCR3); @@ -2519,7 +2519,7 @@ static void imx_uart_save_context(struct imx_port *sport) sport->saved_reg[8] = imx_uart_readl(sport, UBMR); sport->saved_reg[9] = imx_uart_readl(sport, IMX21_UTS); sport->context_saved = true; - spin_unlock_irqrestore(&sport->port.lock, flags); + uart_port_unlock_irqrestore(&sport->port, flags); } static void imx_uart_enable_wakeup(struct imx_port *sport, bool on) -- 2.39.2 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2023-09-14 18:40 UTC|newest] Thread overview: 162+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-09-14 18:37 [PATCH tty v1 00/74] serial: wrappers for uart port lock John Ogness 2023-09-14 18:37 ` John Ogness 2023-09-14 18:37 ` John Ogness 2023-09-14 18:37 ` John Ogness 2023-09-14 18:37 ` [PATCH tty v1 01/74] serial: core: Provide port lock wrappers John Ogness 2023-09-15 9:25 ` Ilpo Järvinen 2023-09-19 14:24 ` Petr Mladek 2023-09-19 19:16 ` Greg Kroah-Hartman 2023-09-19 19:51 ` Thomas Gleixner 2023-09-20 7:58 ` Petr Mladek 2023-09-14 18:37 ` [PATCH tty v1 02/74] serial: core: Use " John Ogness 2023-09-15 9:26 ` Ilpo Järvinen 2023-09-14 18:37 ` [PATCH tty v1 03/74] serial: 21285: Use port " John Ogness 2023-09-14 18:37 ` [PATCH tty v1 04/74] serial: 8250_aspeed_vuart: " John Ogness 2023-09-14 18:37 ` John Ogness 2023-09-14 18:37 ` [PATCH tty v1 05/74] serial: 8250_bcm7271: " John Ogness 2023-09-14 18:37 ` [PATCH tty v1 06/74] serial: 8250: " John Ogness 2023-09-15 9:24 ` Ilpo Järvinen 2023-09-15 9:35 ` Ilpo Järvinen 2023-09-15 11:21 ` John Ogness 2023-09-14 18:37 ` [PATCH tty v1 07/74] serial: 8250_dma: " John Ogness 2023-09-15 9:14 ` Ilpo Järvinen 2023-09-14 18:37 ` [PATCH tty v1 08/74] serial: 8250_dw: " John Ogness 2023-09-15 9:16 ` Ilpo Järvinen 2023-09-14 18:37 ` [PATCH tty v1 09/74] serial: 8250_exar: " John Ogness 2023-09-14 18:37 ` [PATCH tty v1 10/74] serial: 8250_fsl: " John Ogness 2023-09-14 18:37 ` [PATCH tty v1 11/74] serial: 8250_mtk: " John Ogness 2023-09-14 18:37 ` John Ogness 2023-09-15 4:07 ` Chen-Yu Tsai 2023-09-15 4:07 ` Chen-Yu Tsai 2023-09-14 18:37 ` [PATCH tty v1 12/74] serial: 8250_omap: " John Ogness 2023-09-14 18:37 ` [PATCH tty v1 13/74] serial: 8250_pci1xxxx: " John Ogness 2023-09-14 18:37 ` [PATCH tty v1 14/74] serial: altera_jtaguart: " John Ogness 2023-09-14 18:37 ` [PATCH tty v1 15/74] serial: altera_uart: " John Ogness 2023-09-14 18:37 ` [PATCH tty v1 16/74] serial: amba-pl010: " John Ogness 2023-09-14 18:37 ` [PATCH tty v1 17/74] serial: amba-pl011: " John Ogness 2023-09-14 18:37 ` [PATCH tty v1 18/74] serial: apb: " John Ogness 2023-09-14 18:37 ` [PATCH tty v1 19/74] serial: ar933x: " John Ogness 2023-09-14 18:37 ` [PATCH tty v1 20/74] serial: arc_uart: " John Ogness 2023-09-14 18:37 ` John Ogness 2023-09-14 18:37 ` [PATCH tty v1 21/74] serial: atmel: " John Ogness 2023-09-14 18:37 ` John Ogness 2023-09-14 18:37 ` [PATCH tty v1 22/74] serial: bcm63xx-uart: " John Ogness 2023-09-14 21:52 ` Florian Fainelli 2023-09-14 18:37 ` [PATCH tty v1 23/74] serial: cpm_uart: " John Ogness 2023-09-14 18:37 ` [PATCH tty v1 24/74] serial: digicolor: " John Ogness 2023-09-14 18:37 ` John Ogness 2023-09-18 6:13 ` Baruch Siach 2023-09-18 6:13 ` Baruch Siach 2023-09-14 18:37 ` [PATCH tty v1 25/74] serial: dz: " John Ogness 2023-09-14 18:37 ` [PATCH tty v1 26/74] serial: linflexuart: " John Ogness 2023-09-14 18:37 ` [PATCH tty v1 27/74] serial: fsl_lpuart: " John Ogness 2023-09-14 18:37 ` [PATCH tty v1 28/74] serial: icom: " John Ogness 2023-09-14 18:37 ` John Ogness [this message] 2023-09-14 18:37 ` [PATCH tty v1 29/74] serial: imx: " John Ogness 2023-09-15 20:21 ` Uwe Kleine-König 2023-09-15 20:21 ` Uwe Kleine-König 2023-09-16 19:45 ` John Ogness 2023-09-16 19:45 ` John Ogness 2023-09-17 12:11 ` Uwe Kleine-König 2023-09-17 12:11 ` Uwe Kleine-König 2023-09-14 18:37 ` [PATCH tty v1 30/74] serial: ip22zilog: " John Ogness 2023-09-14 18:37 ` [PATCH tty v1 31/74] serial: jsm: " John Ogness 2023-09-14 18:37 ` [PATCH tty v1 32/74] serial: liteuart: " John Ogness 2023-09-15 13:40 ` Gabriel L. Somlo 2023-09-14 18:37 ` [PATCH tty v1 33/74] serial: lpc32xx_hs: " John Ogness 2023-09-14 18:37 ` John Ogness 2023-09-14 18:37 ` [PATCH tty v1 34/74] serial: ma35d1: " John Ogness 2023-09-14 18:37 ` John Ogness 2023-09-14 18:37 ` [PATCH tty v1 35/74] serial: mcf: " John Ogness 2023-09-14 18:37 ` [PATCH tty v1 36/74] serial: men_z135_uart: " John Ogness 2023-09-14 18:37 ` [PATCH tty v1 37/74] serial: meson: " John Ogness 2023-09-14 18:37 ` John Ogness 2023-09-14 18:37 ` John Ogness 2023-09-15 6:56 ` Neil Armstrong 2023-09-15 6:56 ` Neil Armstrong 2023-09-15 6:56 ` Neil Armstrong 2023-09-14 18:37 ` [PATCH tty v1 38/74] serial: milbeaut_usio: " John Ogness 2023-09-14 18:37 ` John Ogness 2023-09-14 18:37 ` [PATCH tty v1 39/74] serial: mpc52xx: " John Ogness 2023-09-14 18:37 ` [PATCH tty v1 40/74] serial: mps2-uart: " John Ogness 2023-09-14 18:37 ` John Ogness 2023-09-14 18:37 ` [PATCH tty v1 41/74] serial: msm: " John Ogness 2023-09-14 19:13 ` Bjorn Andersson 2023-09-14 18:37 ` [PATCH tty v1 42/74] serial: mvebu-uart: " John Ogness 2023-09-14 18:38 ` [PATCH tty v1 43/74] serial: omap: " John Ogness 2023-09-14 18:38 ` [PATCH tty v1 44/74] serial: owl: " John Ogness 2023-09-14 18:38 ` John Ogness 2023-09-14 18:38 ` [PATCH tty v1 45/74] serial: pch: " John Ogness 2023-09-14 18:38 ` [PATCH tty v1 46/74] serial: pic32: " John Ogness 2023-09-14 18:38 ` [PATCH tty v1 47/74] serial: pmac_zilog: " John Ogness 2023-09-14 18:38 ` John Ogness 2023-09-14 18:38 ` [PATCH tty v1 48/74] serial: pxa: " John Ogness 2023-09-14 18:38 ` [PATCH tty v1 49/74] serial: qcom-geni: " John Ogness 2023-09-14 19:16 ` Bjorn Andersson 2023-09-14 18:38 ` [PATCH tty v1 50/74] serial: rda: " John Ogness 2023-09-14 18:38 ` John Ogness 2023-09-14 18:38 ` [PATCH tty v1 51/74] serial: rp2: " John Ogness 2023-09-14 18:38 ` [PATCH tty v1 52/74] serial: sa1100: " John Ogness 2023-09-14 18:38 ` [PATCH tty v1 53/74] serial: samsung_tty: " John Ogness 2023-09-14 18:38 ` John Ogness 2023-09-14 18:38 ` [PATCH tty v1 54/74] serial: sb1250-duart: " John Ogness 2023-09-14 18:38 ` [PATCH tty v1 55/74] serial: sc16is7xx: " John Ogness 2023-09-14 18:38 ` [PATCH tty v1 56/74] serial: tegra: " John Ogness 2023-09-14 18:38 ` [PATCH tty v1 57/74] serial: core: " John Ogness 2023-09-14 18:38 ` [PATCH tty v1 58/74] serial: mctrl_gpio: " John Ogness 2023-09-14 18:38 ` [PATCH tty v1 59/74] serial: txx9: " John Ogness 2023-09-14 18:38 ` [PATCH tty v1 60/74] serial: sh-sci: " John Ogness 2023-09-14 18:38 ` [PATCH tty v1 61/74] serial: sifive: " John Ogness 2023-09-14 18:38 ` John Ogness 2023-09-14 18:38 ` [PATCH tty v1 62/74] serial: sprd: " John Ogness 2023-09-14 18:38 ` [PATCH tty v1 63/74] serial: st-asc: " John Ogness 2023-09-14 18:38 ` John Ogness 2023-09-14 18:38 ` [PATCH tty v1 64/74] serial: stm32: " John Ogness 2023-09-14 18:38 ` John Ogness 2023-09-14 18:38 ` [PATCH tty v1 65/74] serial: sunhv: " John Ogness 2023-09-14 18:38 ` [PATCH tty v1 66/74] serial: sunplus-uart: " John Ogness 2023-09-14 18:38 ` [PATCH tty v1 67/74] serial: sunsab: " John Ogness 2023-09-14 18:38 ` [PATCH tty v1 68/74] serial: sunsu: " John Ogness 2023-09-14 18:38 ` [PATCH tty v1 69/74] serial: sunzilog: " John Ogness 2023-09-14 18:38 ` [PATCH tty v1 70/74] serial: timbuart: " John Ogness 2023-09-14 18:38 ` [PATCH tty v1 71/74] serial: uartlite: " John Ogness 2023-09-14 18:38 ` [PATCH tty v1 72/74] serial: ucc_uart: " John Ogness 2023-09-14 18:38 ` John Ogness 2023-09-15 15:06 ` Timur Tabi 2023-09-15 15:06 ` Timur Tabi 2023-09-14 18:38 ` [PATCH tty v1 73/74] serial: vt8500: " John Ogness 2023-09-14 18:38 ` John Ogness 2023-09-14 18:38 ` [PATCH tty v1 74/74] serial: xilinx_uartps: " John Ogness 2023-09-14 18:38 ` John Ogness 2023-09-14 19:01 ` [PATCH tty v1 00/74] serial: wrappers for uart port lock Maciej W. Rozycki 2023-09-14 19:01 ` Maciej W. Rozycki 2023-09-14 19:01 ` Maciej W. Rozycki 2023-09-14 19:01 ` Maciej W. Rozycki 2023-09-15 12:04 ` Thomas Gleixner 2023-09-15 12:04 ` Thomas Gleixner 2023-09-15 12:04 ` Thomas Gleixner 2023-09-15 12:04 ` Thomas Gleixner 2023-09-15 17:23 ` Maciej W. Rozycki 2023-09-15 17:23 ` Maciej W. Rozycki 2023-09-15 17:23 ` Maciej W. Rozycki 2023-09-15 17:23 ` Maciej W. Rozycki 2023-09-16 19:24 ` John Ogness 2023-09-16 19:24 ` John Ogness 2023-09-16 19:24 ` John Ogness 2023-09-16 19:24 ` John Ogness 2023-09-15 9:12 ` Ilpo Järvinen 2023-09-15 9:12 ` Ilpo Järvinen 2023-09-15 9:12 ` Ilpo Järvinen 2023-09-15 9:12 ` Ilpo Järvinen 2023-09-16 19:42 ` John Ogness 2023-09-16 19:42 ` John Ogness 2023-09-16 19:42 ` John Ogness 2023-09-16 19:42 ` John Ogness 2023-09-18 8:23 ` John Ogness 2023-09-18 8:23 ` John Ogness 2023-09-18 8:23 ` John Ogness 2023-09-18 8:23 ` John Ogness 2023-09-18 8:26 ` Greg Kroah-Hartman 2023-09-18 8:26 ` Greg Kroah-Hartman 2023-09-18 8:26 ` Greg Kroah-Hartman 2023-09-18 8:26 ` Greg Kroah-Hartman
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20230914183831.587273-30-john.ogness@linutronix.de \ --to=john.ogness@linutronix.de \ --cc=festevam@gmail.com \ --cc=gregkh@linuxfoundation.org \ --cc=ilpo.jarvinen@linux.intel.com \ --cc=jirislaby@kernel.org \ --cc=kernel@pengutronix.de \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-imx@nxp.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-serial@vger.kernel.org \ --cc=marex@denx.de \ --cc=pmladek@suse.com \ --cc=robh@kernel.org \ --cc=s.hauer@pengutronix.de \ --cc=shawnguo@kernel.org \ --cc=sorganov@gmail.com \ --cc=tglx@linutronix.de \ --cc=trix@redhat.com \ --cc=u.kleine-koenig@pengutronix.de \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.