[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |