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

[Xen-changelog] [xen-unstable] [IA64] ivt.S cleanup



# HG changeset patch
# User awilliam@lappy
# Node ID 70ee75d5c12c867ae4920bd4e1ddef84c4f06286
# Parent  b2abc70be89e02d0d380674096c8c1fb9e552431
[IA64] ivt.S cleanup

Cleanup: unused code #ifndef XEN-ized, some insns swapped to improve
bundling.

Signed-off-by: Tristan Gingold <tristan.gingold@xxxxxxxx>
---
 xen/arch/ia64/xen/ivt.S |  134 +++++++++++++++++++++++++-----------------------
 1 files changed, 72 insertions(+), 62 deletions(-)

diff -r b2abc70be89e -r 70ee75d5c12c xen/arch/ia64/xen/ivt.S
--- a/xen/arch/ia64/xen/ivt.S   Wed Jul 19 07:17:54 2006 -0600
+++ b/xen/arch/ia64/xen/ivt.S   Mon Jul 24 12:57:17 2006 -0600
@@ -1,19 +1,4 @@
-
-#ifdef XEN
-//#define CONFIG_DISABLE_VHPT  // FIXME: change when VHPT is enabled??
-// these are all hacked out for now as the entire IVT
-// will eventually be replaced... just want to use it
-// for startup code to handle TLB misses
-//#define ia64_leave_kernel 0
-//#define ia64_ret_from_syscall 0
-//#define ia64_handle_irq 0
-//#define ia64_fault 0
-#define ia64_illegal_op_fault 0
-#define ia64_prepare_handle_unaligned 0
-#define ia64_bad_break 0
-#define ia64_trace_syscall 0
-#define sys_call_table 0
-#define sys_ni_syscall 0
+#ifdef XEN
 #include <asm/debugger.h>
 #endif
 /*
@@ -95,25 +80,18 @@
 #include "minstate.h"
 
 #define FAULT(n)                                                               
        \
+       mov r19=n;                      /* prepare to save predicates */        
        \
        mov r31=pr;                                                             
        \
-       mov r19=n;;                     /* prepare to save predicates */        
        \
        br.sptk.many dispatch_to_fault_handler
 
 #define FAULT_OR_REFLECT(n)                                                    
        \
-       mov r31=pr;                                                             
        \
-       mov r20=cr.ipsr;;                                                       
        \
+       mov r20=cr.ipsr;                                                        
        \
        mov r19=n;      /* prepare to save predicates */                        
        \
+       mov r31=pr;;                                                            
        \
        extr.u r20=r20,IA64_PSR_CPL0_BIT,2;;                                    
        \
        cmp.ne p6,p0=r0,r20;    /* cpl != 0?*/                                  
        \
 (p6)   br.dptk.many dispatch_reflection;                                       
        \
        br.sptk.few dispatch_to_fault_handler
-
-#ifdef XEN
-#define REFLECT(n)                                                             
        \
-       mov r31=pr;                                                             
        \
-       mov r19=n;;                     /* prepare to save predicates */        
        \
-       br.sptk.many dispatch_reflection
-#endif
 
        .section .text.ivt,"ax"
 
@@ -257,8 +235,8 @@ ENTRY(itlb_miss)
 ENTRY(itlb_miss)
        DBG_FAULT(1)
 #ifdef XEN
+       mov r16 = cr.ifa
        mov r31 = pr
-       mov r16 = cr.ifa
        ;;
        extr.u r17=r16,59,5
        ;;
@@ -321,8 +299,8 @@ ENTRY(dtlb_miss)
 ENTRY(dtlb_miss)
        DBG_FAULT(2)
 #ifdef XEN
+       mov r16=cr.ifa                          // get virtual address
        mov r31=pr
-       mov r16=cr.ifa                          // get virtual address
        ;;
        extr.u r17=r16,59,5
        ;;
@@ -443,12 +421,12 @@ ENTRY(alt_itlb_miss)
 ENTRY(alt_itlb_miss)
        DBG_FAULT(3)
 #ifdef XEN
+       mov r16=cr.ifa          // get address that caused the TLB miss
        mov r31=pr
-       mov r16=cr.ifa          // get address that caused the TLB miss
        ;;
 late_alt_itlb_miss:
+       mov r21=cr.ipsr
        movl r17=PAGE_KERNEL
-       mov r21=cr.ipsr
        movl r19=(((1 << IA64_MAX_PHYS_BITS) - 1) & ~0xfff)
        ;;
 #else
@@ -498,14 +476,14 @@ ENTRY(alt_dtlb_miss)
 ENTRY(alt_dtlb_miss)
        DBG_FAULT(4)
 #ifdef XEN
