# 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
|