• Lukas Wunner's avatar
    panic: Reenable preemption in WARN slowpath · cccd3281
    Lukas Wunner authored
    Commit:
    
      5a5d7e9b ("cpuidle: lib/bug: Disable rcu_is_watching() during WARN/BUG")
    
    amended warn_slowpath_fmt() to disable preemption until the WARN splat
    has been emitted.
    
    However the commit neglected to reenable preemption in the !fmt codepath,
    i.e. when a WARN splat is emitted without additional format string.
    
    One consequence is that users may see more splats than intended.  E.g. a
    WARN splat emitted in a work item results in at least two extra splats:
    
      BUG: workqueue leaked lock or atomic
      (emitted by process_one_work())
    
      BUG: scheduling while atomic
      (emitted by worker_thread() -> schedule())
    
    Ironically the point of the commit was to *avoid* extra splats. ;)
    
    Fix it.
    
    Fixes: 5a5d7e9b ("cpuidle: lib/bug: Disable rcu_is_watching() during WARN/BUG")
    Signed-off-by: default avatarLukas Wunner <lukas@wunner.de>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Paul E. McKenney <paulmck@kernel.org>
    Link: https://lore.kernel.org/r/3ec48fde01e4ee6505f77908ba351bad200ae3d1.1694763684.git.lukas@wunner.de
    cccd3281
panic.c 20.4 KB