• Tejun Heo's avatar
    printk: do cond_resched() between lines while outputting to consoles · a623f87a
    Tejun Heo authored
    commit 8d91f8b1 upstream.
    
    @console_may_schedule tracks whether console_sem was acquired through
    lock or trylock.  If the former, we're inside a sleepable context and
    console_conditional_schedule() performs cond_resched().  This allows
    console drivers which use console_lock for synchronization to yield
    while performing time-consuming operations such as scrolling.
    
    However, the actual console outputting is performed while holding
    irq-safe logbuf_lock, so console_unlock() clears @console_may_schedule
    before starting outputting lines.  Also, only a few drivers call
    console_conditional_schedule() to begin with.  This means that when a
    lot of lines need to be output by console_unlock(), for example on a
    console registration, the task doing console_unlock() may not yield for
    a long time on a non-preemptible kernel.
    
    If this happens with a slow console devices, for example a serial
    console, the outputting task ma...
    a623f87a
panic.c 13 KB