aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2006-11-30 22:14:11 -0500
committerPaul Mundt <lethal@linux-sh.org>2006-12-05 20:45:39 -0500
commitbca7c20764c83a44c7b8b0831089922d56a3a9a2 (patch)
tree18c82b8b8e5b3542301421d5e165541ce0d8b5f7 /arch
parent9f650cf2b811cfb605f10483eeb1dc86f43cdbcb (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>
Diffstat (limited to 'arch')
-rw-r--r--arch/sh/mm/fault.c6
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;