summaryrefslogtreecommitdiffstats
path: root/arch/mips64/mm
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips64/mm')
-rw-r--r--arch/mips64/mm/fault.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/arch/mips64/mm/fault.c b/arch/mips64/mm/fault.c
index 204419e98..c8f4534d4 100644
--- a/arch/mips64/mm/fault.c
+++ b/arch/mips64/mm/fault.c
@@ -57,6 +57,19 @@ dodebug2(abi64_no_regargs, struct pt_regs regs)
printk("Got exception 0x%lx at 0x%lx\n", retaddr, regs.cp0_epc);
}
+extern spinlock_t console_lock, timerlist_lock;
+
+/*
+ * Unlock any spinlocks which will prevent us from getting the
+ * message out (timerlist_lock is aquired through the
+ * console unblank code)
+ */
+void bust_spinlocks(void)
+{
+ spin_lock_init(&console_lock);
+ spin_lock_init(&timerlist_lock);
+}
+
/*
* This routine handles page faults. It determines the address,
* and the problem, and then passes it off to one of the appropriate
@@ -181,6 +194,9 @@ no_context:
* Oops. The kernel tried to access some bad page. We'll have to
* terminate things with extreme prejudice.
*/
+
+ bust_spinlocks();
+
printk(KERN_ALERT "Cpu %d Unable to handle kernel paging request at "
"address %08lx, epc == %08x, ra == %08x\n",
smp_processor_id(), address, (unsigned int) regs->cp0_epc,