aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64/kernel/gate.S
diff options
context:
space:
mode:
authorDavid Mosberger-Tang <davidm@hpl.hp.com>2005-04-28 00:22:40 -0400
committerTony Luck <tony.luck@intel.com>2005-04-28 00:22:40 -0400
commit8e3e50168c8537807b7a6f78588cd72e21363262 (patch)
treea63eb89df905efd86a58940286a63c5f670b1c05 /arch/ia64/kernel/gate.S
parente7e965fa1961a8ce32cbbb1bd436c655ad03973e (diff)
[IA64] need r29=psr *after* rsm psr.i
Yanmin Zhang pointed out a sequence problem when saving the psr. David Mosberger provided this patch (which gave up a cycle). Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'arch/ia64/kernel/gate.S')
-rw-r--r--arch/ia64/kernel/gate.S11
1 files changed, 5 insertions, 6 deletions
diff --git a/arch/ia64/kernel/gate.S b/arch/ia64/kernel/gate.S
index 272e64c0e21b..86948ce63e43 100644
--- a/arch/ia64/kernel/gate.S
+++ b/arch/ia64/kernel/gate.S
@@ -77,7 +77,7 @@ GLOBAL_ENTRY(__kernel_syscall_via_epc)
77 epc // B causes split-issue 77 epc // B causes split-issue
78} 78}
79 ;; 79 ;;
80 rsm psr.be // M2 (5 cyc to srlz.d) 80 rsm psr.be | psr.i // M2 (5 cyc to srlz.d)
81 LOAD_FSYSCALL_TABLE(r14) // X 81 LOAD_FSYSCALL_TABLE(r14) // X
82 ;; 82 ;;
83 mov r16=IA64_KR(CURRENT) // M2 (12 cyc) 83 mov r16=IA64_KR(CURRENT) // M2 (12 cyc)
@@ -98,15 +98,14 @@ GLOBAL_ENTRY(__kernel_syscall_via_epc)
98 nop.i 0 98 nop.i 0
99 ;; 99 ;;
100 nop.m 0 100 nop.m 0
101(p6) mov b7=r18 // I0
102(p6) tbit.z.unc p8,p0=r18,0 // I0 (dual-issues with "mov b7=r18"!) 101(p6) tbit.z.unc p8,p0=r18,0 // I0 (dual-issues with "mov b7=r18"!)
103
104 nop.m 0
105 nop.i 0 102 nop.i 0
103 ;;
104(p8) ssm psr.i
105(p6) mov b7=r18 // I0
106(p8) br.dptk.many b7 // B 106(p8) br.dptk.many b7 // B
107 107
108 mov r27=ar.rsc // M2 (12 cyc) 108 mov r27=ar.rsc // M2 (12 cyc)
109(p6) rsm psr.i // M2
110/* 109/*
111 * brl.cond doesn't work as intended because the linker would convert this branch 110 * brl.cond doesn't work as intended because the linker would convert this branch
112 * into a branch to a PLT. Perhaps there will be a way to avoid this with some 111 * into a branch to a PLT. Perhaps there will be a way to avoid this with some
@@ -123,7 +122,7 @@ GLOBAL_ENTRY(__kernel_syscall_via_epc)
123#else 122#else
124 BRL_COND_FSYS_BUBBLE_DOWN(p6) 123 BRL_COND_FSYS_BUBBLE_DOWN(p6)
125#endif 124#endif
126 125 ssm psr.i
127 mov r10=-1 126 mov r10=-1
128(p10) mov r8=EINVAL 127(p10) mov r8=EINVAL
129(p9) mov r8=ENOSYS 128(p9) mov r8=ENOSYS