diff options
author | Jesper Nilsson <jesper.nilsson@axis.com> | 2008-01-21 05:14:59 -0500 |
---|---|---|
committer | Jesper Nilsson <jesper.nilsson@axis.com> | 2008-02-08 05:06:31 -0500 |
commit | 40316c1fadfcd7856e43029fdbac5df6a1d57063 (patch) | |
tree | 5834f221b657f7ad9d368e1db36386e96786133f /arch/cris/arch-v10 | |
parent | 5712e4dfc65220aa0693e8903345743f80b38230 (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/cris/arch-v10')
-rw-r--r-- | arch/cris/arch-v10/mm/fault.c | 13 |
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 @@ | |||
4 | * Low level bus fault handler | 4 | * Low level bus fault handler |
5 | * | 5 | * |
6 | * | 6 | * |
7 | * Copyright (C) 2000, 2001 Axis Communications AB | 7 | * Copyright (C) 2000-2007 Axis Communications AB |
8 | * | ||
9 | * Authors: Bjorn Wesen | ||
8 | * | 10 | * |
9 | * Authors: Bjorn Wesen | ||
10 | * | ||
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/mm.h> | 13 | #include <linux/mm.h> |
@@ -60,7 +60,7 @@ handle_mmu_bus_fault(struct pt_regs *regs) | |||
60 | #ifdef DEBUG | 60 | #ifdef DEBUG |
61 | page_id = IO_EXTRACT(R_MMU_CAUSE, page_id, cause); | 61 | page_id = IO_EXTRACT(R_MMU_CAUSE, page_id, cause); |
62 | acc = IO_EXTRACT(R_MMU_CAUSE, acc_excp, cause); | 62 | acc = IO_EXTRACT(R_MMU_CAUSE, acc_excp, cause); |
63 | inv = IO_EXTRACT(R_MMU_CAUSE, inv_excp, cause); | 63 | inv = IO_EXTRACT(R_MMU_CAUSE, inv_excp, cause); |
64 | index = IO_EXTRACT(R_TLB_SELECT, index, select); | 64 | index = IO_EXTRACT(R_TLB_SELECT, index, select); |
65 | #endif | 65 | #endif |
66 | miss = IO_EXTRACT(R_MMU_CAUSE, miss_excp, cause); | 66 | miss = IO_EXTRACT(R_MMU_CAUSE, miss_excp, cause); |
@@ -84,12 +84,13 @@ handle_mmu_bus_fault(struct pt_regs *regs) | |||
84 | local_irq_disable(); | 84 | local_irq_disable(); |
85 | pmd = (pmd_t *)(pgd + pgd_index(address)); | 85 | pmd = (pmd_t *)(pgd + pgd_index(address)); |
86 | if (pmd_none(*pmd)) | 86 | if (pmd_none(*pmd)) |
87 | return; | 87 | goto exit; |
88 | pte = *pte_offset_kernel(pmd, address); | 88 | pte = *pte_offset_kernel(pmd, address); |
89 | if (!pte_present(pte)) | 89 | if (!pte_present(pte)) |
90 | return; | 90 | goto exit; |
91 | *R_TLB_SELECT = select; | 91 | *R_TLB_SELECT = select; |
92 | *R_TLB_HI = cause; | 92 | *R_TLB_HI = cause; |
93 | *R_TLB_LO = pte_val(pte); | 93 | *R_TLB_LO = pte_val(pte); |
94 | exit: | ||
94 | local_irq_restore(flags); | 95 | local_irq_restore(flags); |
95 | } | 96 | } |