mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 05:24:39 +01:00
do_con_write(), fbcon_redraw.*() invoke console_conditional_schedule() which is a conditional scheduling point based on printk's internal variables console_may_schedule. It may only be used if the console lock is acquired for instance via console_lock() or console_trylock(). Prinkt sets the internal variable to 1 (and allows to schedule) if the console lock has been acquired via console_lock(). The trylock does not allow it. The console_conditional_schedule() invocation in do_con_write() is invoked shortly before console_unlock(). The console_conditional_schedule() invocation in fbcon_redraw.*() original from fbcon_scroll() / vt's con_scroll() which originate from a line feed. In console_unlock() the variable is set to 0 (forbids to schedule) and it tries to schedule while making progress printing. This is brand new compared to when console_conditional_schedule() was added in v2.4.9.11. In v2.6.38-rc3, console_unlock() (started its existence) iterated over all consoles and flushed them with disabled interrupts. A scheduling attempt here was not possible, it relied that a long print scheduled before console_unlock(). Since commit |
||
|---|---|---|
| .. | ||
| .kunitconfig | ||
| braille.c | ||
| braille.h | ||
| console_cmdline.h | ||
| index.c | ||
| internal.h | ||
| Makefile | ||
| nbcon.c | ||
| printk.c | ||
| printk_ringbuffer.c | ||
| printk_ringbuffer.h | ||
| printk_ringbuffer_kunit_test.c | ||
| printk_safe.c | ||
| sysctl.c | ||