getcpu.S 933 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /*
  3. *
  4. * Copyright (C) IBM Corporation, 2012
  5. *
  6. * Author: Anton Blanchard <[email protected]>
  7. */
  8. #include <asm/ppc_asm.h>
  9. #include <asm/vdso.h>
  10. .text
  11. /*
  12. * Exact prototype of getcpu
  13. *
  14. * int __kernel_getcpu(unsigned *cpu, unsigned *node);
  15. *
  16. */
  17. #if defined(CONFIG_PPC64)
  18. V_FUNCTION_BEGIN(__kernel_getcpu)
  19. .cfi_startproc
  20. mfspr r5,SPRN_SPRG_VDSO_READ
  21. PPC_LCMPI cr0,r3,0
  22. PPC_LCMPI cr1,r4,0
  23. clrlwi r6,r5,16
  24. rlwinm r7,r5,16,31-15,31-0
  25. beq cr0,1f
  26. stw r6,0(r3)
  27. 1: crclr cr0*4+so
  28. li r3,0 /* always success */
  29. beqlr cr1
  30. stw r7,0(r4)
  31. blr
  32. .cfi_endproc
  33. V_FUNCTION_END(__kernel_getcpu)
  34. #elif !defined(CONFIG_SMP)
  35. V_FUNCTION_BEGIN(__kernel_getcpu)
  36. .cfi_startproc
  37. cmpwi cr0, r3, 0
  38. cmpwi cr1, r4, 0
  39. li r5, 0
  40. beq cr0, 1f
  41. stw r5, 0(r3)
  42. 1: li r3, 0 /* always success */
  43. crclr cr0*4+so
  44. beqlr cr1
  45. stw r5, 0(r4)
  46. blr
  47. .cfi_endproc
  48. V_FUNCTION_END(__kernel_getcpu)
  49. #endif