aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc64/mm/fault.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@sunset.davemloft.net>2006-02-13 21:07:45 -0500
committerDavid S. Miller <davem@sunset.davemloft.net>2006-03-20 04:12:38 -0500
commitbf941d6cd62aa2022f0887e25e3d02c389b0bf9b (patch)
tree56c8e87668d29ab96e0d84ba6aa5a62e64d9b827 /arch/sparc64/mm/fault.c
parent6c0f402f6cc62314ef83b975f3430350dcb6055f (diff)
[SPARC64]: Log faulting vaddr when bogus kernel PC detected.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc64/mm/fault.c')
-rw-r--r--arch/sparc64/mm/fault.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/sparc64/mm/fault.c b/arch/sparc64/mm/fault.c
index 439a53c1e560..b97bd054aad3 100644
--- a/arch/sparc64/mm/fault.c
+++ b/arch/sparc64/mm/fault.c
@@ -91,12 +91,13 @@ static void __kprobes unhandled_fault(unsigned long address,
91 die_if_kernel("Oops", regs); 91 die_if_kernel("Oops", regs);
92} 92}
93 93
94static void bad_kernel_pc(struct pt_regs *regs) 94static void bad_kernel_pc(struct pt_regs *regs, unsigned long vaddr)
95{ 95{
96 unsigned long *ksp; 96 unsigned long *ksp;
97 97
98 printk(KERN_CRIT "OOPS: Bogus kernel PC [%016lx] in fault handler\n", 98 printk(KERN_CRIT "OOPS: Bogus kernel PC [%016lx] in fault handler\n",
99 regs->tpc); 99 regs->tpc);
100 printk(KERN_CRIT "OOPS: Fault was to vaddr[%lx]\n", vaddr);
100 __asm__("mov %%sp, %0" : "=r" (ksp)); 101 __asm__("mov %%sp, %0" : "=r" (ksp));
101 show_stack(current, ksp); 102 show_stack(current, ksp);
102 unhandled_fault(regs->tpc, current, regs); 103 unhandled_fault(regs->tpc, current, regs);
@@ -280,7 +281,7 @@ asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs)
280 (tpc >= MODULES_VADDR && tpc < MODULES_END)) { 281 (tpc >= MODULES_VADDR && tpc < MODULES_END)) {
281 /* Valid, no problems... */ 282 /* Valid, no problems... */
282 } else { 283 } else {
283 bad_kernel_pc(regs); 284 bad_kernel_pc(regs, address);
284 return; 285 return;
285 } 286 }
286 } 287 }