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

[Xen-changelog] Cleanups for printing debug tracing to the console.



ChangeSet 1.1412, 2005/05/16 09:41:49+01:00, kaf24@xxxxxxxxxxxxxxxxxxxx

        Cleanups for printing debug tracing to the console.
        Also, rename get_cpu_user_regs -> guest_cpu_user_regs.
        Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>



 arch/ia64/xenmisc.c              |    2 
 arch/x86/domain.c                |    8 +--
 arch/x86/mm.c                    |    2 
 arch/x86/traps.c                 |   91 +++++++++++++++++++++++++++++++++++++++
 arch/x86/vmx_intercept.c         |    2 
 arch/x86/vmx_io.c                |    2 
 arch/x86/vmx_vmcs.c              |    2 
 arch/x86/x86_32/traps.c          |   75 --------------------------------
 arch/x86/x86_64/traps.c          |   77 ---------------------------------
 common/domain.c                  |    5 +-
 common/schedule.c                |    4 -
 drivers/char/console.c           |   15 +++---
 include/asm-x86/x86_32/current.h |    4 -
 include/asm-x86/x86_64/current.h |    4 -
 14 files changed, 121 insertions(+), 172 deletions(-)


diff -Nru a/xen/arch/ia64/xenmisc.c b/xen/arch/ia64/xenmisc.c
--- a/xen/arch/ia64/xenmisc.c   2005-05-16 05:04:09 -04:00
+++ b/xen/arch/ia64/xenmisc.c   2005-05-16 05:04:09 -04:00
@@ -72,7 +72,7 @@
        return;
 }
 
