# HG changeset patch
# User awilliam@xxxxxxxxxxxx
# Date 1168974063 25200
# Node ID 43115ffc6635fe2526c1c5ccc98b93bfd80495b6
# Parent 7a2c224a9252bb9ca6ada21cf372f22f37ad98fe
[IA64] Paravirtualize syscall path in file fsys.S
Signed-off-by: Anthony Xu <anthony.xu@xxxxxxxxx>
---
linux-2.6-xen-sparse/arch/ia64/kernel/fsys.S | 41 +++++++++++++++++++++++++++
1 files changed, 41 insertions(+)
diff -r 7a2c224a9252 -r 43115ffc6635
linux-2.6-xen-sparse/arch/ia64/kernel/fsys.S
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/fsys.S Tue Jan 16 11:51:45
2007 -0700
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/fsys.S Tue Jan 16 12:01:03
2007 -0700
@@ -516,11 +516,34 @@ ENTRY(fsys_fallback_syscall)
adds r17=-1024,r15
movl r14=sys_call_table
;;
+#ifdef CONFIG_XEN
+ movl r18=running_on_xen;;
+ ld4 r18=[r18];;
+ // p14 = running_on_xen
+ // p15 = !running_on_xen
+ cmp.ne p14,p15=r0,r18
+ ;;
+(p14) movl r18=XSI_PSR_I_ADDR;;
+(p14) ld8 r18=[r18]
+(p14) mov r29=1;;
+(p14) st1 [r18]=r29
+(p15) rsm psr.i
+#else
rsm psr.i
+#endif
shladd r18=r17,3,r14
;;
ld8 r18=[r18] // load normal (heavy-weight)
syscall entry-point
+#ifdef CONFIG_XEN
+(p14) mov r27=r8
+(p14) XEN_HYPER_GET_PSR
+ ;;
+(p14) mov r29=r8
+(p14) mov r8=r27
+(p15) mov r29=psr // read psr (12 cyc load
latency)
+#else
mov r29=psr // read psr (12 cyc load
latency)
+#endif
mov r27=ar.rsc
mov r21=ar.fpsr
mov r26=ar.pfs
@@ -632,7 +655,25 @@ GLOBAL_ENTRY(fsys_bubble_down)
mov rp=r14 // I0 set the real return addr
and r3=_TIF_SYSCALL_TRACEAUDIT,r3 // A
;;
+#ifdef CONFIG_XEN
+ movl r14=running_on_xen;;
+ ld4 r14=[r14];;
+ // p14 = running_on_xen
+ // p15 = !running_on_xen
+ cmp.ne p14,p15=r0,r14
+ ;;
+(p14) movl r28=XSI_PSR_I_ADDR;;
+(p14) ld8 r28=[r28];;
+(p14) adds r28=-1,r28;; // event_pending
+(p14) ld1 r14=[r28];;
+(p14) cmp.ne.unc p13,p14=r14,r0;;
+(p13) XEN_HYPER_SSM_I
+(p14) adds r28=1,r28;; // event_mask
+(p14) st1 [r28]=r0;;
+(p15) ssm psr.i
+#else
ssm psr.i // M2 we're on kernel stacks
now, reenable irqs
+#endif
cmp.eq p8,p0=r3,r0 // A
(p10) br.cond.spnt.many ia64_ret_from_syscall // B return if bad
call-frame or r15 is a NaT
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|