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

[Xen-changelog] Facilitate to debug VTI-domain issue.



# HG changeset patch
# User djm@xxxxxxxxxxxxxxx
# Node ID 3d379e5f3d7fcb9239f1821357fe7f39cf6be695
# Parent  724f412d81abef213d67814100901a187710efa9
Facilitate to debug VTI-domain issue.
Signed-off-by Anthony Xu <anthony.xu@xxxxxxxxx>

diff -r 724f412d81ab -r 3d379e5f3d7f xen/arch/ia64/Rules.mk
--- a/xen/arch/ia64/Rules.mk    Wed Dec 21 15:31:05 2005
+++ b/xen/arch/ia64/Rules.mk    Wed Dec 21 15:33:45 2005
@@ -27,6 +27,7 @@
 CFLAGS  += -DIA64 -DXEN -DLINUX_2_6 -DV_IOSAPIC_READY
 CFLAGS += -ffixed-r13 -mfixed-range=f12-f15,f32-f127
 CFLAGS += -w -g
+#CFLAGS  += -DVTI_DEBUG
 ifeq ($(VALIDATE_VT),y)
 CFLAGS  += -DVALIDATE_VT
 endif
diff -r 724f412d81ab -r 3d379e5f3d7f xen/arch/ia64/asm-offsets.c
--- a/xen/arch/ia64/asm-offsets.c       Wed Dec 21 15:31:05 2005
+++ b/xen/arch/ia64/asm-offsets.c       Wed Dec 21 15:33:45 2005
@@ -34,7 +34,10 @@
        DEFINE(UNW_FRAME_INFO_SIZE, sizeof (struct unw_frame_info));
 
        BLANK();
-
+#ifdef   VTI_DEBUG
+       DEFINE(IVT_CUR_OFS, offsetof(struct vcpu, arch.arch_vmx.ivt_current));
+       DEFINE(IVT_DBG_OFS, offsetof(struct vcpu, arch.arch_vmx.ivt_debug));
+#endif
        DEFINE(TI_FLAGS, offsetof(struct thread_info, flags));
        DEFINE(TI_PRE_COUNT, offsetof(struct thread_info, preempt_count));
 
diff -r 724f412d81ab -r 3d379e5f3d7f xen/arch/ia64/vmx/vmx_ivt.S
--- a/xen/arch/ia64/vmx/vmx_ivt.S       Wed Dec 21 15:31:05 2005
+++ b/xen/arch/ia64/vmx/vmx_ivt.S       Wed Dec 21 15:33:45 2005
@@ -59,13 +59,29 @@
 #include <asm/unistd.h>
 #include <asm/vhpt.h>
 
-
-#if 0
+#ifdef VTI_DEBUG
   /*
    * This lets you track the last eight faults that occurred on the CPU.  Make 
sure ar.k2 isn't
    * needed for something else before enabling this...
    */
-# define VMX_DBG_FAULT(i)      mov r16=ar.k2;; shl r16=r16,8;; add 
r16=(i),r16;;mov ar.k2=r16
+#define VMX_DBG_FAULT(i) \
+    add r16=IVT_CUR_OFS,r21;    \
+    add r17=IVT_DBG_OFS,r21;;   \
+    ld8  r18=[r16];;    \
+    add r17=r18,r17;   \
+    mov r19=cr.iip;     \
+    mov r20=cr.ipsr;    \
+    mov r22=cr.ifa;     \
+    mov r23=i;;          \
+    st8 [r17]=r19,8;   \
+    add r18=32,r18;;     \
+    st8 [r17]=r20,8;    \
+    mov r19=0xfe0;;      \
+    st8 [r17]=r22,8;   \
+    and r18=r19,r18;;   \
+    st8 [r17]=r23;      \
+    st8 [r16]=r18;;     \
+//# define VMX_DBG_FAULT(i)   mov r16=ar.k2;; shl r16=r16,8;; add 
r16=(i),r16;;mov ar.k2=r16
 #else
 # define VMX_DBG_FAULT(i)
 #endif
@@ -107,6 +123,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x0000 Entry 0 (size 64 bundles) VHPT Translation (8,20,47)
 ENTRY(vmx_vhpt_miss)
+    VMX_DBG_FAULT(0)
     VMX_FAULT(0)
 END(vmx_vhpt_miss)
 
@@ -114,6 +131,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x0400 Entry 1 (size 64 bundles) ITLB (21)
 ENTRY(vmx_itlb_miss)
+    VMX_DBG_FAULT(1)
     mov r31 = pr
     mov r29=cr.ipsr;
     ;;
@@ -178,6 +196,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x0800 Entry 2 (size 64 bundles) DTLB (9,48)
 ENTRY(vmx_dtlb_miss)
+    VMX_DBG_FAULT(2)
     mov r31 = pr
     mov r29=cr.ipsr;
     ;;
@@ -242,6 +261,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x0c00 Entry 3 (size 64 bundles) Alt ITLB (19)
 ENTRY(vmx_alt_itlb_miss)
+    VMX_DBG_FAULT(3)
     mov r31 = pr
     mov r29=cr.ipsr;
     ;;
@@ -272,6 +292,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x1000 Entry 4 (size 64 bundles) Alt DTLB (7,46)
 ENTRY(vmx_alt_dtlb_miss)
+    VMX_DBG_FAULT(4)
        mov r31=pr
     mov r29=cr.ipsr;
     ;;
@@ -308,6 +329,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x1400 Entry 5 (size 64 bundles) Data nested TLB (6,45)
 ENTRY(vmx_nested_dtlb_miss)
+    VMX_DBG_FAULT(5)
     VMX_FAULT(5)
 END(vmx_nested_dtlb_miss)
 
@@ -315,6 +337,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x1800 Entry 6 (size 64 bundles) Instruction Key Miss (24)
 ENTRY(vmx_ikey_miss)
+    VMX_DBG_FAULT(6)
        VMX_REFLECT(6)
 END(vmx_ikey_miss)
 
@@ -322,6 +345,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x1c00 Entry 7 (size 64 bundles) Data Key Miss (12,51)
 ENTRY(vmx_dkey_miss)
+    VMX_DBG_FAULT(7)
        VMX_REFLECT(7)
 END(vmx_dkey_miss)
 
@@ -329,6 +353,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x2000 Entry 8 (size 64 bundles) Dirty-bit (54)
 ENTRY(vmx_dirty_bit)
+    VMX_DBG_FAULT(8)
        VMX_REFLECT(8)
 END(vmx_idirty_bit)
 
@@ -336,6 +361,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x2400 Entry 9 (size 64 bundles) Instruction Access-bit (27)
 ENTRY(vmx_iaccess_bit)
+    VMX_DBG_FAULT(9)
        VMX_REFLECT(9)
 END(vmx_iaccess_bit)
 
@@ -343,6 +369,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x2800 Entry 10 (size 64 bundles) Data Access-bit (15,55)
 ENTRY(vmx_daccess_bit)
+    VMX_DBG_FAULT(10)
        VMX_REFLECT(10)
 END(vmx_daccess_bit)
 
@@ -350,6 +377,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x2c00 Entry 11 (size 64 bundles) Break instruction (33)
 ENTRY(vmx_break_fault)
+    VMX_DBG_FAULT(11)
        mov r31=pr
     mov r19=11
     mov r30=cr.iim
@@ -369,6 +397,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x3000 Entry 12 (size 64 bundles) External Interrupt (4)
 ENTRY(vmx_interrupt)
+    VMX_DBG_FAULT(12)
        mov r31=pr              // prepare to save predicates
     mov r19=12
     mov r29=cr.ipsr
