diff options
author | Paul Mundt <lethal@linux-sh.org> | 2006-11-30 22:14:11 -0500 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2006-12-05 20:45:39 -0500 |
commit | bca7c20764c83a44c7b8b0831089922d56a3a9a2 (patch) | |
tree | 18c82b8b8e5b3542301421d5e165541ce0d8b5f7 | |
parent | 9f650cf2b811cfb605f10483eeb1dc86f43cdbcb (diff) |
sh: Get the PGD right in oops case with 64-bit PTEs.
Previously this was using a static pgd shift in the reporting
code, simply flip this to PGDIR_SHIFT which does the right
thing depending on varying PTE magnitudes on the SH-X2 MMU.
While we're at it, and since it's been recently added, use
get_TTB() for fetching the TTB, rather than the open coded
instructions.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
-rw-r--r-- | arch/sh/mm/fault.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/arch/sh/mm/fault.c b/arch/sh/mm/fault.c index 123fb80c859d..cfeefc10e254 100644 --- a/arch/sh/mm/fault.c +++ b/arch/sh/mm/fault.c | |||
@@ -174,11 +174,9 @@ no_context: | |||
174 | printk(KERN_ALERT "Unable to handle kernel paging request"); | 174 | printk(KERN_ALERT "Unable to handle kernel paging request"); |
175 | printk(" at virtual address %08lx\n", address); | 175 | printk(" at virtual address %08lx\n", address); |
176 | printk(KERN_ALERT "pc = %08lx\n", regs->pc); | 176 | printk(KERN_ALERT "pc = %08lx\n", regs->pc); |
177 | asm volatile("mov.l %1, %0" | 177 | page = (unsigned long)get_TTB(); |
178 | : "=r" (page) | ||
179 | : "m" (__m(MMU_TTB))); | ||
180 | if (page) { | 178 | if (page) { |
181 | page = ((unsigned long *) page)[address >> 22]; | 179 | page = ((unsigned long *) page)[address >> PGDIR_SHIFT]; |
182 | printk(KERN_ALERT "*pde = %08lx\n", page); | 180 | printk(KERN_ALERT "*pde = %08lx\n", page); |
183 | if (page & _PAGE_PRESENT) { | 181 | if (page & _PAGE_PRESENT) { |
184 | page &= PAGE_MASK; | 182 | page &= PAGE_MASK; |