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

[Xen-changelog] [xen-3.0.4-testing] Merge with xen-unstable.hg



# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Date 1166529726 0
# Node ID bc0462e17e00ab5c08a2d6ce3ff4f8eaa4c289e7
# Parent  e7aece4a8c1d80712f82ecc494153a966b8ac0ab
# Parent  057f7c4dbed1c75a3fbe446d346cee04cff31497
Merge with xen-unstable.hg
---
 linux-2.6-xen-sparse/arch/ia64/kernel/asm-offsets.c |    1 
 linux-2.6-xen-sparse/arch/ia64/kernel/gate.S        |    9 
 linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S      |   14 
 linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S         |   27 +
 linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h  |    3 
 tools/python/xen/xend/XendConfig.py                 |    1 
 xen/arch/ia64/asm-offsets.c                         |    2 
 xen/arch/ia64/asm-xsi-offsets.c                     |    1 
 xen/arch/ia64/xen/faults.c                          |    3 
 xen/arch/ia64/xen/hyperprivop.S                     |  296 +-------------------
 xen/arch/ia64/xen/ivt.S                             |    2 
 xen/arch/ia64/xen/vcpu.c                            |    1 
 xen/arch/ia64/xen/xensetup.c                        |    6 
 xen/common/xenoprof.c                               |    2 
 xen/include/asm-ia64/linux-xen/asm/pgtable.h        |    5 
 xen/include/xen/elfcore.h                           |    4 
 16 files changed, 70 insertions(+), 307 deletions(-)

diff -r e7aece4a8c1d -r bc0462e17e00 
linux-2.6-xen-sparse/arch/ia64/kernel/asm-offsets.c
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/asm-offsets.c       Mon Dec 18 
14:39:56 2006 +0000
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/asm-offsets.c       Tue Dec 19 
12:02:06 2006 +0000
@@ -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_PEND_OFS, pending_interruption);
        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]);
diff -r e7aece4a8c1d -r bc0462e17e00 
linux-2.6-xen-sparse/arch/ia64/kernel/gate.S
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/gate.S      Mon Dec 18 14:39:56 
2006 +0000
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/gate.S      Tue Dec 19 12:02:06 
2006 +0000
@@ -128,9 +128,9 @@ GLOBAL_ENTRY(__kernel_syscall_via_epc)
        ;;
 #ifdef CONFIG_XEN_IA64_VDSO_PARAVIRT
        // r20 = 1
-       // r22 = &vcpu->evtchn_mask
+       // r22 = &vcpu->vcpu_info->evtchn_upcall_mask
        // r23 = &vpsr.ic
-       // r24 = &vcpu->pending_interruption
+       // r24 = &vcpu->vcpu_info->evtchn_upcall_pending
        // r25 = tmp
        // r28 = &running_on_xen
        // r30 = running_on_xen
@@ -144,8 +144,11 @@ GLOBAL_ENTRY(__kernel_syscall_via_epc)
 #define isRaw  p13
        LOAD_RUNNING_ON_XEN(r28)
        movl r22=XSI_PSR_I_ADDR
+       ;;
+       ld8 r22=[r22]
+       ;;
        movl r23=XSI_PSR_IC
-       movl r24=XSI_PSR_I_ADDR+(XSI_PEND_OFS-XSI_PSR_I_ADDR_OFS)
+       adds r24=-1,r22
        mov r20=1
        ;;
        ld4 r30=[r28]
diff -r e7aece4a8c1d -r bc0462e17e00 
linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S
--- a/linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S    Mon Dec 18 14:39:56 
2006 +0000
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/hypercall.S    Tue Dec 19 12:02:06 
2006 +0000
@@ -356,8 +356,6 @@ END(xen_send_ipi)
 // Those are vdso specialized.
 // In fsys mode, call, ret can't be used.
 GLOBAL_ENTRY(xen_rsm_be_i)
-       ld8 r22=[r22]
-       ;; 
        st1 [r22]=r20
        st4 [r23]=r0
        XEN_HYPER_RSM_BE
@@ -380,23 +378,23 @@ END(xen_get_psr)
 END(xen_get_psr)
 
        // see xen_ssm_i() in privop.h
-       // r22 = &vcpu->evtchn_mask
+       // r22 = &vcpu->vcpu_info->evtchn_upcall_mask
        // r23 = &vpsr.ic
