diff options
author | David Mosberger-Tang <davidm@hpl.hp.com> | 2005-04-28 00:17:03 -0400 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2005-04-28 00:17:03 -0400 |
commit | 060561ff79b01eea58e6d72abfb8e7580ff21f2a (patch) | |
tree | 7c3f95456480d3c6b44842df5a7619be98f2e14d /arch/ia64/kernel/ivt.S | |
parent | 96e017495e6833adcbad84783e3c5eb685836bbf (diff) |
[IA64] In syscall-entry, use st8 instead of stf8 to clear pt_regs.r8
Using stf8 seemed like a clever idea at the time, but stf8 forces
the cache-line to be invalidated in the L1D (if it happens to be
there already). This patch eliminates a guaranteed L1D cache-miss
and, by itself, is good for a 1-2 cycle improvement for heavy-weight
syscalls.
Signed-off-by: David Mosberger-Tang <davidm@hpl.hp.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'arch/ia64/kernel/ivt.S')
-rw-r--r-- | arch/ia64/kernel/ivt.S | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/arch/ia64/kernel/ivt.S b/arch/ia64/kernel/ivt.S index d9c05d53435b..dc78c356ddd0 100644 --- a/arch/ia64/kernel/ivt.S +++ b/arch/ia64/kernel/ivt.S | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * arch/ia64/kernel/ivt.S | 2 | * arch/ia64/kernel/ivt.S |
3 | * | 3 | * |
4 | * Copyright (C) 1998-2001, 2003 Hewlett-Packard Co | 4 | * Copyright (C) 1998-2001, 2003, 2005 Hewlett-Packard Co |
5 | * Stephane Eranian <eranian@hpl.hp.com> | 5 | * Stephane Eranian <eranian@hpl.hp.com> |
6 | * David Mosberger <davidm@hpl.hp.com> | 6 | * David Mosberger <davidm@hpl.hp.com> |
7 | * Copyright (C) 2000, 2002-2003 Intel Co | 7 | * Copyright (C) 2000, 2002-2003 Intel Co |
@@ -918,7 +918,7 @@ GLOBAL_ENTRY(ia64_syscall_setup) | |||
918 | tnat.nz p14,p0=in6 | 918 | tnat.nz p14,p0=in6 |
919 | cmp.lt p10,p9=r11,r8 // frame size can't be more than local+8 | 919 | cmp.lt p10,p9=r11,r8 // frame size can't be more than local+8 |
920 | ;; | 920 | ;; |
921 | stf8 [r16]=f1 // ensure pt_regs.r8 != 0 (see handle_syscall_error) | 921 | mov r8=1 |
922 | (p9) tnat.nz p10,p0=r15 | 922 | (p9) tnat.nz p10,p0=r15 |
923 | adds r12=-16,r1 // switch to kernel memory stack (with 16 bytes of scratch) | 923 | adds r12=-16,r1 // switch to kernel memory stack (with 16 bytes of scratch) |
924 | 924 | ||
@@ -929,9 +929,9 @@ GLOBAL_ENTRY(ia64_syscall_setup) | |||
929 | mov r13=r2 // establish `current' | 929 | mov r13=r2 // establish `current' |
930 | movl r1=__gp // establish kernel global pointer | 930 | movl r1=__gp // establish kernel global pointer |
931 | ;; | 931 | ;; |
932 | st8 [r16]=r8 // ensure pt_regs.r8 != 0 (see handle_syscall_error) | ||
932 | (p14) mov in6=-1 | 933 | (p14) mov in6=-1 |
933 | (p8) mov in7=-1 | 934 | (p8) mov in7=-1 |
934 | nop.i 0 | ||
935 | 935 | ||
936 | cmp.eq pSys,pNonSys=r0,r0 // set pSys=1, pNonSys=0 | 936 | cmp.eq pSys,pNonSys=r0,r0 // set pSys=1, pNonSys=0 |
937 | movl r17=FPSR_DEFAULT | 937 | movl r17=FPSR_DEFAULT |