All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/18] serial: Use uart_prepare_sysrq_char().
@ 2024-03-01 21:45 Sebastian Andrzej Siewior
  2024-03-01 21:45 ` [PATCH 01/18] serial: amba-pl011: " Sebastian Andrzej Siewior
                   ` (17 more replies)
  0 siblings, 18 replies; 27+ messages in thread
From: Sebastian Andrzej Siewior @ 2024-03-01 21:45 UTC (permalink / raw)
  To: linux-serial; +Cc: Greg Kroah-Hartman, Jiri Slaby, Thomas Gleixner

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

^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2024-03-07  1:39 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-03-01 21:45 [PATCH 00/18] serial: Use uart_prepare_sysrq_char() Sebastian Andrzej Siewior
2024-03-01 21:45 ` [PATCH 01/18] serial: amba-pl011: " 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

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.