-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
s390/vdso: optimize getcpu system call
Add the CPU number to the per-cpu vdso data page and add the __kernel_getcpu function to the vdso object to retrieve the CPU number in user space. Suggested-by: Heiko Carstens <heiko.carstens@de.ibm.com> Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
- Loading branch information
Martin Schwidefsky
committed
Jan 11, 2016
1 parent
0dab3e0
commit 249c543
Showing
9 changed files
with
101 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
/* | ||
* Userland implementation of getcpu() for 32 bits processes in a | ||
* s390 kernel for use in the vDSO | ||
* | ||
* Copyright IBM Corp. 2016 | ||
* Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com> | ||
*/ | ||
#include <asm/vdso.h> | ||
#include <asm/asm-offsets.h> | ||
|
||
.text | ||
.align 4 | ||
.globl __kernel_getcpu | ||
.type __kernel_getcpu,@function | ||
__kernel_getcpu: | ||
.cfi_startproc | ||
ear %r1,%a4 | ||
lhi %r4,1 | ||
sll %r4,24 | ||
sar %a4,%r4 | ||
la %r4,0 | ||
epsw %r0,0 | ||
sacf 512 | ||
l %r5,__VDSO_CPU_NR(%r4) | ||
l %r4,__VDSO_NODE_ID(%r4) | ||
tml %r0,0x4000 | ||
jo 1f | ||
tml %r0,0x8000 | ||
jno 0f | ||
sacf 256 | ||
j 1f | ||
0: sacf 0 | ||
1: sar %a4,%r1 | ||
ltr %r2,%r2 | ||
jz 2f | ||
st %r5,0(%r2) | ||
2: ltr %r3,%r3 | ||
jz 3f | ||
st %r4,0(%r3) | ||
3: lhi %r2,0 | ||
br %r14 | ||
.cfi_endproc | ||
.size __kernel_getcpu,.-__kernel_getcpu |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
/* | ||
* Userland implementation of getcpu() for 64 bits processes in a | ||
* s390 kernel for use in the vDSO | ||
* | ||
* Copyright IBM Corp. 2016 | ||
* Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com> | ||
*/ | ||
#include <asm/vdso.h> | ||
#include <asm/asm-offsets.h> | ||
|
||
.text | ||
.align 4 | ||
.globl __kernel_getcpu | ||
.type __kernel_getcpu,@function | ||
__kernel_getcpu: | ||
.cfi_startproc | ||
ear %r1,%a4 | ||
llilh %r4,0x0100 | ||
sar %a4,%r4 | ||
la %r4,0 | ||
epsw %r0,0 | ||
sacf 512 | ||
l %r5,__VDSO_CPU_NR(%r4) | ||
l %r4,__VDSO_NODE_ID(%r4) | ||
tml %r0,0x4000 | ||
jo 1f | ||
tml %r0,0x8000 | ||
jno 0f | ||
sacf 256 | ||
j 1f | ||
0: sacf 0 | ||
1: sar %a4,%r1 | ||
ltgr %r2,%r2 | ||
jz 2f | ||
st %r5,0(%r2) | ||
2: ltgr %r3,%r3 | ||
jz 3f | ||
st %r4,0(%r3) | ||
3: lghi %r2,0 | ||
br %r14 | ||
.cfi_endproc | ||
.size __kernel_getcpu,.-__kernel_getcpu |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters