[PATCH 0/2] serial: amba-pl011: fix console clock lifetime
Karl Mehltretter <[email protected]> Sun, 19 Jul 2026 08:35:00 +0200
| Newsgroups | org.kernel.vger.linux-serial,dev.linux.lists.linux-rt-devel,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
Patch 1 fixes an independent bug: pl011_console_setup() prepares the UART clock but nothing releases it when the console is unregistered, so the clock's prepare count leaks one reference per registration cycle (via the sysfs "console" attribute or a driver unbind). It adds the missing console .exit() and stands on its own. Patch 2 fixes a PREEMPT_RT failure: pl011_console_write_atomic() runs in nbcon atomic context but calls clk_enable(), which under RT can acquire a sleeping lock, so an atomic-context printk on a clk-backed pl011 can hit "sleeping function called from invalid context". The same lock acquisition would also be unsafe if write_atomic() is invoked from NMI context. It keeps the clock enabled while the console is registered and releases it in .exit(); it depends on patch 1. Tested on QEMU: the prepare-count leak was reproduced and fixed on bcm2835 (a gateable CPRMAN UART clock), and the PREEMPT_RT splat was reproduced and fixed on versatilepb. With the series applied, recycling the console via the sysfs attribute keeps both the prepare and enable counts balanced, and the console keeps working after re-registration. Karl Mehltretter (2): serial: amba-pl011: unprepare console clock on unregister serial: amba-pl011: keep console clock enabled for atomic writes drivers/tty/serial/amba-pl011.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) -- 2.53.0