• Ingo Molnar's avatar
    x86: fix die() to not be preemptible · c0a698b7
    Ingo Molnar authored
    Andrew "Eagle Eye" Morton noticed that we use raw_local_save_flags()
    instead of raw_local_irq_save(flags) in die(). This allows the
    preemption of oopsing contexts - which is highly undesirable. It also
    causes CONFIG_DEBUG_PREEMPT to complain, as reported by Miles Lane.
    
    this bug was introduced via:
    
      commit 39743c9e
      Author: Andi Kleen <ak@suse.de>
      Date:   Fri Oct 19 20:35:03 2007 +0200
    
          x86: use raw locks during oopses
    
    -               spin_lock_irqsave(&die.lock, flags);
    +               __raw_spin_lock(&die.lock);
    +               raw_local_save_flags(flags);
    
    that is not a correct open-coding of spin_lock_irqsave(): both the
    ordering is wrong (irqs should be disabled _first_), and the wrong
    flags-saving API was used.
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    c0a698b7
traps_32.c 30.8 KB