-       // r24 = &vcpu->pending_interruption
+       // r24 = &vcpu->vcpu_info->evtchn_upcall_pending
        // r25 = tmp
        // r31 = tmp
        // p11 = tmp
        // p14 = tmp
 #define XEN_SET_PSR_I                  \
-       ld4 r31=[r22];                  \
-       ld4 r25=[r24];                  \
+       ld1 r31=[r22];                  \
+       ld1 r25=[r24];                  \
        ;;                              \
-       st4 [r22]=r0;                   \
+       st1 [r22]=r0;                   \
        cmp.ne.unc p14,p0=r0,r31;       \
        ;;                              \
 (p14)  cmp.ne.unc p11,p0=r0,r25;       \
        ;;                              \
-(p11)  st4 [r22]=r20;                  \
+(p11)  st1 [r22]=r20;                  \
 (p11)  st4 [r23]=r0;                   \
 (p11)  XEN_HYPER_SSM_I;
                
diff -r e7aece4a8c1d -r bc0462e17e00 linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S
--- a/linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S       Mon Dec 18 14:39:56 
2006 +0000
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/xenivt.S       Tue Dec 19 12:02:06 
2006 +0000
@@ -737,10 +737,10 @@ xen_page_fault:
        ;;
 (p15)  ld8 r3=[r3]
        ;;
-(p15)  st1 [r3]=r0,XSI_PEND_OFS-XSI_PSR_I_ADDR_OFS     // if (p15) vpsr.i = 1
+(p15)  st1 [r3]=r0,-1  // if (p15) vpsr.i = 1
        mov r14=r0
        ;;
-(p15)  ld4 r14=[r3]                            // if (pending_interrupts)
+(p15)  ld1 r14=[r3]                            // if (pending_events)
        adds r3=8,r2                            // re-set up second base pointer
        ;;
 (p15)  cmp.ne  p15,p0=r14,r0
@@ -1170,10 +1170,10 @@ 1:
 #ifdef CONFIG_XEN
 (p15)  ld8 r16=[r16]                           // vpsr.i
        ;;
-(p15)  st1 [r16]=r0,XSI_PEND_OFS-XSI_PSR_I_ADDR_OFS    // if (p15) vpsr.i = 1
+(p15)  st1 [r16]=r0,-1         // if (p15) vpsr.i = 1
        mov r2=r0
        ;;
-(p15)  ld4 r2=[r16]                            // if (pending_interrupts)
+(p15)  ld1 r2=[r16]                            // if (pending_events)
        ;;
        cmp.ne  p6,p0=r2,r0
        ;;
@@ -2159,13 +2159,22 @@ GLOBAL_ENTRY(xen_event_callback)
        ;;
        SAVE_REST
        ;;
+1:
        alloc r14=ar.pfs,0,0,1,0 // must be first in an insn group
        add out0=16,sp          // pass pointer to pt_regs as first arg
        ;;
-       srlz.d                  // make sure we see the effect of cr.ivr
-       movl r14=ia64_leave_kernel
-       ;;
-       mov rp=r14
-       br.call.sptk.many b6=evtchn_do_upcall
+       br.call.sptk.many b0=evtchn_do_upcall
+       ;;
+       movl r20=XSI_PSR_I_ADDR
+       ;;
+       ld8 r20=[r20]
+       ;;
+       adds r20=-1,r20         // vcpu_info->evtchn_upcall_pending
+       ;;
+       ld1 r20=[r20]
+       ;;
+       cmp.ne p6,p0=r20,r0     // if there are pending events, 
+       (p6) br.spnt.few 1b     // call evtchn_do_upcall again.
+       br.sptk.many ia64_leave_kernel   
 END(xen_event_callback)
 #endif
diff -r e7aece4a8c1d -r bc0462e17e00 
linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h
--- a/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h        Mon Dec 18 
14:39:56 2006 +0000
+++ b/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h        Tue Dec 19 
12:02:06 2006 +0000
@@ -113,7 +113,8 @@ extern void xen_set_eflag(unsigned long)
        ({ XSI_PSR_I = (uint8_t)(_val) ? 0 : 1; })
 #define xen_set_virtual_psr_ic(_val)   \
        ({ XEN_MAPPEDREGS->interrupt_collection_enabled = _val ? 1 : 0; })
-#define xen_get_virtual_pend()         (XEN_MAPPEDREGS->pending_interruption)
+#define xen_get_virtual_pend()         \
+       (*(((uint8_t *)XEN_MAPPEDREGS->interrupt_mask_addr) - 1))
 
 /* Hyperprivops are "break" instructions with a well-defined API.
  * In particular, the virtual psr.ic bit must be off; in this way
diff -r e7aece4a8c1d -r bc0462e17e00 tools/python/xen/xend/XendConfig.py
--- a/tools/python/xen/xend/XendConfig.py       Mon Dec 18 14:39:56 2006 +0000
+++ b/tools/python/xen/xend/XendConfig.py       Tue Dec 19 12:02:06 2006 +0000
@@ -85,6 +85,7 @@ XENAPI_CFG_TO_LEGACY_CFG = {
 XENAPI_CFG_TO_LEGACY_CFG = {
     'uuid': 'uuid',
     'vcpus_number': 'vcpus',
+    'cpus': 'cpus',
     'memory_static_min': 'memory',
     'memory_static_max': 'maxmem',
     'name_label': 'name',
diff -r e7aece4a8c1d -r bc0462e17e00 xen/arch/ia64/asm-offsets.c
--- a/xen/arch/ia64/asm-offsets.c       Mon Dec 18 14:39:56 2006 +0000
+++ b/xen/arch/ia64/asm-offsets.c       Tue Dec 19 12:02:06 2006 +0000
@@ -41,6 +41,8 @@ void foo(void)
        DEFINE(VCPU_VTM_OFFSET_OFS, offsetof(struct vcpu, 
arch.arch_vmx.vtm.vtm_offset));
        DEFINE(VCPU_VTM_LAST_ITC_OFS, offsetof(struct vcpu, 
arch.arch_vmx.vtm.last_itc));
        DEFINE(VCPU_VRR0_OFS, offsetof(struct vcpu, arch.arch_vmx.vrr[0]));
+       DEFINE(VCPU_ITR0_OFS, offsetof(struct vcpu, arch.itrs[0]));
+       DEFINE(VCPU_CALLBACK_OFS, offsetof(struct vcpu, 
arch.event_callback_ip));
 #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));
diff -r e7aece4a8c1d -r bc0462e17e00 xen/arch/ia64/asm-xsi-offsets.c
--- a/xen/arch/ia64/asm-xsi-offsets.c   Mon Dec 18 14:39:56 2006 +0000
+++ b/xen/arch/ia64/asm-xsi-offsets.c   Tue Dec 19 12:02:06 2006 +0000
@@ -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_PEND_OFS, pending_interruption);
        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);
diff -r e7aece4a8c1d -r bc0462e17e00 xen/arch/ia64/xen/faults.c
--- a/xen/arch/ia64/xen/faults.c        Mon Dec 18 14:39:56 2006 +0000
+++ b/xen/arch/ia64/xen/faults.c        Tue Dec 19 12:02:06 2006 +0000
@@ -605,6 +605,9 @@ ia64_handle_reflection(unsigned long ifa
                check_lazy_cover = 1;
                vector = IA64_DATA_ACCESS_RIGHTS_VECTOR;
                break;
+       case 24:
+               vector = IA64_GENEX_VECTOR;
+               break;
        case 25:
                vector = IA64_DISABLED_FPREG_VECTOR;
                break;
diff -r e7aece4a8c1d -r bc0462e17e00 xen/arch/ia64/xen/hyperprivop.S
--- a/xen/arch/ia64/xen/hyperprivop.S   Mon Dec 18 14:39:56 2006 +0000
+++ b/xen/arch/ia64/xen/hyperprivop.S   Tue Dec 19 12:02:06 2006 +0000
@@ -37,8 +37,10 @@
 # define FAST_BREAK
 # undef FAST_ACCESS_REFLECT    //XXX TODO fast_access_reflect
                                //    doesn't support dom0 vp yet.
-# define FAST_RFI
-# define FAST_SSM_I
+//# define FAST_RFI
+// TODO: Since we use callback to deliver interrupt, 
+//       FAST_SSM_I needs to be rewritten.
+//# define FAST_SSM_I
 # define FAST_PTC_GA
 # undef RFI_TO_INTERRUPT // not working yet
 #endif
@@ -87,29 +89,13 @@ GLOBAL_ENTRY(fast_hyperprivop)
        cmp.eq p7,p6=HYPERPRIVOP_SSM_I,r17
 (p7)   br.sptk.many hyper_ssm_i;;
 
-       // FIXME. This algorithm gives up (goes to the slow path) if there
-       // are ANY interrupts pending, even if they are currently
-       // undeliverable.  This should be improved later...
-       adds r20=XSI_PEND_OFS-XSI_PSR_IC_OFS,r18 ;;
-       ld4 r20=[r20] ;;
-       cmp.eq p7,p0=r0,r20
-(p7)   br.cond.sptk.many 1f
-       movl r20=THIS_CPU(cpu_kr)+IA64_KR_CURRENT_OFFSET;;
-       ld8 r20=[r20];;
-       adds r21=IA64_VCPU_IRR0_OFFSET,r20;
-       adds r22=IA64_VCPU_IRR0_OFFSET+8,r20;;
-       ld8 r23=[r21],16; ld8 r24=[r22],16;;
-       ld8 r21=[r21]; ld8 r22=[r22];;
-       or r23=r23,r24; or r21=r21,r22;;
-       or r20=r23,r21;;
-1:     // when we get to here r20=~=interrupts pending
        // Check pending event indication
-(p7)   movl r20=THIS_CPU(current_psr_i_addr);;
-(p7)   ld8 r20=[r20]
-       ;;
-(p7)   adds r20=-1,r20                         // evtchn_upcall_pending
-       ;;
-(p7)   ld1 r20=[r20]
+       adds r20=XSI_PSR_I_ADDR_OFS-XSI_PSR_IC_OFS, r18;;
+       ld8 r20=[r20]
+       ;;
+       ld1 r22=[r20],-1        // evtchn_upcall_mask
+       ;;
+       ld1 r20=[r20]           // evtchn_upcall_pending
        ;;
 
        // HYPERPRIVOP_RFI?
@@ -117,12 +103,10 @@ 1:        // when we get to here r20=~=interrup
 (p7)   br.sptk.many hyper_rfi
        ;;
 
-       // HYPERPRIVOP_GET_IVR?
-       cmp.eq p7,p6=HYPERPRIVOP_GET_IVR,r17
-(p7)   br.sptk.many hyper_get_ivr
-       ;;
-
+       // if event enabled and there are pending events
        cmp.ne p7,p0=r20,r0
+       ;;
+       cmp.eq.and p7,p0=r22,r0
 (p7)   br.spnt.many dispatch_break_fault
        ;;
 
@@ -139,21 +123,6 @@ 1: // when we get to here r20=~=interrup
        // HYPERPRIVOP_RSM_DT?
        cmp.eq p7,p6=HYPERPRIVOP_RSM_DT,r17
 (p7)   br.sptk.many hyper_rsm_dt
-       ;;
-
-       // HYPERPRIVOP_GET_TPR?
-       cmp.eq p7,p6=HYPERPRIVOP_GET_TPR,r17
-(p7)   br.sptk.many hyper_get_tpr
-       ;;
-
-       // HYPERPRIVOP_SET_TPR?
-       cmp.eq p7,p6=HYPERPRIVOP_SET_TPR,r17
-(p7)   br.sptk.many hyper_set_tpr
-       ;;
-
-       // HYPERPRIVOP_EOI?
-       cmp.eq p7,p6=HYPERPRIVOP_EOI,r17
-(p7)   br.sptk.many hyper_eoi
        ;;
 
        // HYPERPRIVOP_SET_ITM?
@@ -425,10 +394,11 @@ GLOBAL_ENTRY(fast_tick_reflect)
        ld8 r23=[r21];;
        or r22=r22,r23;;
        st8 [r21]=r22;;
-       // set PSCB(pending_interruption)!
-       adds r20=XSI_PEND_OFS-XSI_PSR_IC_OFS,r18 ;;
-       st4 [r20]=r25;;
-       
+       // set evtchn_upcall_pending!
+       adds r20=XSI_PSR_I_ADDR_OFS-XSI_PSR_IC_OFS,r18;;
+       ld8 r20=[r20];;
+       adds r20=-1,r20;;               // evtchn_upcall_pending
+       st1 [r20]=r25;;
        // if interrupted at pl0, we're done
        extr.u r16=r17,IA64_PSR_CPL0_BIT,2;;
        cmp.eq p6,p0=r16,r0;;
@@ -1464,236 +1434,6 @@ 1:      extr.u r26=r24,41,2 ;;
        rfi
        ;;
 END(hyper_rsm_dt)
-
-ENTRY(hyper_get_tpr)
-#ifdef FAST_HYPERPRIVOP_CNT
-       movl r20=FAST_HYPERPRIVOP_PERFC(HYPERPRIVOP_GET_TPR);;
-       ld4 r21=[r20];;
-       adds r21=1,r21;;
-       st4 [r20]=r21;;
-#endif
-       mov r24=cr.ipsr
-       mov r25=cr.iip;;
-       adds r20=XSI_TPR_OFS-XSI_PSR_IC_OFS,r18 ;;
-       ld8 r8=[r20];;
-       extr.u r26=r24,41,2 ;;
-       cmp.eq p6,p7=2,r26 ;;
-(p6)   mov r26=0
-(p6)   adds r25=16,r25
-(p7)   adds r26=1,r26
-       ;;
-       dep r24=r26,r24,41,2
-       ;;
-       mov cr.ipsr=r24
-       mov cr.iip=r25
-       mov pr=r31,-1 ;;
-       rfi
-       ;;
-END(hyper_get_tpr)
-
-// if we get to here, there are no interrupts pending so we
-// can change virtual tpr to any value without fear of provoking
-// (or accidentally missing) delivering an interrupt
-ENTRY(hyper_set_tpr)
-#ifdef FAST_HYPERPRIVOP_CNT
-       movl r20=FAST_HYPERPRIVOP_PERFC(HYPERPRIVOP_SET_TPR);;
-       ld4 r21=[r20];;
-       adds r21=1,r21;;
-       st4 [r20]=r21;;
-#endif
-       mov r24=cr.ipsr
-       mov r25=cr.iip;;
-       movl r27=0xff00;;
-       adds r20=XSI_TPR_OFS-XSI_PSR_IC_OFS,r18 ;;
-       andcm r8=r8,r27;;
-       st8 [r20]=r8;;
-       extr.u r26=r24,41,2 ;;
-       cmp.eq p6,p7=2,r26 ;;
-(p6)   mov r26=0
-(p6)   adds r25=16,r25
-(p7)   adds r26=1,r26
-       ;;
-       dep r24=r26,r24,41,2
-       ;;
-       mov cr.ipsr=r24
-       mov cr.iip=r25
-       mov pr=r31,-1 ;;
-       rfi
-       ;;
-END(hyper_set_tpr)
-
-ENTRY(hyper_get_ivr)
-#ifdef FAST_HYPERPRIVOP_CNT
-       movl r22=FAST_HYPERPRIVOP_PERFC(HYPERPRIVOP_GET_IVR);;
-       ld4 r21=[r22];;
-       adds r21=1,r21;;
-       st4 [r22]=r21;;
-#endif
-       mov r8=15;;
-       // when we get to here r20=~=interrupts pending
-       cmp.eq p7,p0=r20,r0;;
-(p7)   adds r20=XSI_PEND_OFS-XSI_PSR_IC_OFS,r18 ;;
-(p7)   st4 [r20]=r0;;
-(p7)   br.spnt.many 1f ;;
-       movl r30=THIS_CPU(cpu_kr)+IA64_KR_CURRENT_OFFSET;;
-       ld8 r30=[r30];;
-       adds r24=IA64_VCPU_INSVC3_OFFSET,r30;;
-       mov r25=192
-       adds r22=IA64_VCPU_IRR3_OFFSET,r30;;
-       ld8 r23=[r22];;
-       cmp.eq p6,p0=r23,r0;;
-(p6)   adds r22=-8,r22;;
-(p6)   adds r24=-8,r24;;
-(p6)   adds r25=-64,r25;;
-(p6)   ld8 r23=[r22];;
-(p6)   cmp.eq p6,p0=r23,r0;;
-(p6)   adds r22=-8,r22;;
-(p6)   adds r24=-8,r24;;
-(p6)   adds r25=-64,r25;;
-(p6)   ld8 r23=[r22];;
-(p6)   cmp.eq p6,p0=r23,r0;;
-(p6)   adds r22=-8,r22;;
-(p6)   adds r24=-8,r24;;
-(p6)   adds r25=-64,r25;;
-(p6)   ld8 r23=[r22];;
-(p6)   cmp.eq p6,p0=r23,r0;;
-       cmp.eq p6,p0=r23,r0
-(p6)   br.cond.spnt.few 1f;    // this is actually an error
-       // r22 points to non-zero element of irr, r23 has value
-       // r24 points to corr element of insvc, r25 has elt*64
-       ld8 r26=[r24];;
-       cmp.geu p6,p0=r26,r23
-(p6)   br.cond.spnt.many 1f;
-       // not masked by insvc, get vector number
-       shr.u r26=r23,1;;
-       or r26=r23,r26;;
-       shr.u r27=r26,2;;
-       or r26=r26,r27;;
-       shr.u r27=r26,4;;
-       or r26=r26,r27;;
-       shr.u r27=r26,8;;
-       or r26=r26,r27;;
-       shr.u r27=r26,16;;
-       or r26=r26,r27;;
-       shr.u r27=r26,32;;
-       or r26=r26,r27;;
-       andcm r26=0xffffffffffffffff,r26;;
-       popcnt r26=r26;;
-       sub r26=63,r26;;
-       // r26 now contains the bit index (mod 64)
-       mov r27=1;;
-       shl r27=r27,r26;;
-       // r27 now contains the (within the proper word) bit mask 
-       add r26=r25,r26
-       // r26 now contains the vector [0..255]
-       adds r20=XSI_TPR_OFS-XSI_PSR_IC_OFS,r18 ;;
-       ld8 r20=[r20] ;;
-       extr.u r28=r20,16,1
-       extr.u r29=r20,4,4 ;;
-       cmp.ne p6,p0=r28,r0     // if tpr.mmi is set, return SPURIOUS
-(p6)   br.cond.spnt.few 1f;
-       shl r29=r29,4;;
-       adds r29=15,r29;;
-       cmp.ge p6,p0=r29,r26
-(p6)   br.cond.spnt.few 1f;
-       // OK, have an unmasked vector to process/return
-       ld8 r25=[r24];;
-       or r25=r25,r27;;
-       st8 [r24]=r25;;
-       ld8 r25=[r22];;
-       andcm r25=r25,r27;;
-       st8 [r22]=r25;;
-       mov r8=r26;;
-       // if its a clock tick, remember itm to avoid delivering it twice
-       adds r20=XSI_ITV_OFS-XSI_PSR_IC_OFS,r18 ;;
-       ld8 r20=[r20];;
-       extr.u r20=r20,0,8;;
-       cmp.eq p6,p0=r20,r8
-       adds r22=IA64_VCPU_DOMAIN_ITM_LAST_OFFSET,r30
-       adds r23=IA64_VCPU_DOMAIN_ITM_OFFSET,r30;;
-       ld8 r23=[r23];;
-(p6)   st8 [r22]=r23;;
-       // all done
-1:     mov r24=cr.ipsr
-       mov r25=cr.iip;;
-       extr.u r26=r24,41,2 ;;
-       cmp.eq p6,p7=2,r26 ;;
-(p6)   mov r26=0
-(p6)   adds r25=16,r25
-(p7)   adds r26=1,r26
-       ;;
-       dep r24=r26,r24,41,2
-       ;;
-       mov cr.ipsr=r24
-       mov cr.iip=r25
-       mov pr=r31,-1 ;;
-       rfi
-       ;;
-END(hyper_get_ivr)
-
-ENTRY(hyper_eoi)
-       // when we get to here r20=~=interrupts pending
-       cmp.ne p7,p0=r20,r0
-(p7)   br.spnt.many dispatch_break_fault ;;
-#ifdef FAST_HYPERPRIVOP_CNT
-       movl r20=FAST_HYPERPRIVOP_PERFC(HYPERPRIVOP_EOI);;
-       ld4 r21=[r20];;
-       adds r21=1,r21;;
-       st4 [r20]=r21;;
-#endif
-       movl r22=THIS_CPU(cpu_kr)+IA64_KR_CURRENT_OFFSET;;
-       ld8 r22=[r22];;
-       adds r22=IA64_VCPU_INSVC3_OFFSET,r22;;
-       ld8 r23=[r22];;
-       cmp.eq p6,p0=r23,r0;;
-(p6)   adds r22=-8,r22;;
-(p6)   ld8 r23=[r22];;
-(p6)   cmp.eq p6,p0=r23,r0;;
-(p6)   adds r22=-8,r22;;
-(p6)   ld8 r23=[r22];;
-(p6)   cmp.eq p6,p0=r23,r0;;
-(p6)   adds r22=-8,r22;;
-(p6)   ld8 r23=[r22];;
-(p6)   cmp.eq p6,p0=r23,r0;;
-       cmp.eq p6,p0=r23,r0
-(p6)   br.cond.spnt.few 1f;    // this is actually an error
-       // r22 points to non-zero element of insvc, r23 has value
-       shr.u r24=r23,1;;
-       or r24=r23,r24;;
-       shr.u r25=r24,2;;
-       or r24=r24,r25;;
-       shr.u r25=r24,4;;
-       or r24=r24,r25;;
-       shr.u r25=r24,8;;
-       or r24=r24,r25;;
-       shr.u r25=r24,16;;
-       or r24=r24,r25;;
-       shr.u r25=r24,32;;
-       or r24=r24,r25;;
-       andcm r24=0xffffffffffffffff,r24;;
-       popcnt r24=r24;;
-       sub r24=63,r24;;
-       // r24 now contains the bit index
-       mov r25=1;;
-       shl r25=r25,r24;;
-       andcm r23=r23,r25;;
-       st8 [r22]=r23;;
-1:     mov r24=cr.ipsr
-       mov r25=cr.iip;;
-       extr.u r26=r24,41,2 ;;
-       cmp.eq p6,p7=2,r26 ;;
-(p6)   mov r26=0
-(p6)   adds r25=16,r25
-(p7)   adds r26=1,r26
-       ;;
-       dep r24=r26,r24,41,2
-       ;;
-       mov cr.ipsr=r24
-       mov cr.iip=r25
-       mov pr=r31,-1 ;;
-       rfi
-       ;;
-END(hyper_eoi)
 
 ENTRY(hyper_set_itm)
        // when we get to here r20=~=interrupts pending
diff -r e7aece4a8c1d -r bc0462e17e00 xen/arch/ia64/xen/ivt.S
--- a/xen/arch/ia64/xen/ivt.S   Mon Dec 18 14:39:56 2006 +0000
+++ b/xen/arch/ia64/xen/ivt.S   Tue Dec 19 12:02:06 2006 +0000
@@ -1737,6 +1737,8 @@ ENTRY(general_exception)
 #ifdef XEN
        cmp4.ge p6,p0=0x20,r16
 (p6)   br.sptk.many dispatch_privop_fault
+       ;;
+       FAULT_OR_REFLECT(24)
 #else
        cmp4.eq p6,p0=0,r16
 (p6)   br.sptk.many dispatch_illegal_op_fault
diff -r e7aece4a8c1d -r bc0462e17e00 xen/arch/ia64/xen/vcpu.c
--- a/xen/arch/ia64/xen/vcpu.c  Mon Dec 18 14:39:56 2006 +0000
+++ b/xen/arch/ia64/xen/vcpu.c  Tue Dec 19 12:02:06 2006 +0000
@@ -2162,6 +2162,7 @@ vcpu_itc_no_srlz(VCPU * vcpu, u64 IorD, 
        BUG_ON(logps > PAGE_SHIFT);
        vcpu_tlb_track_insert_or_dirty(vcpu, vaddr, entry);
        psr = ia64_clear_ic();
+       pte &= ~(_PAGE_RV2 | _PAGE_RV1);        // Mask out the reserved bits.
        ia64_itc(IorD, vaddr, pte, ps); // FIXME: look for bigger mappings
        ia64_set_psr(psr);
        // ia64_srlz_i(); // no srls req'd, will rfi later
diff -r e7aece4a8c1d -r bc0462e17e00 xen/arch/ia64/xen/xensetup.c
--- a/xen/arch/ia64/xen/xensetup.c      Mon Dec 18 14:39:56 2006 +0000
+++ b/xen/arch/ia64/xen/xensetup.c      Tue Dec 19 12:02:06 2006 +0000
@@ -51,7 +51,7 @@ extern void xen_patch_kernel(void);
 extern void xen_patch_kernel(void);
 
 /* opt_nosmp: If true, secondary processors are ignored. */
