Linux 4.11-rc5
[linux/fpc-iii.git] / arch / s390 / kernel / vdso64 / getcpu.S
blob4cbe98291931402766f3fe3ff49e3d0bbee82eb9
1 /*
2  * Userland implementation of getcpu() for 64 bits processes in a
3  * s390 kernel for use in the vDSO
4  *
5  *  Copyright IBM Corp. 2016
6  *  Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>
7  */
8 #include <asm/vdso.h>
9 #include <asm/asm-offsets.h>
11         .text
12         .align 4
13         .globl __kernel_getcpu
14         .type  __kernel_getcpu,@function
15 __kernel_getcpu:
16         .cfi_startproc
17         ear     %r1,%a4
18         llilh   %r4,0x0100
19         sar     %a4,%r4
20         la      %r4,0
21         epsw    %r0,0
22         sacf    512
23         l       %r5,__VDSO_CPU_NR(%r4)
24         l       %r4,__VDSO_NODE_ID(%r4)
25         tml     %r0,0x4000
26         jo      1f
27         tml     %r0,0x8000
28         jno     0f
29         sacf    256
30         j       1f
31 0:      sacf    0
32 1:      sar     %a4,%r1
33         ltgr    %r2,%r2
34         jz      2f
35         st      %r5,0(%r2)
36 2:      ltgr    %r3,%r3
37         jz      3f
38         st      %r4,0(%r3)
39 3:      lghi    %r2,0
40         br      %r14
41         .cfi_endproc
42         .size   __kernel_getcpu,.-__kernel_getcpu