• Sergey Senozhatsky's avatar
    printk: introduce per-cpu safe_print seq buffer · 099f1c84
    Sergey Senozhatsky authored
    This patch extends the idea of NMI per-cpu buffers to regions
    that may cause recursive printk() calls and possible deadlocks.
    Namely, printk() can't handle printk calls from schedule code
    or printk() calls from lock debugging code (spin_dump() for instance);
    because those may be called with `sem->lock' already taken or any
    other `critical' locks (p->pi_lock, etc.). An example of deadlock
    can be
    
     vprintk_emit()
      console_unlock()
       up()                        << raw_spin_lock_irqsave(&sem->lock, flags);
        wake_up_process()
         try_to_wake_up()
          ttwu_queue()
           ttwu_activate()
            activate_task()
             enqueue_task()
              enqueue_task_fair()
               cfs_rq_of()
                task_of()
                 WARN_ON_ONCE(!entity_is_task(se))
                  vprintk_emit()
                   console_trylock()
                    down_trylock()
                     raw_spin_lock_irqsave(&sem->lock, flags)
                     ^^^^ deadlock
    
    and some other cases.
    
    ...
    099f1c84
Makefile 103 Bytes