-static int opt_nosmp = 0;
+static int opt_nosmp;
 boolean_param("nosmp", opt_nosmp);
 
 /* maxcpus: maximum number of CPUs to activate. */
@@ -65,7 +65,7 @@ integer_param("xencons", opt_xencons);
 integer_param("xencons", opt_xencons);
 
 /* Toggle to allow non-legacy xencons UARTs to run in polling mode */
-static int opt_xencons_poll = 0;
+static int opt_xencons_poll;
 boolean_param("xencons_poll", opt_xencons_poll);
 
 /*
@@ -163,7 +163,7 @@ struct ns16550_defaults ns16550_com2 = {
 };
 
 /* efi_print: print efi table at boot */
-static int opt_efi_print = 0;
+static int opt_efi_print;
 boolean_param("efi_print", opt_efi_print);
 
 /* print EFI memory map: */
diff -r e7aece4a8c1d -r bc0462e17e00 xen/common/xenoprof.c
--- a/xen/common/xenoprof.c     Mon Dec 18 14:39:56 2006 +0000
+++ b/xen/common/xenoprof.c     Tue Dec 19 12:02:06 2006 +0000
@@ -384,7 +384,7 @@ static int add_passive_list(XEN_GUEST_HA
     d->xenoprof->domain_type = XENOPROF_DOMAIN_PASSIVE;
     passive.nbuf = d->xenoprof->nbuf;
     passive.bufsize = d->xenoprof->bufsize;
-    if ( !shadow_mode_translate(d) )
+    if ( !shadow_mode_translate(current->domain) )
         passive.buf_gmaddr = __pa(d->xenoprof->rawbuf);
     else
         xenoprof_shared_gmfn_with_guest(
diff -r e7aece4a8c1d -r bc0462e17e00 
xen/include/asm-ia64/linux-xen/asm/pgtable.h
--- a/xen/include/asm-ia64/linux-xen/asm/pgtable.h      Mon Dec 18 14:39:56 
2006 +0000
+++ b/xen/include/asm-ia64/linux-xen/asm/pgtable.h      Tue Dec 19 12:02:06 
2006 +0000
@@ -39,6 +39,11 @@
 #define _PAGE_P                        (1 << _PAGE_P_BIT)      /* page present 
bit */
 #define _PAGE_MA_WB            (0x0 <<  2)     /* write back memory attribute 
*/
 #ifdef XEN
+#define _PAGE_RV1_BIT          1
+#define _PAGE_RV2_BIT          50
+#define _PAGE_RV1              (__IA64_UL(1) << _PAGE_RV1_BIT) /* reserved bit 
*/
+#define _PAGE_RV2              (__IA64_UL(3) << _PAGE_RV2_BIT) /* reserved 
bits */
+
 #define _PAGE_MA_ST            (0x1 <<  2)     /* is reserved for software use 
*/
 #endif
 #define _PAGE_MA_UC            (0x4 <<  2)     /* uncacheable memory attribute 
*/
diff -r e7aece4a8c1d -r bc0462e17e00 xen/include/xen/elfcore.h
--- a/xen/include/xen/elfcore.h Mon Dec 18 14:39:56 2006 +0000
+++ b/xen/include/xen/elfcore.h Tue Dec 19 12:02:06 2006 +0000
@@ -87,7 +87,7 @@ typedef struct
             desctype desc;                      \
             PAD32(sizeof(desctype));            \
         } desc;                                 \
-    } type
+    } __attribute__ ((packed)) type
 
 #define CORE_STR                "CORE"
 #define CORE_STR_LEN            5 /* including terminating zero */
@@ -119,7 +119,7 @@ typedef struct {
     crash_note_core_t core;
     crash_note_xen_core_t xen_regs;
     crash_note_xen_info_t xen_info;
-} crash_note_t;
+} __attribute__ ((packed)) crash_note_t;
 
 #define setup_crash_note(np, member, str, str_len, id) \
   np->member.note.note.note.namesz = str_len; \

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