On (04/12/17 01:19), Sergey Senozhatsky wrote: [..] > it does offloading after X printed lines by the same process. > if we reschedule, then the counter resets. which is probably OK, > we don't really want any process, except for printk_kthread, to > stay in console_unlock() forever.
may be this can be changed. we don't want even printk_kthread to keep console_sem locked for too long, because other process that might want to lock console_sem have to sleep in TASK_UNINTERRUPTIBLE as long as printing thread has pending messages to print. so may be the rule can be "every process prints up to `atomic_print_limit' lines and then offloads printing - wake_up()s printk_kthread and up()s console_sem". some other process (printk_kthread or a process from console_sem wait list, let them compete for console_sem) will eventually down() console_sem and print the next `atomic_print_limit' lines, while current process will have a chance to return from console_unlock() and do something else. [..] > the next question will be -- do we even need printk_emergency_begin/end > or we can leave without it. what I meant here -- drop sysrq and kexec printk_emergency_begin/end patches, but keep printk_emergency_begin/end API and do printk_emergency_begin/end in console_suspend()/resume(). PM already calls console_suspend()/resume(). something like that... -ss