• C
    i386: Fix double fault handler · 3dab307e
    Chuck Ebbert 提交于
    The new percpu code has apparently broken the doublefault handler
    when CONFIG_DEBUG_SPINLOCK is set. Doublefault is handled by
    a hardware task, making the check
    
            SPIN_BUG_ON(lock->owner == current, lock, "recursion");
    
    fault because it uses the FS register to access the percpu data
    for current, and that register is zero in the new TSS. (The trace
    I saw was on 2.6.20 where it was GS, but it looks like this will
    still happen with FS on 2.6.22.)
    
    Initializing FS in the doublefault_tss should fix it.
    
    AK: Also fix broken ptr_ok() and turn printks into KERN_EMERG
    AK: And add a PANIC prefix to make clear the system will hang
    AK: (e.g. x86-64 will recover)
    Signed-off-by: NChuck Ebbert <cebbert@redhat.com>
    Signed-off-by: NAndi Kleen <ak@suse.de>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    3dab307e
doublefault.c 1.7 KB