WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] [IA64] Simplify lazy cover algorithm

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [IA64] Simplify lazy cover algorithm
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 18 Jan 2007 21:10:53 -0800
Delivery-date: Thu, 18 Jan 2007 21:13:03 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User awilliam@xxxxxxxxxxxx
# Date 1168629071 25200
# Node ID cd6598396086157a9eeb2f368462ddeb6e8f8201
# Parent  01ea554f1c5e8bdbfa172349438298b15da6fc5c
[IA64] Simplify lazy cover algorithm

Signed-off-by: Anthony Xu <anthony.xu@xxxxxxxxx>
---
 linux-2.6-xen-sparse/arch/ia64/kernel/asm-offsets.c |    1 
 linux-2.6-xen-sparse/arch/ia64/xen/xenminstate.h    |   11 -------
 linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h  |    1 
 xen/arch/ia64/asm-xsi-offsets.c                     |    1 
 xen/arch/ia64/xen/faults.c                          |    3 -
 xen/arch/ia64/xen/hyperprivop.S                     |   31 ++++----------------
 xen/arch/ia64/xen/vcpu.c                            |    7 ----
 xen/include/public/arch-ia64.h                      |    5 +--
 8 files changed, 11 insertions(+), 49 deletions(-)

diff -r 01ea554f1c5e -r cd6598396086 
linux-2.6-xen-sparse/arch/ia64/kernel/asm-offsets.c
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/asm-offsets.c       Thu Jan 11 
16:56:58 2007 -0700
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/asm-offsets.c       Fri Jan 12 
12:11:11 2007 -0700
@@ -280,7 +280,6 @@ void foo(void)
        DEFINE_MAPPED_REG_OFS(XSI_IHA_OFS, iha);
        DEFINE_MAPPED_REG_OFS(XSI_ITIR_OFS, itir);
        DEFINE_MAPPED_REG_OFS(XSI_PSR_IC_OFS, interrupt_collection_enabled);
-       DEFINE_MAPPED_REG_OFS(XSI_INCOMPL_REGFR_OFS, incomplete_regframe);
        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]);
diff -r 01ea554f1c5e -r cd6598396086 
linux-2.6-xen-sparse/arch/ia64/xen/xenminstate.h
--- a/linux-2.6-xen-sparse/arch/ia64/xen/xenminstate.h  Thu Jan 11 16:56:58 
2007 -0700
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/xenminstate.h  Fri Jan 12 12:11:11 
2007 -0700
@@ -151,16 +151,7 @@
 .mem.offset 8,0; st8.spill [r17]=r11,24;                                       
                \
         ;;                                                                     
                \
        /* xen special handling for possibly lazy cover */                      
                \
-       movl r8=XSI_INCOMPL_REGFR;                                              
                \
-       ;;                                                                      
                \
-       ld4 r30=[r8];                                                           
                \
-       ;;                                                                      
                \
-       /* set XSI_INCOMPL_REGFR 0 */                                           
                \
-       st4 [r8]=r0;                                                            
                \
-       cmp.eq  p6,p7=r30,r0;                                                   
                \
-       ;; /* not sure if this stop bit is necessary */                         
                \
-(p6)   adds r8=XSI_PRECOVER_IFS-XSI_INCOMPL_REGFR,r8;                          
                \
-(p7)   adds r8=XSI_IFS-XSI_INCOMPL_REGFR,r8;                                   
                \
+       movl r8=XSI_PRECOVER_IFS;                                               
                \
        ;;                                                                      
                \
        ld8 r30=[r8];                                                           
                \
        ;;                                                                      
                \
diff -r 01ea554f1c5e -r cd6598396086 
linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h
--- a/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h        Thu Jan 11 
16:56:58 2007 -0700
+++ b/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h        Fri Jan 12 
12:11:11 2007 -0700
@@ -49,7 +49,6 @@
 
 #define XSI_IFS                        (XSI_BASE + XSI_IFS_OFS)
 #define XSI_PRECOVER_IFS       (XSI_BASE + XSI_PRECOVER_IFS_OFS)
