diff options
Diffstat (limited to 'arch/mips64/mm')
-rw-r--r-- | arch/mips64/mm/fault.c | 16 |
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, |