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] [IA64] ia64_new_rr7 rewritten + cleanup

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [IA64] ia64_new_rr7 rewritten + cleanup
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 23 May 2006 12:44:29 +0000
Delivery-date: Tue, 23 May 2006 05:48:37 -0700
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@xxxxxxxxxxx
# Node ID f024bb5f5a075ccf65fe41e1b2111a531d0714b7
# Parent  9de9ad0685bf8b4f0ba6d3997cfcb362f98a6afd
[IA64] ia64_new_rr7 rewritten + cleanup

ia64_new_rr7 rewritten (more compact).
Cleanup in xenasm.S
Define of shared_info_va removed.

Signed-off-by: Tristan Gingold <tristan.gingold@xxxxxxxx>
---
 xen/arch/ia64/xen/domain.c    |    4 
 xen/arch/ia64/xen/regionreg.c |    8 
 xen/arch/ia64/xen/xenasm.S    |  349 +++++++++++-------------------------------
 xen/include/asm-ia64/domain.h |    1 
 4 files changed, 104 insertions(+), 258 deletions(-)

diff -r 9de9ad0685bf -r f024bb5f5a07 xen/arch/ia64/xen/domain.c
--- a/xen/arch/ia64/xen/domain.c        Wed May 10 15:29:48 2006 -0600
+++ b/xen/arch/ia64/xen/domain.c        Wed May 10 15:29:54 2006 -0600
@@ -239,7 +239,8 @@ int arch_domain_create(struct domain *d)
        // the following will eventually need to be negotiated dynamically
        d->xen_vastart = XEN_START_ADDR;
        d->xen_vaend = XEN_END_ADDR;
-       d->shared_info_va = SHAREDINFO_ADDR;
+       d->arch.shared_info_va = SHAREDINFO_ADDR;
+       d->arch.breakimm = 0x1000;
 
        if (is_idle_domain(d))
            return 0;
@@ -255,7 +256,6 @@ int arch_domain_create(struct domain *d)
         */
        if (!allocate_rid_range(d,0))
                goto fail_nomem;
-       d->arch.breakimm = 0x1000;
        d->arch.sys_pgnr = 0;
 
        if ((d->arch.mm = xmalloc(struct mm_struct)) == NULL)
diff -r 9de9ad0685bf -r f024bb5f5a07 xen/arch/ia64/xen/regionreg.c
--- a/xen/arch/ia64/xen/regionreg.c     Wed May 10 15:29:48 2006 -0600
+++ b/xen/arch/ia64/xen/regionreg.c     Wed May 10 15:29:54 2006 -0600
@@ -17,9 +17,7 @@
 #include <asm/vcpu.h>
 
 /* Defined in xemasm.S  */