@@ -531,45 +560,46 @@
        .org vmx_ia64_ivt+0x3800
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x3800 Entry 14 (size 64 bundles) Reserved
-       VMX_DBG_FAULT(14)
+    VMX_DBG_FAULT(14)
        VMX_FAULT(14)
 
 
        .org vmx_ia64_ivt+0x3c00
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x3c00 Entry 15 (size 64 bundles) Reserved
-       VMX_DBG_FAULT(15)
+    VMX_DBG_FAULT(15)
        VMX_FAULT(15)
 
 
        .org vmx_ia64_ivt+0x4000
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x4000 Entry 16 (size 64 bundles) Reserved
-       VMX_DBG_FAULT(16)
+    VMX_DBG_FAULT(16)
        VMX_FAULT(16)
 
        .org vmx_ia64_ivt+0x4400
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x4400 Entry 17 (size 64 bundles) Reserved
-       VMX_DBG_FAULT(17)
+    VMX_DBG_FAULT(17)
        VMX_FAULT(17)
 
        .org vmx_ia64_ivt+0x4800
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x4800 Entry 18 (size 64 bundles) Reserved
-       VMX_DBG_FAULT(18)
+    VMX_DBG_FAULT(18)
        VMX_FAULT(18)
 
        .org vmx_ia64_ivt+0x4c00
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x4c00 Entry 19 (size 64 bundles) Reserved
-       VMX_DBG_FAULT(19)
+    VMX_DBG_FAULT(19)
        VMX_FAULT(19)
 
     .org vmx_ia64_ivt+0x5000
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5000 Entry 20 (size 16 bundles) Page Not Present
 ENTRY(vmx_page_not_present)
+       VMX_DBG_FAULT(20)
        VMX_REFLECT(20)
 END(vmx_page_not_present)
 
@@ -577,6 +607,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5100 Entry 21 (size 16 bundles) Key Permission vector
 ENTRY(vmx_key_permission)
+       VMX_DBG_FAULT(21)
        VMX_REFLECT(21)
 END(vmx_key_permission)
 
@@ -584,6 +615,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5200 Entry 22 (size 16 bundles) Instruction Access Rights (26)
 ENTRY(vmx_iaccess_rights)
+       VMX_DBG_FAULT(22)
        VMX_REFLECT(22)
 END(vmx_iaccess_rights)
 
@@ -591,6 +623,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5300 Entry 23 (size 16 bundles) Data Access Rights (14,53)
 ENTRY(vmx_daccess_rights)
+       VMX_DBG_FAULT(23)
        VMX_REFLECT(23)
 END(vmx_daccess_rights)
 
@@ -598,6 +631,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5400 Entry 24 (size 16 bundles) General Exception (5,32,34,36,38,39)
 ENTRY(vmx_general_exception)
+    VMX_DBG_FAULT(24)
     VMX_FAULT(24)
 //    VMX_REFLECT(24)
 END(vmx_general_exception)
@@ -606,6 +640,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5500 Entry 25 (size 16 bundles) Disabled FP-Register (35)
 ENTRY(vmx_disabled_fp_reg)
+       VMX_DBG_FAULT(25)
        VMX_REFLECT(25)
 END(vmx_disabled_fp_reg)
 
@@ -613,6 +648,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5600 Entry 26 (size 16 bundles) Nat Consumption (11,23,37,50)
 ENTRY(vmx_nat_consumption)
+       VMX_DBG_FAULT(26)
        VMX_REFLECT(26)
 END(vmx_nat_consumption)
 
@@ -620,20 +656,21 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5700 Entry 27 (size 16 bundles) Speculation (40)
 ENTRY(vmx_speculation_vector)
+       VMX_DBG_FAULT(27)
        VMX_REFLECT(27)
 END(vmx_speculation_vector)
 
        .org vmx_ia64_ivt+0x5800
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5800 Entry 28 (size 16 bundles) Reserved
-       VMX_DBG_FAULT(28)
+    VMX_DBG_FAULT(28)
        VMX_FAULT(28)
 
        .org vmx_ia64_ivt+0x5900
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5900 Entry 29 (size 16 bundles) Debug (16,28,56)
 ENTRY(vmx_debug_vector)