-#define XSI_INCOMPL_REGFR      (XSI_BASE + XSI_INCOMPL_REGFR_OFS)
 #define XSI_IFA                        (XSI_BASE + XSI_IFA_OFS)
 #define XSI_ISR                        (XSI_BASE + XSI_ISR_OFS)
 #define XSI_IIM                        (XSI_BASE + XSI_IIM_OFS)
diff -r 01ea554f1c5e -r cd6598396086 xen/arch/ia64/asm-xsi-offsets.c
--- a/xen/arch/ia64/asm-xsi-offsets.c   Thu Jan 11 16:56:58 2007 -0700
+++ b/xen/arch/ia64/asm-xsi-offsets.c   Fri Jan 12 12:11:11 2007 -0700
@@ -62,7 +62,6 @@ void foo(void)
        DEFINE_MAPPED_REG_OFS(XSI_ITV_OFS, itv);
        DEFINE_MAPPED_REG_OFS(XSI_PTA_OFS, pta);
        DEFINE_MAPPED_REG_OFS(XSI_PSR_IC_OFS, interrupt_collection_enabled);
-       DEFINE_MAPPED_REG_OFS(XSI_INCOMPL_REGFR_OFS, incomplete_regframe);
        DEFINE_MAPPED_REG_OFS(XSI_METAPHYS_OFS, metaphysical_mode);
        DEFINE_MAPPED_REG_OFS(XSI_BANKNUM_OFS, banknum);
        DEFINE_MAPPED_REG_OFS(XSI_BANK0_R16_OFS, bank0_regs[0]);