+       mov r16=cr.ifa          // get address that caused the TLB miss
        mov r31=pr
-       mov r16=cr.ifa          // get address that caused the TLB miss
        ;;
 late_alt_dtlb_miss:
+       mov r20=cr.isr
        movl r17=PAGE_KERNEL
-       mov r20=cr.isr
+       mov r21=cr.ipsr
        movl r19=(((1 << IA64_MAX_PHYS_BITS) - 1) & ~0xfff)
-       mov r21=cr.ipsr
        ;;
 #endif
 #ifdef CONFIG_DISABLE_VHPT
@@ -621,9 +599,11 @@ ENTRY(frametable_fault)
        rfi
 END(frametable_fault)
 GLOBAL_ENTRY(ia64_frametable_probe)
+       {
        probe.r r8=r32,0        // destination register must be r8
        nop.f 0x0
        br.ret.sptk.many b0     // this instruction must be in bundle 2
+       }
 END(ia64_frametable_probe)
 #endif /* CONFIG_VIRTUAL_FRAME_TABLE */
 
@@ -705,8 +685,9 @@ ENTRY(ikey_miss)
        DBG_FAULT(6)
 #ifdef XEN
        FAULT_OR_REFLECT(6)
-#endif
+#else
        FAULT(6)
+#endif
 END(ikey_miss)
 
        
//-----------------------------------------------------------------------------------
@@ -754,8 +735,9 @@ ENTRY(dkey_miss)
        DBG_FAULT(7)
 #ifdef XEN
        FAULT_OR_REFLECT(7)
-#endif
+#else
        FAULT(7)
+#endif
 END(dkey_miss)
 
        .org ia64_ivt+0x2000
@@ -765,7 +747,7 @@ ENTRY(dirty_bit)
        DBG_FAULT(8)
 #ifdef XEN
        FAULT_OR_REFLECT(8)
-#endif
+#else
        /*
         * What we do here is to simply turn on the dirty bit in the PTE.  We 
need to
         * update both the page-table and the TLB entry.  To efficiently access 
the PTE,
@@ -821,6 +803,7 @@ 1:  ld8 r18=[r17]
 #endif
        mov pr=r31,-1                           // restore pr
        rfi
+#endif
 END(dirty_bit)
 
        .org ia64_ivt+0x2400
@@ -829,13 +812,13 @@ ENTRY(iaccess_bit)
 ENTRY(iaccess_bit)
        DBG_FAULT(9)
 #ifdef XEN
-       mov r31=pr;
        mov r16=cr.isr
        mov r17=cr.ifa
+       mov r31=pr
        mov r19=9
-       movl r20=0x2400
+       mov r20=0x2400
        br.sptk.many fast_access_reflect;;
-#endif
+#else
        // Like Entry 8, except for instruction access
        mov r16=cr.ifa                          // get the address that caused 
the fault
        movl r30=1f                             // load continuation point in 
case of nested fault
@@ -894,6 +877,7 @@ 1:  ld8 r18=[r17]
 #endif /* !CONFIG_SMP */
        mov pr=r31,-1
        rfi
+#endif
 END(iaccess_bit)
 
        .org ia64_ivt+0x2800
@@ -902,13 +886,13 @@ ENTRY(daccess_bit)
 ENTRY(daccess_bit)
        DBG_FAULT(10)
 #ifdef XEN
-       mov r31=pr;
        mov r16=cr.isr
        mov r17=cr.ifa
+       mov r31=pr
        mov r19=10
-       movl r20=0x2800
+       mov r20=0x2800
        br.sptk.many fast_access_reflect;;
-#endif
+#else
        // Like Entry 8, except for data access
        mov r16=cr.ifa                          // get the address that caused 
the fault
        movl r30=1f                             // load continuation point in 
case of nested fault
@@ -954,6 +938,7 @@ 1:  ld8 r18=[r17]
        mov b0=r29                              // restore b0
        mov pr=r31,-1
        rfi
+#endif
 END(daccess_bit)
 
        .org ia64_ivt+0x2c00
@@ -1016,7 +1001,7 @@ ENTRY(break_fault)
        ;;
        br.sptk.many fast_break_reflect
        ;;
-#endif
+#else /* !XEN */
        movl r16=THIS_CPU(cpu_kr)+IA64_KR_CURRENT_OFFSET;;
        ld8 r16=[r16]
        mov r17=cr.iim
@@ -1096,6 +1081,7 @@ ENTRY(break_fault)
 (p8)   br.call.sptk.many b6=b6                 // ignore this return addr
        br.cond.sptk ia64_trace_syscall
        // NOT REACHED
+#endif
 END(break_fault)
 
        .org ia64_ivt+0x3000
