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

[Xen-changelog] [xen-unstable] [IA64] Handle NAT bit for dom0 and domU



# HG changeset patch
# User Alex Williamson <alex.williamson@xxxxxx>
# Date 1176297884 21600
# Node ID 7158623a1b3dd28f86f908fce7e8e56c37a49179
# Parent  1bde28f762a66276008da38e3fb24751f83dc128
[IA64] Handle NAT bit for dom0 and domU

This fixes ia32 apps running under the IA32-EL.

Signed-off-by: Anthony Xu <anthony.xu@xxxxxxxxx>
---
 linux-2.6-xen-sparse/arch/ia64/kernel/asm-offsets.c |    2 
 linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S       |    6 +
 linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S         |   63 +++++++++++---------
 linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h  |    1 
 xen/arch/ia64/xen/hyperprivop.S                     |    8 ++
 5 files changed, 52 insertions(+), 28 deletions(-)

diff -r 1bde28f762a6 -r 7158623a1b3d 
linux-2.6-xen-sparse/arch/ia64/kernel/asm-offsets.c
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/asm-offsets.c       Mon Apr 09 
13:40:25 2007 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/asm-offsets.c       Wed Apr 11 
07:24:44 2007 -0600
@@ -290,5 +290,7 @@ void foo(void)
        DEFINE_MAPPED_REG_OFS(XSI_BANKNUM_OFS, banknum);
        DEFINE_MAPPED_REG_OFS(XSI_BANK0_R16_OFS, bank0_regs[0]);
        DEFINE_MAPPED_REG_OFS(XSI_BANK1_R16_OFS, bank1_regs[0]);
+       DEFINE_MAPPED_REG_OFS(XSI_B0NATS_OFS, vbnat);
+       DEFINE_MAPPED_REG_OFS(XSI_B1NATS_OFS, vnat);    
 #endif /* CONFIG_XEN */
 }
diff -r 1bde28f762a6 -r 7158623a1b3d 
linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S
--- a/linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S     Mon Apr 09 13:40:25 
2007 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S     Wed Apr 11 07:24:44 
2007 -0600
@@ -614,6 +614,7 @@ GLOBAL_ENTRY(ia64_leave_kernel)
 #ifdef CONFIG_XEN
        ;;
        // r16-r31 all now hold bank1 values
+       mov r15=ar.unat
        movl r2=XSI_BANK1_R16
        movl r3=XSI_BANK1_R16+8
        ;;
@@ -641,6 +642,11 @@ GLOBAL_ENTRY(ia64_leave_kernel)
 .mem.offset 0,0; st8.spill [r2]=r30,16
 .mem.offset 8,0; st8.spill [r3]=r31,16
        ;;
+       mov r3=ar.unat
+       movl r2=XSI_B1NAT
+       ;;
+       st8 [r2]=r3
+       mov ar.unat=r15
        movl r2=XSI_BANKNUM;;
        st4 [r2]=r0;
 #else
diff -r 1bde28f762a6 -r 7158623a1b3d linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S
--- a/linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S       Mon Apr 09 13:40:25 
2007 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S       Wed Apr 11 07:24:44 
2007 -0600
@@ -2013,33 +2013,6 @@ END(ia32_interrupt)
        DBG_FAULT(66)
        FAULT(66)
 
-#ifdef CONFIG_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...
-        */
-
-GLOBAL_ENTRY(xen_bsw1)
-       /* FIXME: THIS CODE IS NOT NaT SAFE! */
-       movl r30=XSI_BANKNUM;
-       mov r31=1;;
-       st4 [r30]=r31;
-       movl r30=XSI_BANK1_R16;
-       movl r31=XSI_BANK1_R16+8;;
-       ld8 r16=[r30],16; ld8 r17=[r31],16;;
-       ld8 r18=[r30],16; ld8 r19=[r31],16;;
-       ld8 r20=[r30],16; ld8 r21=[r31],16;;
-       ld8 r22=[r30],16; ld8 r23=[r31],16;;
-       ld8 r24=[r30],16; ld8 r25=[r31],16;;
-       ld8 r26=[r30],16; ld8 r27=[r31],16;;
-       ld8 r28=[r30],16; ld8 r29=[r31],16;;
-       ld8 r30=[r30]; ld8 r31=[r31];;
-       br.ret.sptk.many b0
-END(xen_bsw1)
-#endif
-
        .org ia64_ivt+0x7f00
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x7f00 Entry 67 (size 16 bundles) Reserved
@@ -2167,4 +2140,38 @@ 1:
        (p6) br.spnt.few 1b     // call evtchn_do_upcall again.
        br.sptk.many ia64_leave_kernel   
 END(xen_event_callback)