-struct pt_regs *get_cpu_user_regs(void) { return ia64_task_regs(current); }
+struct pt_regs *guest_cpu_user_regs(void) { return ia64_task_regs(current); }
 
 void raise_actimer_softirq(void)
 {
diff -Nru a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
--- a/xen/arch/x86/domain.c     2005-05-16 05:04:09 -04:00
+++ b/xen/arch/x86/domain.c     2005-05-16 05:04:09 -04:00
@@ -607,7 +607,7 @@
 
     if ( unlikely(!all_segs_okay) )
     {
-        struct cpu_user_regs *regs = get_cpu_user_regs();
+        struct cpu_user_regs *regs = guest_cpu_user_regs();
         unsigned long   *rsp =
             (n->arch.flags & TF_kernel_mode) ?
             (unsigned long *)regs->rsp : 
@@ -666,7 +666,7 @@
 
 long do_switch_to_user(void)
 {
-    struct cpu_user_regs  *regs = get_cpu_user_regs();
+    struct cpu_user_regs  *regs = guest_cpu_user_regs();
     struct switch_to_user  stu;
     struct exec_domain    *ed = current;
 
@@ -715,7 +715,7 @@
 
 static void __context_switch(void)
 {
-    struct cpu_user_regs *stack_regs = get_cpu_user_regs();
+    struct cpu_user_regs *stack_regs = guest_cpu_user_regs();
     unsigned int         cpu = smp_processor_id();
     struct exec_domain  *p = percpu_ctxt[cpu].curr_ed;
     struct exec_domain  *n = current;
@@ -851,7 +851,7 @@
     }
     else
     {
-        regs       = get_cpu_user_regs();
+        regs       = guest_cpu_user_regs();
 #if defined(__i386__)
         regs->eax  = op;
         regs->eip -= 2;  /* re-execute 'int 0x82' */
diff -Nru a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
--- a/xen/arch/x86/mm.c 2005-05-16 05:04:09 -04:00
+++ b/xen/arch/x86/mm.c 2005-05-16 05:04:09 -04:00
@@ -2836,7 +2836,7 @@
     return EXCRET_fault_fixed;
 
  emulate:
-    if ( x86_emulate_memop(get_cpu_user_regs(), addr,
+    if ( x86_emulate_memop(guest_cpu_user_regs(), addr,
                            &ptwr_mem_emulator, BITS_PER_LONG/8) )
         return 0;
     perfc_incrc(ptwr_emulations);
diff -Nru a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c
--- a/xen/arch/x86/traps.c      2005-05-16 05:04:09 -04:00
+++ b/xen/arch/x86/traps.c      2005-05-16 05:04:10 -04:00
@@ -90,6 +90,97 @@
 asmlinkage void spurious_interrupt_bug(void);
 asmlinkage void machine_check(void);
 
+static int debug_stack_lines = 20;
+integer_param("debug_stack_lines", debug_stack_lines);
+
+static inline int kernel_text_address(unsigned long addr)
+{
+    if (addr >= (unsigned long) &_stext &&
+        addr <= (unsigned long) &_etext)
+        return 1;
+    return 0;
+
+}
+
+void show_guest_stack(void)
+{
+    int i;
+    struct cpu_user_regs *regs = guest_cpu_user_regs();
+    unsigned long *stack = (unsigned long *)regs->esp, addr;
+
+    printk("Guest stack trace from "__OP"sp=%p:\n   ", stack);
+
+    for ( i = 0; i < (debug_stack_lines*8); i++ )
+    {
+        if ( ((long)stack & (STACK_SIZE-1)) == 0 )
+            break;
+        if ( get_user(addr, stack) )
+        {
+            if ( i != 0 )
+                printk("\n    ");
+            printk("Fault while accessing guest memory.");
+            i = 1;
+            break;
+        }
+        if ( (i != 0) && ((i % 8) == 0) )
+            printk("\n   ");
+        printk("%p ", _p(addr));
+        stack++;
+    }
+    if ( i == 0 )
+        printk("Stack empty.");
+    printk("\n");
+}
+
+void show_trace(unsigned long *esp)
+{
+    unsigned long *stack = esp, addr;
+    int i = 0;
+
+    printk("Xen call trace from "__OP"sp=%p:\n   ", stack);
+
+    while ( ((long) stack & (STACK_SIZE-1)) != 0 )
+    {
+        addr = *stack++;
+        if ( kernel_text_address(addr) )
+        {
+            if ( (i != 0) && ((i % 6) == 0) )
+                printk("\n   ");
+            printk("[<%p>] ", _p(addr));
+            i++;
+        }
+    }
+    if ( i == 0 )
+        printk("Trace empty.");
+    printk("\n");
+}
+
+void show_stack(unsigned long *esp)
+{
+    unsigned long *stack = esp, addr;
+    int i;
+
+    printk("Xen stack trace from "__OP"sp=%p:\n   ", stack);
+
+    for ( i = 0; i < (debug_stack_lines*8); i++ )
+    {
+        if ( ((long)stack & (STACK_SIZE-1)) == 0 )
+            break;
+        if ( (i != 0) && ((i % 8) == 0) )
+            printk("\n   ");
+        addr = *stack++;
+        if ( kernel_text_address(addr) )
+            printk("[%p] ", _p(addr));
+        else
+            printk("%p ", _p(addr));
+    }
+    if ( i == 0 )
+        printk("Stack empty.");
+    printk("\n");
+
+    show_trace(esp);
+}
+
 /*
  * This is called for faults at very unexpected times (e.g., when interrupts
  * are disabled). In such situations we can't do much that is safe. We try to
diff -Nru a/xen/arch/x86/vmx_intercept.c b/xen/arch/x86/vmx_intercept.c
--- a/xen/arch/x86/vmx_intercept.c      2005-05-16 05:04:10 -04:00
+++ b/xen/arch/x86/vmx_intercept.c      2005-05-16 05:04:10 -04:00
@@ -140,7 +140,7 @@
 /* vmx_io_assist light-weight version, specific to PIT DM */ 
 static void resume_pit_io(ioreq_t *p)
 {
-    struct cpu_user_regs *regs = get_cpu_user_regs();
+    struct cpu_user_regs *regs = guest_cpu_user_regs();
     unsigned long old_eax = regs->eax;
     p->state = STATE_INVALID;
 
diff -Nru a/xen/arch/x86/vmx_io.c b/xen/arch/x86/vmx_io.c
--- a/xen/arch/x86/vmx_io.c     2005-05-16 05:04:09 -04:00
+++ b/xen/arch/x86/vmx_io.c     2005-05-16 05:04:09 -04:00
@@ -187,7 +187,7 @@
     vcpu_iodata_t *vio;
     ioreq_t *p;
     struct domain *d = ed->domain;
-    struct cpu_user_regs *regs = get_cpu_user_regs();
+    struct cpu_user_regs *regs = guest_cpu_user_regs();
     unsigned long old_eax;
     int sign;
     struct mi_per_cpu_info *mpci_p;
diff -Nru a/xen/arch/x86/vmx_vmcs.c b/xen/arch/x86/vmx_vmcs.c
--- a/xen/arch/x86/vmx_vmcs.c   2005-05-16 05:04:10 -04:00
+++ b/xen/arch/x86/vmx_vmcs.c   2005-05-16 05:04:10 -04:00
@@ -162,7 +162,7 @@
     struct Xgt_desc_struct desc;
     unsigned long pfn = 0;
     struct pfn_info *page;
-    struct cpu_user_regs *regs = get_cpu_user_regs();
+    struct cpu_user_regs *regs = guest_cpu_user_regs();
 
     vmx_stts();
     set_bit(_VCPUF_guest_stts, &ed->vcpu_flags);
diff -Nru a/xen/arch/x86/x86_32/traps.c b/xen/arch/x86/x86_32/traps.c
--- a/xen/arch/x86/x86_32/traps.c       2005-05-16 05:04:09 -04:00
+++ b/xen/arch/x86/x86_32/traps.c       2005-05-16 05:04:09 -04:00
@@ -15,81 +15,6 @@
 /* All CPUs have their own IDT to allow set_fast_trap(). */
 idt_entry_t *idt_tables[NR_CPUS] = { 0 };
 
-static int kstack_depth_to_print = 8*20;
-
-static inline int kernel_text_address(unsigned long addr)
-{
-    if (addr >= (unsigned long) &_stext &&
-        addr <= (unsigned long) &_etext)
-        return 1;
-    return 0;
-
-}
-
-void show_guest_stack(void)
-{
-    int i;
-    struct cpu_user_regs *regs = get_cpu_user_regs();
-    unsigned long *stack = (unsigned long *)regs->esp;
-
-    printk("Guest EIP is %08x\n   ", regs->eip);
-
-    for ( i = 0; i < kstack_depth_to_print; i++ )
-    {
-        if ( ((long)stack & (STACK_SIZE-1)) == 0 )
-            break;
-        if ( i && ((i % 8) == 0) )
-            printk("\n   ");
-        printk("%08lx ", *stack++);
-    }
-    printk("\n");
-    
-}
-
-void show_trace(unsigned long *esp)
-{
-    unsigned long *stack, addr;
-    int i;
-
-    printk("Call Trace from ESP=%p:\n   ", esp);
-    stack = esp;
-    i = 0;
-    while (((long) stack & (STACK_SIZE-1)) != 0) {
-        addr = *stack++;
-        if (kernel_text_address(addr)) {
-            if (i && ((i % 6) == 0))

_______________________________________________
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®.