@@ -1190,6 +1176,7 @@ END(dispatch_break_fault)
        DBG_FAULT(14)
        FAULT(14)
 
+#ifndef XEN
        /*
         * There is no particular reason for this code to be here, other than 
that
         * there happens to be space here that would go unused otherwise.  If 
this
@@ -1329,13 +1316,15 @@ GLOBAL_ENTRY(ia64_syscall_setup)
 (p10)  mov r8=-EINVAL
        br.ret.sptk.many b7
 END(ia64_syscall_setup)
-
+#endif /* XEN */
+       
        .org ia64_ivt+0x3c00
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x3c00 Entry 15 (size 64 bundles) Reserved
        DBG_FAULT(15)
        FAULT(15)
 
+#ifndef XEN
        /*
         * Squatting in this space ...
         *
@@ -1374,6 +1363,7 @@ ENTRY(dispatch_illegal_op_fault)
 (p6)   br.call.dpnt.many b6=b6         // call returns to ia64_leave_kernel
        br.sptk.many ia64_leave_kernel
 END(dispatch_illegal_op_fault)
+#endif
 
        .org ia64_ivt+0x4000
 
/////////////////////////////////////////////////////////////////////////////////////////
@@ -1419,6 +1409,7 @@ END(dispatch_privop_fault)
        DBG_FAULT(17)
        FAULT(17)
 
+#ifndef XEN
 ENTRY(non_syscall)
        SAVE_MIN_WITH_COVER
 
@@ -1444,6 +1435,7 @@ ENTRY(non_syscall)
        ;;
        br.call.sptk.many b6=ia64_bad_break     // avoid WAW on CFM and ignore 
return addr
 END(non_syscall)
+#endif
 
        .org ia64_ivt+0x4800
 
/////////////////////////////////////////////////////////////////////////////////////////
@@ -1451,13 +1443,13 @@ END(non_syscall)
        DBG_FAULT(18)
        FAULT(18)
 
+#ifndef XEN
        /*
         * There is no particular reason for this code to be here, other than 
that
         * there happens to be space here that would go unused otherwise.  If 
this
         * fault ever gets "unreserved", simply moved the following code to a 
more
         * suitable spot...
         */
-
 ENTRY(dispatch_unaligned_handler)
        SAVE_MIN_WITH_COVER
        ;;
@@ -1479,6 +1471,7 @@ ENTRY(dispatch_unaligned_handler)
 //     br.sptk.many ia64_prepare_handle_unaligned
     br.call.sptk.many b6=ia64_handle_unaligned
 END(dispatch_unaligned_handler)
+#endif
 
        .org ia64_ivt+0x4c00
 
/////////////////////////////////////////////////////////////////////////////////////////
@@ -1533,7 +1526,7 @@ ENTRY(page_not_present)
        DBG_FAULT(20)
 #ifdef XEN
        FAULT_OR_REFLECT(20)
