WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-ia64-devel

Re: [Xen-ia64-devel] [PATCH]Fix infinite loop in fault handler if debugg

To: alex.williamson@xxxxxx
Subject: Re: [Xen-ia64-devel] [PATCH]Fix infinite loop in fault handler if debugger is not connected
From: SUZUKI Kazuhiro <kaz@xxxxxxxxxxxxxx>
Date: Wed, 30 Jan 2008 18:40:09 +0900 (JST)
Cc: xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
Delivery-date: Wed, 30 Jan 2008 01:40:39 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
In-reply-to: <1201534558.6783.3.camel@lappy>
List-help: <mailto:xen-ia64-devel-request@lists.xensource.com?subject=help>
List-id: Discussion of the ia64 port of Xen <xen-ia64-devel.lists.xensource.com>
List-post: <mailto:xen-ia64-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ia64-devel>, <mailto:xen-ia64-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ia64-devel>, <mailto:xen-ia64-devel-request@lists.xensource.com?subject=unsubscribe>
References: <20080123.173905.61770464.kaz@xxxxxxxxxxxxxxxxxx> <1201534558.6783.3.camel@lappy>
Sender: xen-ia64-devel-bounces@xxxxxxxxxxxxxxxxxxx
Hi Alex,

Thank you for your comment.

vcpu_increment_iip() takes a pointer of struct vcpu and calculate regs
from vcpu.
If current->arch._thread.on_ustack == 1 then regs == vcpu_regs(current),
otherwise regs is created in the stack. vcpu_regs(current) indicates
guest's registers.
So we cannot use vcpu_increment_iip() in this part.

How about this patch. 

Thanks.
KAZ

Signed-off-by: Kazuhiro Suzuki <kaz@xxxxxxxxxxxxxx>


From: Alex Williamson <alex.williamson@xxxxxx>
Subject: Re: [Xen-ia64-devel] [PATCH]Fix infinite loop in fault handler if 
debugger is not connected
Date: Mon, 28 Jan 2008 08:35:58 -0700

> 
> On Wed, 2008-01-23 at 17:39 +0900, SUZUKI Kazuhiro wrote:
> > 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.
> 
>    Wouldn't it make more sense to call vcpu_increment_iip() instead of
> creating a debug version that only slightly shortcuts the code?  Thanks,
> 
>       Alex
> 
> -- 
> Alex Williamson                             HP Open Source & Linux Org.
> 
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 30 18:06:35 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);
+        regs_increment_iip(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 30 18:06:52 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);
+               regs_increment_iip(regs);
        }
 #endif
        else if (iim == d->arch.breakimm &&
diff -r b79802517a75 xen/arch/ia64/xen/vcpu.c
--- a/xen/arch/ia64/xen/vcpu.c  Tue Jan 22 09:04:41 2008 -0700
+++ b/xen/arch/ia64/xen/vcpu.c  Wed Jan 30 18:04:34 2008 +0900
@@ -804,12 +804,7 @@ IA64FAULT vcpu_increment_iip(VCPU * vcpu
 IA64FAULT vcpu_increment_iip(VCPU * vcpu)
 {
        REGS *regs = vcpu_regs(vcpu);
-       struct ia64_psr *ipsr = (struct ia64_psr *)&regs->cr_ipsr;
-       if (ipsr->ri == 2) {
-               ipsr->ri = 0;
-               regs->cr_iip += 16;
-       } else
-               ipsr->ri++;
+       regs_increment_iip(regs);
        return IA64_NO_FAULT;
 }
 
diff -r b79802517a75 xen/include/asm-ia64/linux-xen/asm/ptrace.h
--- a/xen/include/asm-ia64/linux-xen/asm/ptrace.h       Tue Jan 22 09:04:41 
2008 -0700
+++ b/xen/include/asm-ia64/linux-xen/asm/ptrace.h       Wed Jan 30 18:04:03 
2008 +0900
@@ -281,6 +281,15 @@ struct switch_stack {
 # define guest_mode(regs)              (ia64_psr(regs)->cpl != 0)
 # define guest_kernel_mode(regs)       (ia64_psr(regs)->cpl == 
CONFIG_CPL0_EMUL)
 # define vmx_guest_kernel_mode(regs)   (ia64_psr(regs)->cpl == 0)
+# define regs_increment_iip(regs)                                      \
+do {                                                                   \
+       struct ia64_psr *ipsr = (struct ia64_psr *)&regs->cr_ipsr;      \
+       if (ipsr->ri == 2) {                                            \
+               ipsr->ri = 0;                                           \
+               regs->cr_iip += 16;                                     \
+       } else                                                          \
+               ipsr->ri++;                                             \
+} while        (0)
 #else
 # define user_mode(regs)               (((struct ia64_psr *) 
&(regs)->cr_ipsr)->cpl != 0)
 #endif
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel