[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] [IA64] Enable PV domain debugging.



# HG changeset patch
# User Alex Williamson <alex.williamson@xxxxxx>
# Date 1182534284 21600
# Node ID 4d159746d0e6e2bf12c90c9e444104327d195dad
# Parent  6b1b119191f1c27daec93a11a9a387b85149c021
[IA64] Enable PV domain debugging.

Signed-off-by: Tristan Gingold <tgingold@xxxxxxx>
---
 xen/arch/ia64/xen/faults.c                  |   17 ++++++----
 xen/include/asm-ia64/debugger.h             |   45 ++++++++--------------------
 xen/include/asm-ia64/linux-xen/asm/ptrace.h |    1 
 3 files changed, 26 insertions(+), 37 deletions(-)

diff -r 6b1b119191f1 -r 4d159746d0e6 xen/arch/ia64/xen/faults.c
--- a/xen/arch/ia64/xen/faults.c        Thu Jun 21 16:50:55 2007 -0600
+++ b/xen/arch/ia64/xen/faults.c        Fri Jun 22 11:44:44 2007 -0600
@@ -647,6 +647,11 @@ ia64_handle_reflection(unsigned long ifa
                PSCB(current, iim) = iim;
                vector = IA64_SPECULATION_VECTOR;
                break;
+       case 29:
+               vector = IA64_DEBUG_VECTOR;
+               if (debugger_trap_entry(vector,regs))
+                       return;
+               break;
        case 30:
                // FIXME: Should we handle unaligned refs in Xen??
                vector = IA64_UNALIGNED_REF_VECTOR;
@@ -681,19 +686,19 @@ ia64_handle_reflection(unsigned long ifa
                vector = IA64_LOWERPRIV_TRANSFER_TRAP_VECTOR;
                break;
        case 35:
-               printk("ia64_handle_reflection: handling taken branch trap\n");
                vector = IA64_TAKEN_BRANCH_TRAP_VECTOR;
+               if (debugger_trap_entry(vector,regs))
+                       return;
                break;
        case 36:
-               printk("ia64_handle_reflection: handling single step trap\n");
                vector = IA64_SINGLE_STEP_TRAP_VECTOR;
+               if (debugger_trap_entry(vector,regs))
+                       return;
                break;
 
        default:
-               printk("ia64_handle_reflection: unhandled vector=0x%lx\n",
-                      vector);
-               while (vector)
-                       /* spin */;
+               panic_domain(regs, "ia64_handle_reflection: "
+                            "unhandled vector=0x%lx\n", vector);
                return;
        }
        if (check_lazy_cover && (isr & IA64_ISR_IR) &&
diff -r 6b1b119191f1 -r 4d159746d0e6 xen/include/asm-ia64/debugger.h
--- a/xen/include/asm-ia64/debugger.h   Thu Jun 21 16:50:55 2007 -0600
+++ b/xen/include/asm-ia64/debugger.h   Fri Jun 22 11:44:44 2007 -0600
@@ -56,13 +56,6 @@ show_execution_state(struct cpu_user_reg
 #ifdef CRASH_DEBUG
 // crash_debug=y
 
-/* The main trap handlers use these helper macros which include early bail. */
-static inline int debugger_trap_entry(
-    unsigned int vector, struct cpu_user_regs *regs)
-{
-    return 0;
-}
-
 extern int __trap_to_cdb(struct cpu_user_regs *r);
 static inline int debugger_trap_fatal(
     unsigned int vector, struct cpu_user_regs *regs)
@@ -80,31 +73,7 @@ static inline int debugger_trap_fatal(
 #define smp_send_stop()        /* nothing */
 #endif
 
-#elif defined DOMU_DEBUG
-// domu_debug=y
-#warning "domu_debug is not implemented yet."
-/* The main trap handlers use these helper macros which include early bail. */
-static inline int debugger_trap_entry(
-    unsigned int vector, struct cpu_user_regs *regs)
-{
-    return 0;
-}
-
-static inline int debugger_trap_fatal(
-    unsigned int vector, struct cpu_user_regs *regs)
-{
-    return 0;
-}
-
-#define debugger_trap_immediate()              ((void)0)
 #else
-/* The main trap handlers use these helper macros which include early bail. */
-static inline int debugger_trap_entry(
-    unsigned int vector, struct cpu_user_regs *regs)
-{
-    return 0;
-}
-
 static inline int debugger_trap_fatal(
     unsigned int vector, struct cpu_user_regs *regs)
 {
@@ -113,6 +82,20 @@ static inline int debugger_trap_fatal(
 
 #define debugger_trap_immediate()              ((void)0)
 #endif
+
+static inline int debugger_trap_entry(
+    unsigned int vector, struct cpu_user_regs *regs)
+{
+    struct vcpu *v = current;
+
+    if (guest_kernel_mode(regs) && v->domain->debugger_attached) {
+        domain_pause_for_debugger();
+        return 1;
+    }
+
+    return 0;
+}
+
 #endif // __ASSEMBLLY__
 
 #endif /* __ASM_DEBUGGER_H__ */
diff -r 6b1b119191f1 -r 4d159746d0e6 xen/include/asm-ia64/linux-xen/asm/ptrace.h
--- a/xen/include/asm-ia64/linux-xen/asm/ptrace.h       Thu Jun 21 16:50:55 
2007 -0600
+++ b/xen/include/asm-ia64/linux-xen/asm/ptrace.h       Fri Jun 22 11:44:44 
2007 -0600
@@ -267,6 +267,7 @@ struct switch_stack {
 # define ia64_psr(regs)                        ((struct ia64_psr *) 
&(regs)->cr_ipsr)
 #ifdef XEN
 # define guest_mode(regs)              (ia64_psr(regs)->cpl != 0)
+# define guest_kernel_mode(regs)       (ia64_psr(regs)->cpl == 2)
 #else
 # define user_mode(regs)               (((struct ia64_psr *) 
&(regs)->cr_ipsr)->cpl != 0)
 #endif

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.