Skip to contentSkip to conversation

Make instruction dumping work in real mode.

PATCH Superseded Scott Wood 2 participants 2 messages Sep 25, 2007 – Sep 26, 2007 PowerPC

v2 of 4 Superseded Latest is v4 →

lore
Share & tools
lore

Scott Wood

author
#0 lore raw

PATCH v2 1/1 Make instruction dumping work in real mode.

On non-book-E-or-4xx, exceptions execute in real mode. If a fault happens that leads to a register dump, the kernel currently prints XXXXXXXX because it doesn't realize that PC is a physical address.

This patch checks the state of the IMMU, and if necessary converts PC into a virtual address.

---
This version uses MSR_IR rather than address heuristics, and fixes breakage that somehow crept into the address adjustment in the previous patch.

 arch/powerpc/kernel/process.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)
arch/powerpc/kernel/process.c +8 -0
index 57c589c..6dbde7f 100644
@@ -354,6 +354,14 @@ static void show_instructions(struct pt_regs *regs)
 		if (!(i % 8))
 			printk("\n");
 
+#if !defined(CONFIG_BOOKE) && !defined(CONFIG_40x)
+		/* If executing with the IMMU off, adjust pc rather
+		 * than print XXXXXXXX.
+		 */
+		if (!(regs->msr & MSR_IR))
+			pc = (unsigned long)phys_to_virt(pc);
+#endif
+
 		/* We use __get_user here *only* to avoid an OOPS on a
 		 * bad address because the pc *should* only be a
 		 * kernel address.
Signature · 1 line
1.5.3.1
#1 lore raw
Quoted 20 lines · Scott Wood

On non-book-E-or-4xx, exceptions execute in real mode. If a fault happens that leads to a register dump, the kernel currently prints XXXXXXXX because it doesn't realize that PC is a physical address.

This patch checks the state of the IMMU, and if necessary converts PC into a virtual address.

---
This version uses MSR_IR rather than address heuristics, and fixes breakage that somehow crept into the address adjustment in the previous patch.

 arch/powerpc/kernel/process.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)
arch/powerpc/kernel/process.c +0 -0
index 57c589c..6dbde7f 100644

arch/powerpc/kernel/process.c static void show_instructions(struct pt_regs · line 358

Quoted 5 lines
arch/powerpc/kernel/process.c +1 -0
@@ -354,6 +354,14 @@ static void show_instructions(struct pt_regs  
 *regs)
 		if (!(i % 8))
 			printk("\n");
 
+#if !defined(CONFIG_BOOKE) && !defined(CONFIG_40x)

40x has a real mode and can have the IMMU off.

Quoted 16 lines
arch/powerpc/kernel/process.c +7 -0
+		/* If executing with the IMMU off, adjust pc rather
+		 * than print XXXXXXXX.
+		 */
+		if (!(regs->msr & MSR_IR))
+			pc = (unsigned long)phys_to_virt(pc);
+#endif
+
 		/* We use __get_user here *only* to avoid an OOPS on a
 		 * bad address because the pc *should* only be a

* kernel address.

Signature · 5 lines
1.5.3.1
_______________________________________________
Linuxppc-dev mailing list
[email protected]
https://ozlabs.org/mailman/listinfo/linuxppc-dev