diff options
| author | Joakim Tjernlund <joakim.tjernlund@transmode.se> | 2009-11-19 19:21:02 -0500 |
|---|---|---|
| committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2009-12-09 01:10:35 -0500 |
| commit | 5efab4a02c89c252fb4cce097aafde5f8208dbfe (patch) | |
| tree | 52816daf92f813f8b53149ff2f177337d313e22d | |
| parent | 0285ae37d4366b2d614df0c83cb413cf59ad8944 (diff) | |
powerpc/8xx: Invalidate non present TLBs
8xx sometimes need to load a invalid/non-present TLBs in
it DTLB asm handler.
These must be invalidated separaly as linux mm don't.
Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
| -rw-r--r-- | arch/powerpc/mm/fault.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c index e7dae82c1285..26fb6b990b0a 100644 --- a/arch/powerpc/mm/fault.c +++ b/arch/powerpc/mm/fault.c | |||
| @@ -40,7 +40,7 @@ | |||
| 40 | #include <asm/uaccess.h> | 40 | #include <asm/uaccess.h> |
| 41 | #include <asm/tlbflush.h> | 41 | #include <asm/tlbflush.h> |
| 42 | #include <asm/siginfo.h> | 42 | #include <asm/siginfo.h> |
| 43 | 43 | #include <mm/mmu_decl.h> | |
| 44 | 44 | ||
| 45 | #ifdef CONFIG_KPROBES | 45 | #ifdef CONFIG_KPROBES |
| 46 | static inline int notify_page_fault(struct pt_regs *regs) | 46 | static inline int notify_page_fault(struct pt_regs *regs) |
| @@ -246,6 +246,12 @@ good_area: | |||
| 246 | goto bad_area; | 246 | goto bad_area; |
| 247 | #endif /* CONFIG_6xx */ | 247 | #endif /* CONFIG_6xx */ |
| 248 | #if defined(CONFIG_8xx) | 248 | #if defined(CONFIG_8xx) |
| 249 | /* 8xx sometimes need to load a invalid/non-present TLBs. | ||
| 250 | * These must be invalidated separately as linux mm don't. | ||
| 251 | */ | ||
| 252 | if (error_code & 0x40000000) /* no translation? */ | ||
| 253 | _tlbil_va(address, 0, 0, 0); | ||
| 254 | |||
| 249 | /* The MPC8xx seems to always set 0x80000000, which is | 255 | /* The MPC8xx seems to always set 0x80000000, which is |
| 250 | * "undefined". Of those that can be set, this is the only | 256 | * "undefined". Of those that can be set, this is the only |
| 251 | * one which seems bad. | 257 | * one which seems bad. |
