getcpu.S 728 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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>
  10. .text
  11. .align 4
  12. .globl __kernel_getcpu
  13. .type __kernel_getcpu,@function
  14. __kernel_getcpu:
  15. .cfi_startproc
  16. ear %r1,%a4
  17. llilh %r4,0x0100
  18. sar %a4,%r4
  19. la %r4,0
  20. epsw %r0,0
  21. sacf 512
  22. l %r5,__VDSO_CPU_NR(%r4)
  23. l %r4,__VDSO_NODE_ID(%r4)
  24. tml %r0,0x4000
  25. jo 1f
  26. tml %r0,0x8000
  27. jno 0f
  28. sacf 256
  29. j 1f
  30. 0: sacf 0
  31. 1: sar %a4,%r1
  32. ltgr %r2,%r2
  33. jz 2f
  34. st %r5,0(%r2)
  35. 2: ltgr %r3,%r3
  36. jz 3f
  37. st %r4,0(%r3)
  38. 3: lghi %r2,0
  39. br %r14
  40. .cfi_endproc
  41. .size __kernel_getcpu,.-__kernel_getcpu