diff options
Diffstat (limited to 'arch/sh/mm/fault_32.c')
-rw-r--r-- | arch/sh/mm/fault_32.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/arch/sh/mm/fault_32.c b/arch/sh/mm/fault_32.c index 33b43d20e9f6..d1fa27594c6e 100644 --- a/arch/sh/mm/fault_32.c +++ b/arch/sh/mm/fault_32.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/mm.h> | 15 | #include <linux/mm.h> |
16 | #include <linux/hardirq.h> | 16 | #include <linux/hardirq.h> |
17 | #include <linux/kprobes.h> | 17 | #include <linux/kprobes.h> |
18 | #include <asm/io_trapped.h> | ||
18 | #include <asm/system.h> | 19 | #include <asm/system.h> |
19 | #include <asm/mmu_context.h> | 20 | #include <asm/mmu_context.h> |
20 | #include <asm/tlbflush.h> | 21 | #include <asm/tlbflush.h> |
@@ -163,6 +164,8 @@ no_context: | |||
163 | if (fixup_exception(regs)) | 164 | if (fixup_exception(regs)) |
164 | return; | 165 | return; |
165 | 166 | ||
167 | if (handle_trapped_io(regs, address)) | ||
168 | return; | ||
166 | /* | 169 | /* |
167 | * Oops. The kernel tried to access some bad page. We'll have to | 170 | * Oops. The kernel tried to access some bad page. We'll have to |
168 | * terminate things with extreme prejudice. | 171 | * terminate things with extreme prejudice. |
@@ -296,6 +299,14 @@ asmlinkage int __kprobes __do_page_fault(struct pt_regs *regs, | |||
296 | entry = pte_mkdirty(entry); | 299 | entry = pte_mkdirty(entry); |
297 | entry = pte_mkyoung(entry); | 300 | entry = pte_mkyoung(entry); |
298 | 301 | ||
302 | #if defined(CONFIG_CPU_SH4) && !defined(CONFIG_SMP) | ||
303 | /* | ||
304 | * ITLB is not affected by "ldtlb" instruction. | ||
305 | * So, we need to flush the entry by ourselves. | ||
306 | */ | ||
307 | local_flush_tlb_one(get_asid(), address & PAGE_MASK); | ||
308 | #endif | ||
309 | |||
299 | set_pte(pte, entry); | 310 | set_pte(pte, entry); |
300 | update_mmu_cache(NULL, address, entry); | 311 | update_mmu_cache(NULL, address, entry); |
301 | 312 | ||