diff -r 01ea554f1c5e -r cd6598396086 xen/arch/ia64/xen/faults.c
--- a/xen/arch/ia64/xen/faults.c        Thu Jan 11 16:56:58 2007 -0700
+++ b/xen/arch/ia64/xen/faults.c        Fri Jan 12 12:11:11 2007 -0700
@@ -88,7 +88,6 @@ void reflect_interruption(unsigned long 
        PSCB(v, isr) = isr;
        PSCB(v, iip) = regs->cr_iip;
        PSCB(v, ifs) = 0;
-       PSCB(v, incomplete_regframe) = 0;
 
        regs->cr_iip = ((unsigned long)PSCBX(v, iva) + vector) & ~0xffUL;
        regs->cr_ipsr = (regs->cr_ipsr & ~DELIVER_PSR_CLR) | DELIVER_PSR_SET;
@@ -155,7 +154,6 @@ void reflect_event(void)
        PSCB(v, isr) = isr;
        PSCB(v, iip) = regs->cr_iip;
        PSCB(v, ifs) = 0;
-       PSCB(v, incomplete_regframe) = 0;
 
        regs->cr_iip = v->arch.event_callback_ip;
        regs->cr_ipsr = (regs->cr_ipsr & ~DELIVER_PSR_CLR) | DELIVER_PSR_SET;
@@ -185,7 +183,6 @@ static int handle_lazy_cover(struct vcpu
 {
        if (!PSCB(v, interrupt_collection_enabled)) {
                PSCB(v, ifs) = regs->cr_ifs;
-               PSCB(v, incomplete_regframe) = 1;
                regs->cr_ifs = 0;
                perfc_incrc(lazy_cover);
                return 1;       // retry same instruction with cr.ifs off
diff -r 01ea554f1c5e -r cd6598396086 xen/arch/ia64/xen/hyperprivop.S
--- a/xen/arch/ia64/xen/hyperprivop.S   Thu Jan 11 16:56:58 2007 -0700
+++ b/xen/arch/ia64/xen/hyperprivop.S   Fri Jan 12 12:11:11 2007 -0700
@@ -192,7 +192,6 @@ END(fast_hyperprivop)
 //     and isr.ri to cr.isr.ri (all other bits zero)
 //  - cover and set shared_mem precover_ifs to cr.ifs
 //             ^^^ MISSED THIS FOR fast_break??
-//  - set shared_mem ifs and incomplete_regframe to 0
 //  - set shared_mem interrupt_delivery_enabled to 0
 //  - set shared_mem interrupt_collection_enabled to 0
 //  - set r31 to SHAREDINFO_ADDR
@@ -272,11 +271,9 @@ ENTRY(hyper_ssm_i)
        st1 [r22]=r20
        st4 [r18]=r0
        // cover and set shared_mem precover_ifs to cr.ifs
-       // set shared_mem ifs and incomplete_regframe to 0
+       // set shared_mem ifs to 0
        cover ;;
        mov r20=cr.ifs;;
-       adds r21=XSI_INCOMPL_REGFR_OFS-XSI_PSR_IC_OFS,r18 ;;
-       st4 [r21]=r0 ;;
        adds r21=XSI_IFS_OFS-XSI_PSR_IC_OFS,r18 ;;
        st8 [r21]=r0 ;;
        adds r21=XSI_PRECOVER_IFS_OFS-XSI_PSR_IC_OFS,r18 ;;
@@ -459,11 +456,9 @@ GLOBAL_ENTRY(fast_tick_reflect)
        st1 [r22]=r20;;
        st4 [r18]=r0;;
        // cover and set shared_mem precover_ifs to cr.ifs
-       // set shared_mem ifs and incomplete_regframe to 0
+       // set shared_mem ifs to 0
        cover ;;
        mov r20=cr.ifs;;
-       adds r21=XSI_INCOMPL_REGFR_OFS-XSI_PSR_IC_OFS,r18 ;;
-       st4 [r21]=r0 ;;
        adds r21=XSI_IFS_OFS-XSI_PSR_IC_OFS,r18 ;;
        st8 [r21]=r0 ;;
        adds r21=XSI_PRECOVER_IFS_OFS-XSI_PSR_IC_OFS,r18 ;;
@@ -645,11 +640,9 @@ ENTRY(fast_reflect)
        st1 [r24]=r22
        st4 [r18]=r0;;
        // cover and set shared_mem precover_ifs to cr.ifs
-       // set shared_mem ifs and incomplete_regframe to 0
+       // set shared_mem ifs to 0
        cover ;;
        mov r24=cr.ifs;;
-       adds r21=XSI_INCOMPL_REGFR_OFS-XSI_PSR_IC_OFS,r18 ;;
-       st4 [r21]=r0 ;;
        adds r21=XSI_IFS_OFS-XSI_PSR_IC_OFS,r18 ;;
        st8 [r21]=r0 ;;
        adds r21=XSI_PRECOVER_IFS_OFS-XSI_PSR_IC_OFS,r18 ;;
@@ -1082,8 +1075,6 @@ just_do_rfi:
 just_do_rfi:
        // r18=&vpsr.i|vpsr.ic, r21==vpsr, r22=vcr.iip
        mov cr.iip=r22;;
-       adds r20=XSI_INCOMPL_REGFR_OFS-XSI_PSR_IC_OFS,r18 ;;
-       st4 [r20]=r0 ;;
        adds r20=XSI_IFS_OFS-XSI_PSR_IC_OFS,r18 ;;
        ld8 r20=[r20];;
        dep r20=0,r20,38,25;; // ensure ifs has no reserved bits set
@@ -1259,20 +1250,16 @@ ENTRY(rfi_with_interrupt)
        st1 [r22]=r20
        st4 [r18]=r0;;
        // cover and set shared_mem precover_ifs to cr.ifs
-       // set shared_mem ifs and incomplete_regframe to 0
+       // set shared_mem ifs to 0
 #if 0
        cover ;;
        mov r20=cr.ifs;;
-       adds r22=XSI_INCOMPL_REG_OFS-XSI_PSR_IC_OFS,r18 ;;
-       st4 [r22]=r0 ;;
        adds r22=XSI_IFS_OFS-XSI_PSR_IC_OFS,r18 ;;
        st8 [r22]=r0 ;;
        adds r22=XSI_PRECOVER_IFS_OFS-XSI_PSR_IC_OFS,r18 ;;
        st8 [r22]=r20 ;;
        // leave cr.ifs alone for later rfi
 #else
-       adds r22=XSI_INCOMPL_REG_OFS-XSI_PSR_IC_OFS,r18 ;;
-       st4 [r22]=r0 ;;
        adds r22=XSI_IFS_OFS-XSI_PSR_IC_OFS,r18 ;;
        ld8 r20=[r22];;
        st8 [r22]=r0 ;;
@@ -1334,13 +1321,9 @@ ENTRY(hyper_cover)
        mov r25=cr.iip;;
        // skip test for vpsr.ic.. it's a prerequisite for hyperprivops
        cover ;;
-       adds r20=XSI_INCOMPL_REGFR_OFS-XSI_PSR_IC_OFS,r18 ;;
-       mov r30=cr.ifs;;
-       adds r22=XSI_IFS_OFS-XSI_PSR_IC_OFS,r18
-       ld4 r21=[r20] ;;
-       cmp.eq p6,p7=r21,r0 ;;
-(p6)   st8 [r22]=r30;;
-(p7)   st4 [r20]=r0;;
+       mov r30=cr.ifs
+       adds r22=XSI_IFS_OFS-XSI_PSR_IC_OFS,r18;;
+       st8 [r22]=r30;;
        mov cr.ifs=r0;;
        // adjust return address to skip over break instruction
        extr.u r26=r24,41,2 ;;
diff -r 01ea554f1c5e -r cd6598396086 xen/arch/ia64/xen/vcpu.c
--- a/xen/arch/ia64/xen/vcpu.c  Thu Jan 11 16:56:58 2007 -0700
+++ b/xen/arch/ia64/xen/vcpu.c  Fri Jan 12 12:11:11 2007 -0700
@@ -613,7 +613,6 @@ IA64FAULT vcpu_get_ifs(VCPU * vcpu, u64 
        //PSCB(vcpu,ifs) = PSCB(vcpu)->regs.cr_ifs;
        //*pval = PSCB(vcpu,regs).cr_ifs;
        *pval = PSCB(vcpu, ifs);
-       PSCB(vcpu, incomplete_regframe) = 0;
        return IA64_NO_FAULT;
 }
 
@@ -1362,7 +1361,6 @@ IA64FAULT vcpu_rfi(VCPU * vcpu)
                printk("*** DOMAIN TRYING TO TURN ON BIG-ENDIAN!!!\n");
                return IA64_ILLOP_FAULT;
        }
-       PSCB(vcpu, incomplete_regframe) = 0;    // is this necessary?
 
        ifs = PSCB(vcpu, ifs);
        if (ifs > 0x8000000000000000UL) {
@@ -1397,10 +1395,7 @@ IA64FAULT vcpu_cover(VCPU * vcpu)
        REGS *regs = vcpu_regs(vcpu);
 
        if (!PSCB(vcpu, interrupt_collection_enabled)) {
-               if (!PSCB(vcpu, incomplete_regframe))
-                       PSCB(vcpu, ifs) = regs->cr_ifs;
-               else
-                       PSCB(vcpu, incomplete_regframe) = 0;
+               PSCB(vcpu, ifs) = regs->cr_ifs;
        }
        regs->cr_ifs = 0;
        return IA64_NO_FAULT;
diff -r 01ea554f1c5e -r cd6598396086 xen/include/public/arch-ia64.h
--- a/xen/include/public/arch-ia64.h    Thu Jan 11 16:56:58 2007 -0700
+++ b/xen/include/public/arch-ia64.h    Fri Jan 12 12:11:11 2007 -0700
@@ -287,10 +287,9 @@ struct mapped_regs {
              */
             unsigned char *interrupt_mask_addr;
             int pending_interruption;
-            int incomplete_regframe; // see SDM vol2 6.8
             unsigned char vpsr_pp;
-            unsigned char reserved5_2[7];
-            unsigned long reserved5_1[3];
+            unsigned char reserved5_2[3];
+            unsigned long reserved5_1[4];
             int metaphysical_mode; // 1 = use metaphys mapping, 0 = use virtual
             int banknum; // 0 or 1, which virtual register bank is active
             unsigned long rrs[8]; // region registers

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [IA64] Simplify lazy cover algorithm, Xen patchbot-unstable <=