On non-book-E, if a faulting PC is in the first few pages, and it's not an
ITLB miss, it's likely executing in real mode, probably at an exception vector.

Rather than print a useless XXXXXXXX, it is assumed that this is the case, and
the address is treated as physical.  This helps when debugging corruption at
the beginning of memory.

Signed-off-by: Scott Wood <[EMAIL PROTECTED]>
---
 arch/powerpc/kernel/process.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index 57c589c..7cb94d7 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -354,6 +354,14 @@ static void show_instructions(struct pt_regs *regs)
                if (!(i % 8))
                        printk("\n");
 
+#ifndef CONFIG_BOOKE
+               /* If the address is in the first couple pages, it's
+                * likely executing in real mode.
+                */
+               if (regs->nip < 0x4000)
+                       pc += (unsigned long)phys_to_virt(KERNELBASE);
+#endif
+
                /* We use __get_user here *only* to avoid an OOPS on a
                 * bad address because the pc *should* only be a
                 * kernel address.
-- 
1.5.3.1
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Reply via email to