Browse Source

CRIS v10: Fix bug where error returns didn't restore irqs in mm/fault.c

Don't return when we're inside local_irq_disable(), use goto exit instead.
Also, cleanup some whitespace errors.
Jesper Nilsson 17 years ago
parent
commit
40316c1fad
1 changed files with 7 additions and 6 deletions
  1. 7 6
      arch/cris/arch-v10/mm/fault.c

+ 7 - 6
arch/cris/arch-v10/mm/fault.c

@@ -4,10 +4,10 @@
  *  Low level bus fault handler
  *
  *
- *  Copyright (C) 2000, 2001  Axis Communications AB
+ *  Copyright (C) 2000-2007  Axis Communications AB
+ *
+ *  Authors:  Bjorn Wesen
  *
- *  Authors:  Bjorn Wesen 
- * 
  */
 
 #include <linux/mm.h>
@@ -60,7 +60,7 @@ handle_mmu_bus_fault(struct pt_regs *regs)
 #ifdef DEBUG
 	page_id = IO_EXTRACT(R_MMU_CAUSE,  page_id,   cause);
 	acc     = IO_EXTRACT(R_MMU_CAUSE,  acc_excp,  cause);
-	inv     = IO_EXTRACT(R_MMU_CAUSE,  inv_excp,  cause);  
+	inv     = IO_EXTRACT(R_MMU_CAUSE,  inv_excp,  cause);
 	index   = IO_EXTRACT(R_TLB_SELECT, index,     select);
 #endif
 	miss    = IO_EXTRACT(R_MMU_CAUSE,  miss_excp, cause);
@@ -84,12 +84,13 @@ handle_mmu_bus_fault(struct pt_regs *regs)
 	local_irq_disable();
 	pmd = (pmd_t *)(pgd + pgd_index(address));
 	if (pmd_none(*pmd))
-		return;
+		goto exit;
 	pte = *pte_offset_kernel(pmd, address);
 	if (!pte_present(pte))
-		return;
+		goto exit;
 	*R_TLB_SELECT = select;
 	*R_TLB_HI = cause;
 	*R_TLB_LO = pte_val(pte);
+exit:
 	local_irq_restore(flags);
 }