# HG changeset patch
# User awilliam@xxxxxxxxxxxx
# Date 1167952462 25200
# Node ID d9cc772c6bde7c3eb13360ddd91a82dc432d8c20
# Parent eb40e07b867f9708a9c39225ce1591e19808852a
[IA64] Enable fast hyperprivop for ssm.i and rfi
Signed-off-by: Anthony Xu <anthony.xu@xxxxxxxxx>
---
xen/arch/ia64/asm-offsets.c | 1 +
xen/arch/ia64/xen/hyperprivop.S | 22 ++++++++++------------
2 files changed, 11 insertions(+), 12 deletions(-)
diff -r eb40e07b867f -r d9cc772c6bde xen/arch/ia64/asm-offsets.c
--- a/xen/arch/ia64/asm-offsets.c Thu Jan 04 16:10:25 2007 -0700
+++ b/xen/arch/ia64/asm-offsets.c Thu Jan 04 16:14:22 2007 -0700
@@ -60,6 +60,7 @@ void foo(void)
DEFINE(IA64_VCPU_META_SAVED_RR0_OFFSET, offsetof (struct vcpu,
arch.metaphysical_saved_rr0));
DEFINE(IA64_VCPU_BREAKIMM_OFFSET, offsetof (struct vcpu,
arch.breakimm));
DEFINE(IA64_VCPU_IVA_OFFSET, offsetof (struct vcpu, arch.iva));
+ DEFINE(IA64_VCPU_EVENT_CALLBACK_IP_OFFSET, offsetof (struct vcpu,
arch.event_callback_ip));
DEFINE(IA64_VCPU_IRR0_OFFSET, offsetof (struct vcpu, arch.irr[0]));
DEFINE(IA64_VCPU_IRR3_OFFSET, offsetof (struct vcpu, arch.irr[3]));
DEFINE(IA64_VCPU_INSVC3_OFFSET, offsetof (struct vcpu, arch.insvc[3]));
diff -r eb40e07b867f -r d9cc772c6bde xen/arch/ia64/xen/hyperprivop.S
--- a/xen/arch/ia64/xen/hyperprivop.S Thu Jan 04 16:10:25 2007 -0700
+++ b/xen/arch/ia64/xen/hyperprivop.S Thu Jan 04 16:14:22 2007 -0700
@@ -37,10 +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_RFI
// TODO: Since we use callback to deliver interrupt,
// FAST_SSM_I needs to be rewritten.
-//# define FAST_SSM_I
+# define FAST_SSM_I
# define FAST_PTC_GA
# undef RFI_TO_INTERRUPT // not working yet
#endif
@@ -282,13 +282,11 @@ ENTRY(hyper_ssm_i)
adds r21=XSI_PRECOVER_IFS_OFS-XSI_PSR_IC_OFS,r18 ;;
st8 [r21]=r20 ;;
// leave cr.ifs alone for later rfi
- // set iip to go to domain IVA break instruction vector
+ // set iip to go to event callback handler
movl r22=THIS_CPU(cpu_kr)+IA64_KR_CURRENT_OFFSET;;
ld8 r22=[r22];;
- adds r22=IA64_VCPU_IVA_OFFSET,r22;;
- ld8 r23=[r22];;
- movl r24=0x3000;;
- add r24=r24,r23;;
+ adds r22=IA64_VCPU_EVENT_CALLBACK_IP_OFFSET,r22;;
+ ld8 r24=[r22];;
mov cr.iip=r24;;
// OK, now all set to go except for switch to virtual bank0
mov r30=r2
@@ -1027,8 +1025,12 @@ ENTRY(hyper_rfi)
adds r20=XSI_IPSR_OFS-XSI_PSR_IC_OFS,r18 ;;
ld8 r21=[r20];; // r21 = vcr.ipsr
extr.u r22=r21,IA64_PSR_I_BIT,1 ;;
- mov r30=r22
+ mov r30=r22;;
// r30 determines whether we might deliver an immediate extint
+#ifndef RFI_TO_INTERRUPT // see beginning of file
+ cmp.ne p6,p0=r30,r0
+(p6) br.cond.spnt.few dispatch_break_fault ;;
+#endif
1:
adds r20=XSI_IPSR_OFS-XSI_PSR_IC_OFS,r18 ;;
ld8 r21=[r20];; // r21 = vcr.ipsr
@@ -1063,10 +1065,6 @@ 1:
cmp.ltu p0,p7=r22,r23 ;; // if !(iip<low) &&
(p7) cmp.geu p0,p7=r22,r24 ;; // !(iip>=high)
(p7) br.spnt.few dispatch_break_fault ;;
-#ifndef RFI_TO_INTERRUPT // see beginning of file
- cmp.ne p6,p0=r30,r0
-(p6) br.cond.spnt.few dispatch_break_fault ;;
-#endif
1: // OK now, let's do an rfi.
#ifdef FAST_HYPERPRIVOP_CNT
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|