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, Patrice Chotard <patrice.chotard@foss.st.com>, linux-arm-kernel@lists.infradead.org Subject: [PATCH tty v1 63/74] serial: st-asc: Use port lock wrappers Date: Thu, 14 Sep 2023 20:44:20 +0206 [thread overview] Message-ID: <20230914183831.587273-64-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/st-asc.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/tty/serial/st-asc.c b/drivers/tty/serial/st-asc.c index 92b9f6894006..a821f5d76a26 100644 --- a/drivers/tty/serial/st-asc.c +++ b/drivers/tty/serial/st-asc.c @@ -319,7 +319,7 @@ static irqreturn_t asc_interrupt(int irq, void *ptr) struct uart_port *port = ptr; u32 status; - spin_lock(&port->lock); + uart_port_lock(port); status = asc_in(port, ASC_STA); @@ -334,7 +334,7 @@ static irqreturn_t asc_interrupt(int irq, void *ptr) asc_transmit_chars(port); } - spin_unlock(&port->lock); + uart_port_unlock(port); return IRQ_HANDLED; } @@ -452,10 +452,10 @@ static void asc_pm(struct uart_port *port, unsigned int state, * we can come to turning it off. Note this is not called with * the port spinlock held. */ - spin_lock_irqsave(&port->lock, flags); + uart_port_lock_irqsave(port, &flags); ctl = asc_in(port, ASC_CTL) & ~ASC_CTL_RUN; asc_out(port, ASC_CTL, ctl); - spin_unlock_irqrestore(&port->lock, flags); + uart_port_unlock_irqrestore(port, flags); clk_disable_unprepare(ascport->clk); break; } @@ -480,7 +480,7 @@ static void asc_set_termios(struct uart_port *port, struct ktermios *termios, baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16); cflag = termios->c_cflag; - spin_lock_irqsave(&port->lock, flags); + uart_port_lock_irqsave(port, &flags); /* read control register */ ctrl_val = asc_in(port, ASC_CTL); @@ -594,7 +594,7 @@ static void asc_set_termios(struct uart_port *port, struct ktermios *termios, /* write final value and enable port */ asc_out(port, ASC_CTL, (ctrl_val | ASC_CTL_RUN)); - spin_unlock_irqrestore(&port->lock, flags); + uart_port_unlock_irqrestore(port, flags); } static const char *asc_type(struct uart_port *port) @@ -849,9 +849,9 @@ static void asc_console_write(struct console *co, const char *s, unsigned count) if (port->sysrq) locked = 0; /* asc_interrupt has already claimed the lock */ else if (oops_in_progress) - locked = spin_trylock_irqsave(&port->lock, flags); + locked = uart_port_trylock_irqsave(port, &flags); else - spin_lock_irqsave(&port->lock, flags); + uart_port_lock_irqsave(port, &flags); /* * Disable interrupts so we don't get the IRQ line bouncing @@ -869,7 +869,7 @@ static void asc_console_write(struct console *co, const char *s, unsigned count) asc_out(port, ASC_INTEN, intenable); if (locked) - spin_unlock_irqrestore(&port->lock, flags); + uart_port_unlock_irqrestore(port, flags); } static int asc_console_setup(struct console *co, char *options) -- 2.39.2 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
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, Patrice Chotard <patrice.chotard@foss.st.com>, linux-arm-kernel@lists.infradead.org Subject: [PATCH tty v1 63/74] serial: st-asc: Use port lock wrappers Date: Thu, 14 Sep 2023 20:44:20 +0206 [thread overview] Message-ID: <20230914183831.587273-64-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/st-asc.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/tty/serial/st-asc.c b/drivers/tty/serial/st-asc.c index 92b9f6894006..a821f5d76a26 100644 --- a/drivers/tty/serial/st-asc.c +++ b/drivers/tty/serial/st-asc.c @@ -319,7 +319,7 @@ static irqreturn_t asc_interrupt(int irq, void *ptr) struct uart_port *port = ptr; u32 status; - spin_lock(&port->lock); + uart_port_lock(port); status = asc_in(port, ASC_STA); @@ -334,7 +334,7 @@ static irqreturn_t asc_interrupt(int irq, void *ptr) asc_transmit_chars(port); } - spin_unlock(&port->lock); + uart_port_unlock(port); return IRQ_HANDLED; } @@ -452,10 +452,10 @@ static void asc_pm(struct uart_port *port, unsigned int state, * we can come to turning it off. Note this is not called with * the port spinlock held. */ - spin_lock_irqsave(&port->lock, flags); + uart_port_lock_irqsave(port, &flags); ctl = asc_in(port, ASC_CTL) & ~ASC_CTL_RUN; asc_out(port, ASC_CTL, ctl); - spin_unlock_irqrestore(&port->lock, flags); + uart_port_unlock_irqrestore(port, flags); clk_disable_unprepare(ascport->clk); break; } @@ -480,7 +480,7 @@ static void asc_set_termios(struct uart_port *port, struct ktermios *termios, baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16); cflag = termios->c_cflag; - spin_lock_irqsave(&port->lock, flags); + uart_port_lock_irqsave(port, &flags); /* read control register */ ctrl_val = asc_in(port, ASC_CTL); @@ -594,7 +594,7 @@ static void asc_set_termios(struct uart_port *port, struct ktermios *termios, /* write final value and enable port */ asc_out(port, ASC_CTL, (ctrl_val | ASC_CTL_RUN)); - spin_unlock_irqrestore(&port->lock, flags); + uart_port_unlock_irqrestore(port, flags); } static const char *asc_type(struct uart_port *port) @@ -849,9 +849,9 @@ static void asc_console_write(struct console *co, const char *s, unsigned count) if (port->sysrq) locked = 0; /* asc_interrupt has already claimed the lock */ else if (oops_in_progress) - locked = spin_trylock_irqsave(&port->lock, flags); + locked = uart_port_trylock_irqsave(port, &flags); else - spin_lock_irqsave(&port->lock, flags); + uart_port_lock_irqsave(port, &flags); /* * Disable interrupts so we don't get the IRQ line bouncing @@ -869,7 +869,7 @@ static void asc_console_write(struct console *co, const char *s, unsigned count) asc_out(port, ASC_INTEN, intenable); if (locked) - spin_unlock_irqrestore(&port->lock, flags); + uart_port_unlock_irqrestore(port, flags); } static int asc_console_setup(struct console *co, char *options) -- 2.39.2
next prev parent reply other threads:[~2023-09-14 18:39 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 ` [PATCH tty v1 29/74] serial: imx: " John Ogness 2023-09-14 18:37 ` 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 ` John Ogness [this message] 2023-09-14 18:38 ` [PATCH tty v1 63/74] serial: st-asc: " 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-64-john.ogness@linutronix.de \ --to=john.ogness@linutronix.de \ --cc=gregkh@linuxfoundation.org \ --cc=jirislaby@kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-serial@vger.kernel.org \ --cc=patrice.chotard@foss.st.com \ --cc=pmladek@suse.com \ --cc=tglx@linutronix.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.