-extern void ia64_new_rr7(unsigned long rid,void *shared_info, void 
*shared_arch_info, unsigned long p_vhpt, unsigned long v_pal);
-
-extern void *pal_vaddr;
+extern void ia64_new_rr7(unsigned long rid, void *shared_info, void 
*shared_arch_info, unsigned long shared_info_va, unsigned long p_vhpt);
 
 /* RID virtualization mechanism is really simple:  domains have less rid bits
    than the host and the host rid space is shared among the domains.  (Values
@@ -261,8 +259,8 @@ int set_one_rr(unsigned long rr, unsigne
                        set_rr(rr,newrrv.rrval);
        } else if (rreg == 7) {
                ia64_new_rr7(vmMangleRID(newrrv.rrval),v->vcpu_info,
-                            v->arch.privregs, __get_cpu_var(vhpt_paddr),
-                            (unsigned long) pal_vaddr);
+                            v->arch.privregs, v->domain->arch.shared_info_va,
+                            __get_cpu_var(vhpt_paddr));
        } else {
                set_rr(rr,newrrv.rrval);
        }
diff -r 9de9ad0685bf -r f024bb5f5a07 xen/arch/ia64/xen/xenasm.S
--- a/xen/arch/ia64/xen/xenasm.S        Wed May 10 15:29:48 2006 -0600
+++ b/xen/arch/ia64/xen/xenasm.S        Wed May 10 15:29:54 2006 -0600
@@ -11,242 +11,160 @@
 #include <asm/pgtable.h>
 #include <asm/vhpt.h>
 
-#if 0
-// FIXME: there's gotta be a better way...
-// ski and spaski are different... moved to xenmisc.c
-#define RunningOnHpSki(rx,ry,pn)                       \
-       addl rx = 2, r0;                                \
-       addl ry = 3, r0;                                \
-       ;;                                              \
-       mov rx = cpuid[rx];                             \
-       mov ry = cpuid[ry];                             \
-       ;;                                              \
-       cmp.eq pn,p0 = 0, rx;                           \
-       ;;                                              \
-       (pn) movl rx = 0x7000004 ;                      \
-       ;;                                              \
-       (pn) cmp.ge pn,p0 = ry, rx;                     \
-       ;;
-
-//int platform_is_hp_ski(void)
-GLOBAL_ENTRY(platform_is_hp_ski)
-       mov r8 = 0
-       RunningOnHpSki(r3,r9,p8)
-(p8)   mov r8 = 1
-       br.ret.sptk.many b0
-END(platform_is_hp_ski)
-#endif
-
 // Change rr7 to the passed value while ensuring
 // Xen is mapped into the new region.
-//   in0: new rr7 value
-//   in1: Xen virtual address of shared info (to be pinned)
 #define PSR_BITS_TO_CLEAR                                              \
        (IA64_PSR_I | IA64_PSR_IT | IA64_PSR_DT | IA64_PSR_RT |         \
         IA64_PSR_DD | IA64_PSR_SS | IA64_PSR_RI | IA64_PSR_ED |        \
-        IA64_PSR_DFL | IA64_PSR_DFH)
+        IA64_PSR_DFL | IA64_PSR_DFH | IA64_PSR_IC)
 // FIXME? Note that this turns off the DB bit (debug)
 #define PSR_BITS_TO_SET        IA64_PSR_BN
 
-//extern void ia64_new_rr7(unsigned long rid,void *shared_info, void 
*shared_arch_info, unsigned long p_vhpt, unsigned long v_pal);
+//extern void ia64_new_rr7(unsigned long rid,           /* in0 */
+//                         void *shared_info,           /* in1 */
+//                         void *shared_arch_info,      /* in2 */
+//                         unsigned long shared_info_va, /* in3 */
+//                         unsigned long p_vhpt)        /* in4 */
+//Local usage:
+//  loc0=rp, loc1=ar.pfs, loc2=percpu_paddr, loc3=psr, loc4=ar.rse
+//  loc5=pal_vaddr, loc6=xen_paddr, loc7=shared_archinfo_paddr,
 GLOBAL_ENTRY(ia64_new_rr7)
        // not sure this unwind statement is correct...
        .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(1)
-       alloc loc1 = ar.pfs, 5, 9, 0, 0
+       alloc loc1 = ar.pfs, 5, 8, 0, 0
+       movl loc2=PERCPU_ADDR
 1:     {
-         mov r28  = in0                // copy procedure index
+         mov loc3 = psr                // save psr     
+         mov loc0 = rp                 // save rp
          mov r8   = ip                 // save ip to compute branch
-         mov loc0 = rp                 // save rp
        };;
        .body
-       movl loc2=PERCPU_ADDR
-       ;;
        tpa loc2=loc2                   // grab this BEFORE changing rr7
-       ;;
-       dep loc8=0,in4,60,4
-       ;;
-#if VHPT_ENABLED
-       mov loc6=in3
-       ;;
-       //tpa loc6=loc6                 // grab this BEFORE changing rr7
-       ;;
-#endif
-       mov loc5=in1
-       ;;
-       tpa loc5=loc5                   // grab this BEFORE changing rr7
-       ;;
-       mov loc7=in2                    // arch_vcpu_info_t
-       ;;
-       tpa loc7=loc7                   // grab this BEFORE changing rr7
-       ;;
-       mov loc3 = psr                  // save psr
-       adds r8  = 1f-1b,r8             // calculate return address for call
-       ;;
+       tpa in1=in1                     // grab shared_info BEFORE changing rr7
+       adds r8 = 1f-1b,r8              // calculate return address for call
+       ;;
+       tpa loc7=in2                    // grab arch_vcpu_info BEFORE chg rr7
+       movl r17=PSR_BITS_TO_SET
+       mov loc4=ar.rsc                 // save RSE configuration
+       movl r16=PSR_BITS_TO_CLEAR
+       ;; 
        tpa r8=r8                       // convert rp to physical
-       ;;
-       mov loc4=ar.rsc                 // save RSE configuration
-       ;;
        mov ar.rsc=0                    // put RSE in enforced lazy, LE mode
