summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorJesper Nilsson <jesper.nilsson@axis.com>2008-01-21 11:14:59 +0100
committerJesper Nilsson <jesper.nilsson@axis.com>2008-02-08 11:06:31 +0100
commit40316c1fadfcd7856e43029fdbac5df6a1d57063 (patch)
tree5834f221b657f7ad9d368e1db36386e96786133f /arch
parent5712e4dfc65220aa0693e8903345743f80b38230 (diff)
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.
Diffstat (limited to 'arch')
-rw-r--r--arch/cris/arch-v10/mm/fault.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/arch/cris/arch-v10/mm/fault.c b/arch/cris/arch-v10/mm/fault.c
index fe2615022b97..65504fd80928 100644
--- a/arch/cris/arch-v10/mm/fault.c
+++ b/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);
}