ab6f762f0f
printk_deferred(), similarly to printk_safe/printk_nmi, does not
immediately attempt to print a new message on the consoles, avoiding
calls into non-reentrant kernel paths, e.g. scheduler or timekeeping,
which potentially can deadlock the system.
Those printk() flavors, instead, rely on per-CPU flush irq_work to print
messages from safer contexts. For same reasons (recursive scheduler or
timekeeping calls) printk() uses per-CPU irq_work in order to wake up
user space syslog/kmsg readers.
However, only printk_safe/printk_nmi do make sure that per-CPU areas
have been initialised and that it's safe to modify per-CPU irq_work.
This means that, for instance, should printk_deferred() be invoked "too
early", that is before per-CPU areas are initialised, printk_deferred()
will perform illegal per-CPU access.
Lech Perczak [0] reports that after commit
|
||
---|---|---|
.. | ||
Kconfig | ||
Makefile | ||
calibrate.c | ||
do_mounts.c | ||
do_mounts.h | ||
do_mounts_initrd.c | ||
do_mounts_md.c | ||
do_mounts_rd.c | ||
init_task.c | ||
initramfs.c | ||
main.c | ||
noinitramfs.c | ||
version.c |