x86: Use a common lock for printing all trapframes
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 21 Jan 2016 16:57:15 +0000 (11:57 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 2 Feb 2016 22:43:52 +0000 (17:43 -0500)
The lock is just there for sanity reasons.  What happens on occasion is
that the kernel faults on multiple cores at the same time and tries to
print trapframes at the same time.  Those get interleaved, which is a minor
pain.  Using different locks for different TF types doesn't actually help,
so this just uses the one lock.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/arch/x86/trap64.c

index 5fffe6b..4426d6c 100644 (file)
 #include <kdebug.h>
 #include <kmalloc.h>
 
+static spinlock_t ptf_lock = SPINLOCK_INITIALIZER_IRQSAVE;
+
 void print_trapframe(struct hw_trapframe *hw_tf)
 {
-       static spinlock_t ptf_lock = SPINLOCK_INITIALIZER_IRQSAVE;
-
        struct per_cpu_info *pcpui = &per_cpu_info[core_id()];
        /* This is only called in debug scenarios, and often when the kernel trapped
         * and needs to tell us about it.  Disable the lock checker so it doesn't go
@@ -79,8 +79,8 @@ void print_trapframe(struct hw_trapframe *hw_tf)
 
 void print_swtrapframe(struct sw_trapframe *sw_tf)
 {
-       static spinlock_t ptf_lock = SPINLOCK_INITIALIZER_IRQSAVE;
        struct per_cpu_info *pcpui = &per_cpu_info[core_id()];
+
        pcpui->__lock_checking_enabled--;
        spin_lock_irqsave(&ptf_lock);
        printk("SW TRAP frame %sat %p on core %d\n",