0001
0002
0003
0004
0005
0006
0007
0008 #include <asm/ppc_asm.h>
0009 #include <asm/vdso.h>
0010
0011 .text
0012
0013
0014
0015
0016
0017
0018 #if defined(CONFIG_PPC64)
0019 V_FUNCTION_BEGIN(__kernel_getcpu)
0020 .cfi_startproc
0021 mfspr r5,SPRN_SPRG_VDSO_READ
0022 PPC_LCMPI cr0,r3,0
0023 PPC_LCMPI cr1,r4,0
0024 clrlwi r6,r5,16
0025 rlwinm r7,r5,16,31-15,31-0
0026 beq cr0,1f
0027 stw r6,0(r3)
0028 1: crclr cr0*4+so
0029 li r3,0
0030 beqlr cr1
0031 stw r7,0(r4)
0032 blr
0033 .cfi_endproc
0034 V_FUNCTION_END(__kernel_getcpu)
0035 #elif !defined(CONFIG_SMP)
0036 V_FUNCTION_BEGIN(__kernel_getcpu)
0037 .cfi_startproc
0038 cmpwi cr0, r3, 0
0039 cmpwi cr1, r4, 0
0040 li r5, 0
0041 beq cr0, 1f
0042 stw r5, 0(r3)
0043 1: li r3, 0
0044 crclr cr0*4+so
0045 beqlr cr1
0046 stw r5, 0(r4)
0047 blr
0048 .cfi_endproc
0049 V_FUNCTION_END(__kernel_getcpu)
0050 #endif