kernel/printk/printk.c | 186 +++++++++++++++++++++++++++++++------------------ 1 file changed, 119 insertions(+), 67 deletions(-)
The legacy printer kthread uses console_lock and
__console_flush_and_unlock to flush records to the console which
holds the console_lock being held for the entire flush. This
results in large waiting times for console_lock waiters
especially where there is a large volume of records or where the
console is slow (e.g. serial). During boot, this contention causes
delays in the filp_open call in console_on_rootfs.
Let's instead release and reacquire console_lock in between
printing individual records.
Signed-off-by: Andrew Murray <amurray@thegoodpenguin.co.uk>
---
Changes in v3:
- Rebased on v6.18-rc2
- Reordering of variables and minor tweak to comments in console_flush_one_record
in first patch
- Improve semantics of console_flush_one_record in the second patch through different
use of return value and by replacing any_usable with try_again.
- Update third patch to use newer version of console_flush_one_record
- Link to v2: https://lore.kernel.org/r/20250927-printk_legacy_thread_console_lock-v2-0-cff9f063071a@thegoodpenguin.co.uk
Changes in v2:
- Move any_usable=false to console_flush_all in the 'introduce
console_flush_one_record' patch to match original implementation.
- Add Petr's console_flush_one_record() code cleanup patch
- Open code flushing implementation in legacy_kthread_func instead
of introducing new console_flush functions.
- Link to v1: https://lore.kernel.org/r/20250915-printk_legacy_thread_console_lock-v1-0-f34d42a9bcb3@thegoodpenguin.co.uk
---
Andrew Murray (2):
printk: Introduce console_flush_one_record
printk: Use console_flush_one_record for legacy printer kthread
Petr Mladek (1):
printk: console_flush_one_record() code cleanup
kernel/printk/printk.c | 186 +++++++++++++++++++++++++++++++------------------
1 file changed, 119 insertions(+), 67 deletions(-)
---
base-commit: 211ddde0823f1442e4ad052a2f30f050145ccada
change-id: 20250914-printk_legacy_thread_console_lock-1c27f59bf990
Best regards,
--
Andrew Murray <amurray@thegoodpenguin.co.uk>
On Mon 2025-10-20 16:38:04, Andrew Murray wrote: > The legacy printer kthread uses console_lock and > __console_flush_and_unlock to flush records to the console which > holds the console_lock being held for the entire flush. This > results in large waiting times for console_lock waiters > especially where there is a large volume of records or where the > console is slow (e.g. serial). During boot, this contention causes > delays in the filp_open call in console_on_rootfs. > > Let's instead release and reacquire console_lock in between > printing individual records. > > Signed-off-by: Andrew Murray <amurray@thegoodpenguin.co.uk> > --- > Changes in v3: > - Rebased on v6.18-rc2 > - Reordering of variables and minor tweak to comments in console_flush_one_record > in first patch > - Improve semantics of console_flush_one_record in the second patch through different > use of return value and by replacing any_usable with try_again. > - Update third patch to use newer version of console_flush_one_record > - Link to v2: https://lore.kernel.org/r/20250927-printk_legacy_thread_console_lock-v2-0-cff9f063071a@thegoodpenguin.co.uk > > Changes in v2: > - Move any_usable=false to console_flush_all in the 'introduce > console_flush_one_record' patch to match original implementation. > - Add Petr's console_flush_one_record() code cleanup patch > - Open code flushing implementation in legacy_kthread_func instead > of introducing new console_flush functions. > - Link to v1: https://lore.kernel.org/r/20250915-printk_legacy_thread_console_lock-v1-0-f34d42a9bcb3@thegoodpenguin.co.uk > > --- > Andrew Murray (2): > printk: Introduce console_flush_one_record > printk: Use console_flush_one_record for legacy printer kthread > > Petr Mladek (1): > printk: console_flush_one_record() code cleanup > > kernel/printk/printk.c | 186 +++++++++++++++++++++++++++++++------------------ > 1 file changed, 119 insertions(+), 67 deletions(-) > --- > base-commit: 211ddde0823f1442e4ad052a2f30f050145ccada > change-id: 20250914-printk_legacy_thread_console_lock-1c27f59bf990 JFYI, the patchset has been committed into printk/linux.git, branch rework/preempt-legacy-kthread. It is intended for 6.19. Best Regards, Petr
© 2016 - 2025 Red Hat, Inc.