-#endif
+#else
        mov r16=cr.ifa
        rsm psr.dt
        /*
@@ -1547,6 +1540,7 @@ ENTRY(page_not_present)
        mov r31=pr
        srlz.d
        br.sptk.many page_fault
+#endif
 END(page_not_present)
 
        .org ia64_ivt+0x5100
@@ -1556,13 +1550,14 @@ ENTRY(key_permission)
        DBG_FAULT(21)
 #ifdef XEN
        FAULT_OR_REFLECT(21)
-#endif
+#else
        mov r16=cr.ifa
        rsm psr.dt
        mov r31=pr
        ;;
        srlz.d
        br.sptk.many page_fault
+#endif
 END(key_permission)
 
        .org ia64_ivt+0x5200
@@ -1572,13 +1567,14 @@ ENTRY(iaccess_rights)
        DBG_FAULT(22)
 #ifdef XEN
        FAULT_OR_REFLECT(22)
-#endif
+#else
        mov r16=cr.ifa
        rsm psr.dt
        mov r31=pr
        ;;
        srlz.d
        br.sptk.many page_fault
+#endif
 END(iaccess_rights)
 
        .org ia64_ivt+0x5300
@@ -1593,13 +1589,14 @@ ENTRY(daccess_rights)
        mov r19=23
        movl r20=0x5300
        br.sptk.many fast_access_reflect;;
-#endif
+#else
        mov r16=cr.ifa
        rsm psr.dt
        mov r31=pr
        ;;
        srlz.d
        br.sptk.many page_fault
+#endif
 END(daccess_rights)
 
        .org ia64_ivt+0x5400
@@ -1666,8 +1663,9 @@ ENTRY(nat_consumption)
        DBG_FAULT(26)
 #ifdef XEN
        FAULT_OR_REFLECT(26)
-#endif
+#else
        FAULT(26)
+#endif
 END(nat_consumption)
 
        .org ia64_ivt+0x5700
@@ -1678,7 +1676,7 @@ ENTRY(speculation_vector)
 #ifdef XEN
        // this probably need not reflect...
        FAULT_OR_REFLECT(27)
-#endif
+#else
        /*
         * A [f]chk.[as] instruction needs to take the branch to the recovery 
code but
         * this part of the architecture is not implemented in hardware on some 
CPUs, such
@@ -1709,6 +1707,7 @@ ENTRY(speculation_vector)
        ;;
 
        rfi                             // and go back
+#endif
 END(speculation_vector)
 
        .org ia64_ivt+0x5800
@@ -1724,8 +1723,9 @@ ENTRY(debug_vector)
        DBG_FAULT(29)
 #ifdef XEN
        FAULT_OR_REFLECT(29)
-#endif
+#else
        FAULT(29)
+#endif
 END(debug_vector)
 
        .org ia64_ivt+0x5a00
@@ -1735,11 +1735,12 @@ ENTRY(unaligned_access)
        DBG_FAULT(30)
 #ifdef XEN
        FAULT_OR_REFLECT(30)
-#endif
+#else
        mov r16=cr.ipsr
        mov r31=pr              // prepare to save predicates
        ;;
        br.sptk.many dispatch_unaligned_handler
+#endif
 END(unaligned_access)
 
        .org ia64_ivt+0x5b00
@@ -1749,8 +1750,9 @@ ENTRY(unsupported_data_reference)
        DBG_FAULT(31)
 #ifdef XEN
        FAULT_OR_REFLECT(31)
-#endif
+#else
        FAULT(31)
+#endif
 END(unsupported_data_reference)
 
        .org ia64_ivt+0x5c00
@@ -1760,8 +1762,9 @@ ENTRY(floating_point_fault)
        DBG_FAULT(32)
 #ifdef XEN
        FAULT_OR_REFLECT(32)
-#endif
+#else
        FAULT(32)
+#endif
 END(floating_point_fault)
 
        .org ia64_ivt+0x5d00
@@ -1771,8 +1774,9 @@ ENTRY(floating_point_trap)
        DBG_FAULT(33)
 #ifdef XEN
        FAULT_OR_REFLECT(33)
-#endif
+#else
        FAULT(33)
+#endif
 END(floating_point_trap)
 
        .org ia64_ivt+0x5e00
@@ -1782,8 +1786,9 @@ ENTRY(lower_privilege_trap)
        DBG_FAULT(34)
 #ifdef XEN
        FAULT_OR_REFLECT(34)
-#endif
+#else
        FAULT(34)
+#endif
 END(lower_privilege_trap)
 
        .org ia64_ivt+0x5f00
@@ -1793,8 +1798,9 @@ ENTRY(taken_branch_trap)
        DBG_FAULT(35)
 #ifdef XEN
        FAULT_OR_REFLECT(35)
-#endif
+#else
        FAULT(35)
+#endif
 END(taken_branch_trap)
 
        .org ia64_ivt+0x6000
@@ -1804,8 +1810,9 @@ ENTRY(single_step_trap)
        DBG_FAULT(36)
 #ifdef XEN
        FAULT_OR_REFLECT(36)
-#endif
+#else
        FAULT(36)
+#endif
 END(single_step_trap)
 
        .org ia64_ivt+0x6100
@@ -1863,8 +1870,9 @@ ENTRY(ia32_exception)
        DBG_FAULT(45)
 #ifdef XEN
        FAULT_OR_REFLECT(45)
-#endif
+#else
        FAULT(45)
+#endif
 END(ia32_exception)
 
        .org ia64_ivt+0x6a00
@@ -1874,7 +1882,7 @@ ENTRY(ia32_intercept)
        DBG_FAULT(46)
 #ifdef XEN
        FAULT_OR_REFLECT(46)
-#endif
+#else
 #ifdef CONFIG_IA32_SUPPORT
        mov r31=pr
        mov r16=cr.isr
@@ -1898,6 +1906,7 @@ 1:
 1:
 #endif // CONFIG_IA32_SUPPORT
        FAULT(46)
+#endif
 END(ia32_intercept)
 
        .org ia64_ivt+0x6b00
@@ -1907,12 +1916,13 @@ ENTRY(ia32_interrupt)
        DBG_FAULT(47)
 #ifdef XEN
        FAULT_OR_REFLECT(47)
-#endif
+#else
 #ifdef CONFIG_IA32_SUPPORT
        mov r31=pr
        br.sptk.many dispatch_to_ia32_handler
 #else
        FAULT(47)
+#endif
 #endif
 END(ia32_interrupt)
 

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