aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Williamson <alex.williamson@hp.com>2007-12-30 12:56:16 -0700
committerAlex Williamson <alex.williamson@hp.com>2007-12-30 12:56:16 -0700
commit3be10ebb0105449915b29d3fa393cc5b07b1b7ca (patch)
tree75fa241ea38b785c9d70c59b4f374dd429f05696
parentcb01185e0e63ae1191771b13fba9cdffe8b9afd0 (diff)
downloadxen-3be10ebb0105449915b29d3fa393cc5b07b1b7ca.tar.gz
xen-3be10ebb0105449915b29d3fa393cc5b07b1b7ca.tar.bz2
xen-3be10ebb0105449915b29d3fa393cc5b07b1b7ca.zip
[IA64] Fix PV break fault handler.
PV domain break fault handler calls C routine reflect_event() with psr.ic = 0. It might cause unrecoverable tlb miss. set psr.ic=1 before calling it. Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
-rw-r--r--xen/arch/ia64/xen/ivt.S7
1 files changed, 6 insertions, 1 deletions
diff --git a/xen/arch/ia64/xen/ivt.S b/xen/arch/ia64/xen/ivt.S
index f0f8c5f62c..b9eb05e50c 100644
--- a/xen/arch/ia64/xen/ivt.S
+++ b/xen/arch/ia64/xen/ivt.S
@@ -714,15 +714,20 @@ fast_hypercall:
adds r2=PT(CR_IFS)+16,r12
;;
st8 [r2]=r20
- ;;
+ ssm psr.ic | PSR_DEFAULT_BITS
+ ;;
+ srlz.i
+ ;;
br.call.sptk.many b0=reflect_event
;;
+ rsm psr.i|psr.ic
adds r2=PT(R14)+16,r12
adds r3=PT(R8)+16,r12
;;
//r16 contains ar.bsp before cover
ld8 r16=[r2]
ld8 r8=[r3]
+ srlz.i
;;
br.sptk.many ia64_ret_from_syscall
;;