lkml.org 
[lkml]   [2016]   [Apr]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v11 2/3] printk: Make wake_up_klogd_work_func() async
    Date
    From: Jan Kara <jack@suse.cz>

    Offload printing of scheduler deferred messages from IRQ context
    to a schedulable printing kthread, when possible (the same way we
    do it in vprintk_emit()). Otherwise, the CPU can spend unbounded
    amount of time doing printing in console_unlock() from IRQ.

    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
    Reviewed-by: Petr Mladek <pmladek@suse.com>
    ---
    kernel/printk/printk.c | 13 ++++++++++---
    1 file changed, 10 insertions(+), 3 deletions(-)

    diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
    index 64a98ea..89f5441 100644
    --- a/kernel/printk/printk.c
    +++ b/kernel/printk/printk.c
    @@ -2820,9 +2820,16 @@ static void wake_up_klogd_work_func(struct irq_work *irq_work)
    int pending = __this_cpu_xchg(printk_pending, 0);

    if (pending & PRINTK_PENDING_OUTPUT) {
    - /* If trylock fails, someone else is doing the printing */
    - if (console_trylock())
    - console_unlock();
    + if (printk_kthread) {
    + wake_up_process(printk_kthread);
    + } else {
    + /*
    + * If trylock fails, someone else is doing
    + * the printing
    + */
    + if (console_trylock())
    + console_unlock();
    + }
    }

    if (pending & PRINTK_PENDING_WAKEUP)
    --
    2.8.0
    \
     
     \ /
      Last update: 2016-04-07 18:41    [W:2.378 / U:0.292 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site