All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
To: linux-serial@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Jiri Slaby <jirislaby@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>
Subject: [PATCH 00/18] serial: Use uart_prepare_sysrq_char().
Date: Fri,  1 Mar 2024 22:45:13 +0100	[thread overview]
Message-ID: <20240301215246.891055-1-bigeasy@linutronix.de> (raw)

A few driver do in their console_write() callback something like

|	local_irq_save(flags);
|	if (sysrq)
|		locked = 0;
|	else if (oops_in_progress)
|		locked = uart_port_trylock(port);
|	else
|		uart_port_lock(port);

which breaks on PREEMPT_RT because the uart_port lock becomes a sleeping
lock and it can not be acquired with disabled interrupts. The PREEMPT_RT
queue has workarounds for a few of them. I tackled ever UART driver with
that pattern. The changes are mostly the same:
- Replace direct sysrq handling with delayed by using
  uart_prepare_sysrq_char(). This removes the first 'if (sysrq)' check.

- Remove local_irq_save() und use the _irqsave suffix for both of the
  locking functions.

The drivers can be categorized as
- Did not handle sysrq at all but does now
  - lpc32xx_hs
  - owl
  - rda
  - sifive

- Dropped the uart_port while invoking the sysrq callback but
  console_write did not acquire uart_port-lock as it should.
  - amba-pl011
  - msm
  - rda

  Don't think this is a serious problem.

- The IRQ service routine is always invoked with disabled interrupts and
  the _irqsave() suffix was dropped while switching to
  uart_prepare_sysrq_char().
  - msm
  - owl

- Nothing special, just converted
  - ar933x
  - bcm63xx
  - meson
  - omap
  - pxa
  - sunplus

- Required love & cuddling to get on track
  - pch

The series has been compiles tested on x86-64, arm, arm64.

Sebastian

             reply	other threads:[~2024-03-01 21:52 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-01 21:45 Sebastian Andrzej Siewior [this message]
2024-03-01 21:45 ` [PATCH 01/18] serial: amba-pl011: Use uart_prepare_sysrq_char() Sebastian Andrzej Siewior
2024-03-01 21:45 ` [PATCH 02/18] serial: ar933x: " Sebastian Andrzej Siewior
2024-03-01 21:45 ` [PATCH 03/18] serial: bcm63xx: " Sebastian Andrzej Siewior
2024-03-01 21:45 ` [PATCH 04/18] serial: meson: " Sebastian Andrzej Siewior
2024-03-01 21:45   ` Sebastian Andrzej Siewior
2024-03-01 21:45   ` Sebastian Andrzej Siewior
2024-03-01 21:45 ` [PATCH 05/18] serial: msm: " Sebastian Andrzej Siewior
2024-03-01 21:45 ` [PATCH 06/18] serial: omap: " Sebastian Andrzej Siewior
2024-03-01 21:45 ` [PATCH 07/18] serial: pxa: " Sebastian Andrzej Siewior
2024-03-01 21:45 ` [PATCH 08/18] serial: sunplus: " Sebastian Andrzej Siewior
2024-03-01 21:45 ` [PATCH 09/18] serial: lpc32xx_hs: Use uart_prepare_sysrq_char() to handle sysrq Sebastian Andrzej Siewior
2024-03-01 21:45   ` Sebastian Andrzej Siewior
2024-03-01 21:45 ` [PATCH 10/18] serial: owl: " Sebastian Andrzej Siewior
2024-03-01 21:45   ` Sebastian Andrzej Siewior
2024-03-01 21:45 ` [PATCH 11/18] serial: rda: " Sebastian Andrzej Siewior
2024-03-01 21:45   ` Sebastian Andrzej Siewior
2024-03-01 21:45 ` [PATCH 12/18] serial: sifive: " Sebastian Andrzej Siewior
2024-03-01 21:45   ` Sebastian Andrzej Siewior
2024-03-07  1:39   ` Samuel Holland
2024-03-07  1:39     ` Samuel Holland
2024-03-01 21:45 ` [PATCH 13/18] serial: pch: Invoke handle_rx_to() directly Sebastian Andrzej Siewior
2024-03-01 21:45 ` [PATCH 14/18] serial: pch: Make push_rx() return void Sebastian Andrzej Siewior
2024-03-01 21:45 ` [PATCH 15/18] serial: pch: Don't disable interrupts while acquiring lock in ISR Sebastian Andrzej Siewior
2024-03-01 21:45 ` [PATCH 16/18] serial: pch: Don't initialize uart_port's spin_lock Sebastian Andrzej Siewior
2024-03-01 21:45 ` [PATCH 17/18] serial: pch: Remove eg20t_port::lock Sebastian Andrzej Siewior
2024-03-01 21:45 ` [PATCH 18/18] serial: pch: Use uart_prepare_sysrq_char() Sebastian Andrzej Siewior

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=20240301215246.891055-1-bigeasy@linutronix.de \
    --to=bigeasy@linutronix.de \
    --cc=gregkh@linuxfoundation.org \
    --cc=jirislaby@kernel.org \
    --cc=linux-serial@vger.kernel.org \
    --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: link
Be 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.