Hi all,
If xen is compiled with crash_debug=y and the debugger is not
connected, the fault handler enters infinite loop.
The attached patch increments regs->cr_iip.
Thanks.
KAZ
Signed-off-by: Kazuhiro Suzuki <kaz@xxxxxxxxxxxxxx>
diff -r b79802517a75 xen/arch/ia64/vmx/vmx_fault.c
--- a/xen/arch/ia64/vmx/vmx_fault.c Tue Jan 22 09:04:41 2008 -0700
+++ b/xen/arch/ia64/vmx/vmx_fault.c Wed Jan 23 11:37:29 2008 +0900
@@ -181,6 +181,7 @@ vmx_ia64_handle_break (unsigned long ifa
if (iim == 0)
show_registers(regs);
debugger_trap_fatal(0 /* don't care */, regs);
+ ia64_increment_ip(regs);
} else
#endif
{
diff -r b79802517a75 xen/arch/ia64/xen/faults.c
--- a/xen/arch/ia64/xen/faults.c Tue Jan 22 09:04:41 2008 -0700
+++ b/xen/arch/ia64/xen/faults.c Wed Jan 23 10:53:23 2008 +0900
@@ -515,6 +515,7 @@ ia64_handle_break(unsigned long ifa, str
if (iim == 0)
show_registers(regs);
debugger_trap_fatal(0 /* don't care */ , regs);
+ ia64_increment_ip(regs);
}
#endif
else if (iim == d->arch.breakimm &&
diff -r b79802517a75 xen/arch/ia64/xen/xenmisc.c
--- a/xen/arch/ia64/xen/xenmisc.c Tue Jan 22 09:04:41 2008 -0700
+++ b/xen/arch/ia64/xen/xenmisc.c Wed Jan 23 08:41:06 2008 +0900
@@ -140,3 +140,15 @@ void panic_domain(struct pt_regs *regs,
show_registers(regs);
domain_crash_synchronous ();
}
+
+#ifdef CRASH_DEBUG
+void ia64_increment_ip(struct pt_regs *regs)
+{
+ struct ia64_psr *ipsr = (struct ia64_psr *)®s->cr_ipsr;
+ if (ipsr->ri == 2) {
+ ipsr->ri = 0;
+ regs->cr_iip += 16;
+ } else
+ ipsr->ri++;
+}
+#endif
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel
|