-       movl r16=PSR_BITS_TO_CLEAR
-       movl r17=PSR_BITS_TO_SET
-       ;;
        or loc3=loc3,r17                // add in psr the bits to set
        ;;
        andcm r16=loc3,r16              // removes bits to clear from psr
+       dep loc6=0,r8,0,KERNEL_TR_PAGE_SHIFT // Xen code paddr
        br.call.sptk.many rp=ia64_switch_mode_phys
 1:
        // now in physical mode with psr.i/ic off so do rr7 switch
-       dep     r16=-1,r0,61,3
-       ;;
+       movl r16=pal_vaddr              // Note: belong to region 7!
+       ;; 
        mov     rr[r16]=in0
+       ;; 
        srlz.d
-       ;;
+       dep     r16=0,r16,60,4          // Get physical address.
+       ;;
+       ld8 loc5=[r16]                  // read pal_vaddr
+       movl    r26=PAGE_KERNEL
+       ;; 
 
        // re-pin mappings for kernel text and data
-       mov r18=KERNEL_TR_PAGE_SHIFT<<2
+       mov r24=KERNEL_TR_PAGE_SHIFT<<2
        movl r17=KERNEL_START
        ;;
-       rsm psr.i | psr.ic
-       ;;
-       srlz.i
-       ;;
-       ptr.i   r17,r18
-       ptr.d   r17,r18
-       ;;
-       mov cr.itir=r18
+       ptr.i   r17,r24
+       ptr.d   r17,r24
+       mov r16=IA64_TR_KERNEL
+       mov cr.itir=r24
        mov cr.ifa=r17
-       mov r16=IA64_TR_KERNEL
-       //mov r3=ip
-       movl r18=PAGE_KERNEL
-       ;;
-       dep r2=0,r3,0,KERNEL_TR_PAGE_SHIFT
-       ;;
-       or r18=r2,r18
-       ;;
-       srlz.i
+       or r18=loc6,r26
        ;;
        itr.i itr[r16]=r18
-       ;;
+       ;; 
        itr.d dtr[r16]=r18
-       ;;
-
-       // re-pin mappings for stack (current), per-cpu, vhpt, and shared info
+
+       // re-pin mappings for stack (current)
 
        // unless overlaps with KERNEL_TR
        dep r18=0,r13,0,KERNEL_TR_PAGE_SHIFT
        ;;
        cmp.eq p7,p0=r17,r18
 (p7)   br.cond.sptk    .stack_overlaps
-       ;;
-       movl r25=PAGE_KERNEL
+       mov r25=IA64_GRANULE_SHIFT<<2
        dep r21=0,r13,60,4              // physical address of "current"
        ;;
-       or r23=r25,r21                  // construct PA | page properties
-       mov r25=IA64_GRANULE_SHIFT<<2
-       ;;
        ptr.d   r13,r25
-       ;;
+       or r23=r21,r26                  // construct PA | page properties
        mov cr.itir=r25
        mov cr.ifa=r13                  // VA of next task...
-       ;;
-       mov r25=IA64_TR_CURRENT_STACK
+       mov r21=IA64_TR_CURRENT_STACK
+       ;;
+       itr.d dtr[r21]=r23              // wire in new mapping...
+
+       //  Per-cpu     
+.stack_overlaps:
+       mov r24=PERCPU_PAGE_SHIFT<<2
+       movl r22=PERCPU_ADDR
+       ;;
+       ptr.d   r22,r24
+       or r23=loc2,r26                 // construct PA | page properties
+       mov cr.itir=r24
+       mov cr.ifa=r22
+       mov r25=IA64_TR_PERCPU_DATA
        ;;
        itr.d dtr[r25]=r23              // wire in new mapping...
-       ;;
-.stack_overlaps:
-
-       movl r22=PERCPU_ADDR
-       ;;
-       movl r25=PAGE_KERNEL
-       ;;
-       mov r21=loc2                    // saved percpu physical address
-       ;;
-       or r23=r25,r21                  // construct PA | page properties
-       mov r24=PERCPU_PAGE_SHIFT<<2
+
+       // VHPT
+#if VHPT_ENABLED
+       mov r24=VHPT_SIZE_LOG2<<2
+       movl r22=VHPT_ADDR
+       mov r21=IA64_TR_VHPT
        ;;
        ptr.d   r22,r24
