Messages in this thread | | | Date | Sat, 16 Apr 2016 11:55:29 +0900 | From | Sergey Senozhatsky <> | Subject | Re: [PATCH v11 0/3] printk: Make printk() completely async |
| |
On (04/08/16 02:31), Sergey Senozhatsky wrote: > Hello, > > This patch set makes printk() completely asynchronous: new messages > are getting upended to the kernel printk buffer, but instead of 'direct' > printing the actual print job is performed by a dedicated kthread. > This has the advantage that printing always happens from a schedulable > context and thus we don't lockup any particular CPU or even interrupts.
Hello,
Sir, is there anything else you want me to improve in this patch set?
-ss
> against next-20160407 > > v11: > -- switch default to sync printk > -- make `synchronous' param RW (Andrew, Jan) > -- set RT priority to printk kthread (Andrew) > -- correct comments (Andrew) > > v10: > -- simplify printk_kthread_need_flush_console (Jan, Petr) > > v9: > -- move need_flush_console assignment down in vprintk_emit (Jan) > -- simplify need_flush_console assignment rules (Petr) > -- clear need_flush_console in printing function (Petr) > -- rename need_flush_console (Petr) > > v8: > -- rename kthread printing function (Petr) > -- clear need_flush_console in console_unlock() under logbuf (Petr) > > v7: > -- do not set global printk_sync in panic in vrintk_emit() (Petr) > -- simplify vprintk_emit(). drop some of local variables (Petr) > -- move handling of LOGLEVEL_SCHED messages back to printk_deferred() > so we wake_up_process()/console_trylock() in vprintk_emit() only > for !in_sched messages > > v6: > -- move wake_up_process out of logbuf lock (Jan, Byungchul) > -- do not disable async printk in recursion handling code. > -- rebase against next-20160321 (w/NMI patches) > > v5: > -- make printk.synchronous RO (Petr) > -- make printing_func() correct and do not use wait_queue (Petr) > -- do not panic() when can't allocate printing thread (Petr) > -- do not wake_up_process() only in IRQ, prefer vprintk_emit() (Jan) > -- move wake_up_klogd_work_func() to a separate patch (Petr) > -- move wake_up_process() under logbuf lock so printk recursion logic can > help us out > -- switch to sync_print mode if printk recursion occured > -- drop "printk: Skip messages on oops" patch > > v4: > -- do not directly wake_up() the printing kthread from vprintk_emit(), need > to go via IRQ->wake_up() to avoid sched deadlocks (Jan) > > v3: > -- use a dedicated kthread for printing instead of using wq (Jan, Tetsuo, Tejun) > > v2: > - use dedicated printk workqueue with WQ_MEM_RECLAIM bit > - fallback to system-wide workqueue only if allocation of printk_wq has > failed > - do not use system_wq as a fallback wq. both console_lock() and onsole_unlock() > can spend a significant amount of time; so we need to use system_long_wq. > - rework sync/!sync detection logic > a) we can have deferred (in_sched) messages before we allocate printk_wq, > so the only way to handle those messages is via IRQ context > b) even in printk.synchronous mode, deferred messages must not be printed > directly, and should go via IRQ context > c) even if we allocated printk_wq and have !sync_printk mode, we must route > deferred messages via IRQ context > - so this adds additional bool flags to vprint_emit() and introduces a new > pending bit to `printk_pending' > - fix build on !PRINTK configs > > > Jan Kara (2): > printk: Make printk() completely async > printk: Make wake_up_klogd_work_func() async > > Sergey Senozhatsky (1): > printk: make printk.synchronous param rw > > Documentation/kernel-parameters.txt | 12 +++ > kernel/printk/printk.c | 155 +++++++++++++++++++++++++++++++++--- > 2 files changed, 157 insertions(+), 10 deletions(-) > > -- > 2.8.0 >
| |