-#endif
+
+
+       /*
+        * 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...
+        */
+
+GLOBAL_ENTRY(xen_bsw1)
+       /* FIXME: THIS CODE IS NOT NaT SAFE! */
+       mov r14=ar.unat
+       movl r30=XSI_B1NAT
+       ;;
+       ld8 r30=[r30];;
+       mov ar.unat=r30
+       movl r30=XSI_BANKNUM;
+       mov r31=1;;
+       st4 [r30]=r31;
+       movl r30=XSI_BANK1_R16;
+       movl r31=XSI_BANK1_R16+8;;
+       ld8.fill r16=[r30],16; ld8.fill r17=[r31],16;;
+       ld8.fill r18=[r30],16; ld8.fill r19=[r31],16;;
+       ld8.fill r20=[r30],16; ld8.fill r21=[r31],16;;
+       ld8.fill r22=[r30],16; ld8.fill r23=[r31],16;;
+       ld8.fill r24=[r30],16; ld8.fill r25=[r31],16;;
+       ld8.fill r26=[r30],16; ld8.fill r27=[r31],16;;
+       ld8.fill r28=[r30],16; ld8.fill r29=[r31],16;;
+       ld8.fill r30=[r30]; ld8.fill r31=[r31];;
+       mov ar.unat=r14
+       br.ret.sptk.many b0
+END(xen_bsw1)
+
+   
+#endif
diff -r 1bde28f762a6 -r 7158623a1b3d 
linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h
--- a/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h        Mon Apr 09 
13:40:25 2007 -0600
+++ b/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h        Wed Apr 11 
07:24:44 2007 -0600
@@ -57,6 +57,7 @@
 #define XSI_PSR_IC             (XSI_BASE + XSI_PSR_IC_OFS)
 #define XSI_IPSR               (XSI_BASE + XSI_IPSR_OFS)
 #define XSI_IIP                        (XSI_BASE + XSI_IIP_OFS)
+#define XSI_B1NAT              (XSI_BASE + XSI_B1NATS_OFS)
 #define XSI_BANK1_R16          (XSI_BASE + XSI_BANK1_R16_OFS)
 #define XSI_BANKNUM            (XSI_BASE + XSI_BANKNUM_OFS)
 #define XSI_IHA                        (XSI_BASE + XSI_IHA_OFS)
diff -r 1bde28f762a6 -r 7158623a1b3d xen/arch/ia64/xen/hyperprivop.S
--- a/xen/arch/ia64/xen/hyperprivop.S   Mon Apr 09 13:40:25 2007 -0600
+++ b/xen/arch/ia64/xen/hyperprivop.S   Wed Apr 11 07:24:44 2007 -0600
@@ -304,6 +304,8 @@ ENTRY(hyper_ssm_i)
        ;;
        adds r2=XSI_BANK1_R16_OFS-XSI_PSR_IC_OFS,r18;
        adds r3=(XSI_BANK1_R16_OFS+8)-XSI_PSR_IC_OFS,r18;;
+       // temporarily save ar.unat
+       mov r28=ar.unat   
        bsw.1;;
        // FIXME?: ar.unat is not really handled correctly,
        // but may not matter if the OS is NaT-clean
@@ -324,6 +326,12 @@ ENTRY(hyper_ssm_i)
        .mem.offset 0,0; st8.spill [r2]=r30,16;
        .mem.offset 8,0; st8.spill [r3]=r31,16 ;;
        bsw.0 ;;
+       mov r27=ar.unat
+       adds r26=XSI_B1NATS_OFS-XSI_PSR_IC_OFS,r18 ;;
+       //save bank1 ar.unat
+       st8 [r26]=r27
+       //restore ar.unat
+       mov ar.unat=r28
        mov r2=r30
        mov r3=r29
        adds r20=XSI_BANKNUM_OFS-XSI_PSR_IC_OFS,r18 ;;

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