-       ;;
+       or r23=in4,r26                  // construct PA | page properties
        mov cr.itir=r24
        mov cr.ifa=r22
        ;;
-       mov r25=IA64_TR_PERCPU_DATA
-       ;;
-       itr.d dtr[r25]=r23              // wire in new mapping...
-       ;;
-
-#if VHPT_ENABLED
-       movl r22=VHPT_ADDR
-       ;;
-       movl r25=PAGE_KERNEL
-       ;;
-       mov r21=loc6                    // saved vhpt physical address
-       ;;
-       or r23=r25,r21                  // construct PA | page properties
-       mov r24=VHPT_SIZE_LOG2<<2
+       itr.d dtr[r21]=r23              // wire in new mapping...
+#endif
+
+       //  Shared info
+       mov r24=PAGE_SHIFT<<2
+       movl r25=__pgprot(__DIRTY_BITS | _PAGE_PL_2 | _PAGE_AR_RW)
+       ;;
+       ptr.d   in3,r24
+       or r23=in1,r25                  // construct PA | page properties
+       mov cr.itir=r24
+       mov cr.ifa=in3
+       mov r21=IA64_TR_SHARED_INFO
+       ;;
+       itr.d dtr[r21]=r23              // wire in new mapping...
+       
+       // Map for arch_vcpu_info_t
+       movl r22=XSI_OFS
+       mov r24=PAGE_SHIFT<<2
+       ;; 
+       add r22=r22,in3
        ;;
        ptr.d   r22,r24
-       ;;
+       or r23=loc7,r25                 // construct PA | page properties
        mov cr.itir=r24
        mov cr.ifa=r22
-       ;;
-       mov r25=IA64_TR_VHPT
-       ;;
-       itr.d dtr[r25]=r23              // wire in new mapping...
-       ;;
-#endif
-
-       movl r22=SHAREDINFO_ADDR
-       ;;
-       movl r25=__pgprot(__DIRTY_BITS | _PAGE_PL_2 | _PAGE_AR_RW)
-       ;;
-       mov r21=loc5                    // saved sharedinfo physical address
-       ;;
-       or r23=r25,r21                  // construct PA | page properties
-       mov r24=PAGE_SHIFT<<2
-       ;;
-       ptr.d   r22,r24
-       ;;
-       mov cr.itir=r24
-       mov cr.ifa=r22
-       ;;
-       mov r25=IA64_TR_SHARED_INFO
-       ;;
-       itr.d dtr[r25]=r23              // wire in new mapping...
-       ;;
-       // Map for arch_vcpu_info_t
-       movl r22=SHARED_ARCHINFO_ADDR
-       ;;
-       movl r25=__pgprot(__DIRTY_BITS | _PAGE_PL_2 | _PAGE_AR_RW)
-       ;;
-       mov r21=loc7                    // saved sharedinfo physical address
-       ;;
-       or r23=r25,r21                  // construct PA | page properties
-       mov r24=PAGE_SHIFT<<2
-       ;;
-       ptr.d   r22,r24
-       ;;
-       mov cr.itir=r24
-       mov cr.ifa=r22
-       ;;
-       mov r25=IA64_TR_ARCH_INFO
-       ;;
-       itr.d dtr[r25]=r23              // wire in new mapping...
-       ;;
-
-       //Purge/insert PAL TR
+       mov r21=IA64_TR_ARCH_INFO
+       ;;
+       itr.d dtr[r21]=r23              // wire in new mapping...
+
+       // Purge/insert PAL TR
        mov r24=IA64_TR_PALCODE
-       movl r25=PAGE_KERNEL
-       ;;
-       or loc8=r25,loc8
        mov r23=IA64_GRANULE_SHIFT<<2
-       ;;
-       ptr.i   in4,r23
-       ;;
+       dep r25=0,loc5,60,4             // convert pal vaddr to paddr
+       ;;
+       ptr.i   loc5,r23
+       or r25=r25,r26          // construct PA | page properties
        mov cr.itir=r23
-       mov cr.ifa=in4
-       ;;
-       itr.i itr[r24]=loc8
-       ;;
+       mov cr.ifa=loc5
+       ;;
+       itr.i itr[r24]=r25
 
        // done, switch back to virtual and return
        mov r16=loc3                    // r16= original psr
@@ -261,6 +179,7 @@ 1:
        br.ret.sptk.many rp
 END(ia64_new_rr7)
 
+#if 0 /* Not used */
 #include "minstate.h"
 
 GLOBAL_ENTRY(ia64_prepare_handle_privop)
@@ -301,6 +220,7 @@ GLOBAL_ENTRY(ia64_prepare_handle_reflect
        DO_LOAD_SWITCH_STACK
        br.cond.sptk.many rp                    // goes to ia64_leave_kernel
 END(ia64_prepare_handle_reflection)
+#endif
 
 GLOBAL_ENTRY(__get_domain_bundle)
        EX(.failure_in_get_bundle,ld8 r8=[r32],8)
@@ -331,80 +251,9 @@ GLOBAL_ENTRY(dorfirfi)
         mov cr.ipsr=r17
         mov cr.ifs=r18
        ;;
-        // fall through
+        rfi
+       ;;
 END(dorfirfi)
-
-GLOBAL_ENTRY(dorfi)
-        rfi
-       ;;
-END(dorfi)
-
-//
-// Long's Peak UART Offsets
-//
-#define COM_TOP 0xff5e0000
-#define COM_BOT 0xff5e2000
-
-// UART offsets        
-#define UART_TX                0       /* Out: Transmit buffer (DLAB=0) */
-#define UART_INT_ENB   1       /* interrupt enable (DLAB=0) */ 
-#define UART_INT_ID    2       /* Interrupt ID register */
-#define UART_LINE_CTL  3       /* Line control register */
-#define UART_MODEM_CTL 4       /* Modem Control Register */
-#define UART_LSR       5       /* In:  Line Status Register */
-#define UART_MSR       6       /* Modem status register */     
-#define UART_DLATCH_LOW UART_TX
-#define UART_DLATCH_HIGH UART_INT_ENB
-#define COM1   0x3f8
-#define COM2   0x2F8
-#define COM3   0x3E8
-
-/* interrupt enable bits (offset 1) */
-#define DATA_AVAIL_INT 1
-#define XMIT_HOLD_EMPTY_INT 2
-#define LINE_STAT_INT 4
-#define MODEM_STAT_INT 8
-
-/* line status bits (offset 5) */
-#define REC_DATA_READY 1
-#define OVERRUN 2
-#define PARITY_ERROR 4
-#define FRAMING_ERROR 8
-#define BREAK_INTERRUPT 0x10
-#define XMIT_HOLD_EMPTY 0x20
-#define XMIT_SHIFT_EMPTY 0x40
-
-// Write a single character
-// input: r32 = character to be written
-// output: none
-GLOBAL_ENTRY(longs_peak_putc)  
-       rsm psr.dt
-        movl r16 = 0x8000000000000000 + COM_TOP + UART_LSR
-       ;;
-       srlz.i
-       ;;
-
-.Chk_THRE_p:
-        ld1.acq r18=[r16]
-        ;;
-       
-       and r18 = XMIT_HOLD_EMPTY, r18
-       ;;
-       cmp4.eq p6,p0=0,r18
-       ;;
-       
-(p6)    br .Chk_THRE_p
-       ;;
-        movl r16 = 0x8000000000000000 + COM_TOP + UART_TX
-       ;;
-       st1.rel [r16]=r32
-       ;;
-       ssm psr.dt
-       ;;
-       srlz.i
-       ;;
-       br.ret.sptk.many b0
-END(longs_peak_putc)   
 
 /* derived from linux/arch/ia64/hp/sim/boot/boot_head.S */
 GLOBAL_ENTRY(pal_emulator_static)
diff -r 9de9ad0685bf -r f024bb5f5a07 xen/include/asm-ia64/domain.h
--- a/xen/include/asm-ia64/domain.h     Wed May 10 15:29:48 2006 -0600
+++ b/xen/include/asm-ia64/domain.h     Wed May 10 15:29:54 2006 -0600
@@ -59,7 +59,6 @@ struct arch_domain {
 };
 #define xen_vastart arch.xen_vastart
 #define xen_vaend arch.xen_vaend
-#define shared_info_va arch.shared_info_va
 #define INT_ENABLE_OFFSET(v)             \
     (sizeof(vcpu_info_t) * (v)->vcpu_id + \
     offsetof(vcpu_info_t, evtchn_upcall_mask))

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [IA64] ia64_new_rr7 rewritten + cleanup, Xen patchbot-unstable <=