-       VMX_DBG_FAULT(29)
+    VMX_DBG_FAULT(29)
        VMX_FAULT(29)
 END(vmx_debug_vector)
 
@@ -641,6 +678,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5a00 Entry 30 (size 16 bundles) Unaligned Reference (57)
 ENTRY(vmx_unaligned_access)
+       VMX_DBG_FAULT(30)
        VMX_REFLECT(30)
 END(vmx_unaligned_access)
 
@@ -648,6 +686,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5b00 Entry 31 (size 16 bundles) Unsupported Data Reference (57)
 ENTRY(vmx_unsupported_data_reference)
+       VMX_DBG_FAULT(31)
        VMX_REFLECT(31)
 END(vmx_unsupported_data_reference)
 
@@ -655,6 +694,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5c00 Entry 32 (size 16 bundles) Floating-Point Fault (64)
 ENTRY(vmx_floating_point_fault)
+       VMX_DBG_FAULT(32)
        VMX_REFLECT(32)
 END(vmx_floating_point_fault)
 
@@ -662,6 +702,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5d00 Entry 33 (size 16 bundles) Floating Point Trap (66)
 ENTRY(vmx_floating_point_trap)
+       VMX_DBG_FAULT(33)
        VMX_REFLECT(33)
 END(vmx_floating_point_trap)
 
@@ -669,6 +710,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5e00 Entry 34 (size 16 bundles) Lower Privilege Transfer Trap (66)
 ENTRY(vmx_lower_privilege_trap)
+       VMX_DBG_FAULT(34)
        VMX_REFLECT(34)
 END(vmx_lower_privilege_trap)
 
@@ -676,6 +718,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5f00 Entry 35 (size 16 bundles) Taken Branch Trap (68)
 ENTRY(vmx_taken_branch_trap)
+       VMX_DBG_FAULT(35)
        VMX_REFLECT(35)
 END(vmx_taken_branch_trap)
 
@@ -683,6 +726,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x6000 Entry 36 (size 16 bundles) Single Step Trap (69)
 ENTRY(vmx_single_step_trap)
+       VMX_DBG_FAULT(36)
        VMX_REFLECT(36)
 END(vmx_single_step_trap)
 
@@ -690,6 +734,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x6100 Entry 37 (size 16 bundles) Virtualization Fault
 ENTRY(vmx_virtualization_fault)
+    VMX_DBG_FAULT(37)
        mov r31=pr
     mov r19=37
     adds r16 = IA64_VCPU_CAUSE_OFFSET,r21
diff -r 724f412d81ab -r 3d379e5f3d7f xen/include/asm-ia64/vmx_vpd.h
--- a/xen/include/asm-ia64/vmx_vpd.h    Wed Dec 21 15:31:05 2005
+++ b/xen/include/asm-ia64/vmx_vpd.h    Wed Dec 21 15:33:45 2005
@@ -63,8 +63,16 @@
        unsigned long   rsv6[46];
 } cr_t;
 
+#ifdef VTI_DEBUG
+struct ivt_debug{
+    unsigned long iip;
+    unsigned long ipsr;
+    unsigned long ifa;
+    unsigned long vector;
+};
+#define IVT_DEBUG_MAX 128
+#endif
 struct arch_vmx_struct {
-//    struct virutal_platform_def     vmx_platform;
 //     vpd_t       *vpd;
     vtime_t        vtm;
     struct vlapic   vlapic;
@@ -85,6 +93,10 @@
 //    unsigned long   rfi_ifs;
 //     unsigned long   in_service[4];  // vLsapic inservice IRQ bits
        unsigned long   flags;
+#ifdef VTI_DEBUG
+    unsigned long  ivt_current;
+    struct ivt_debug ivt_debug[IVT_DEBUG_MAX];
+#endif
 };
 
 #define vmx_schedule_tail(next)         \

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