powerpc/32: Add VDSO version of getcpu on non SMP
Commit 18ad51dd34
("powerpc: Add VDSO version of getcpu") added
getcpu() for PPC64 only, by making use of a user readable general
purpose SPR.
PPC32 doesn't have any such SPR.
For non SMP, just return CPU id 0 from the VDSO directly.
PPC32 doesn't support CONFIG_NUMA so NUMA node is always 0.
Before the patch, vdsotest reported:
getcpu: syscall: 1572 nsec/call
getcpu: libc: 1787 nsec/call
getcpu: vdso: not tested
Now, vdsotest reports:
getcpu: syscall: 1582 nsec/call
getcpu: libc: 502 nsec/call
getcpu: vdso: 187 nsec/call
Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/eaac4b6494ecff1811220fccc895bf282aab884a.1575273217.git.christophe.leroy@c-s.fr
This commit is contained in:
parent
8c452a8898
commit
902137ba8e
|
@ -2,9 +2,7 @@
|
|||
|
||||
# List of files in the vdso, has to be asm only for now
|
||||
|
||||
obj-vdso32-$(CONFIG_PPC64) = getcpu.o
|
||||
obj-vdso32 = sigtramp.o gettimeofday.o datapage.o cacheflush.o note.o \
|
||||
$(obj-vdso32-y)
|
||||
obj-vdso32 = sigtramp.o gettimeofday.o datapage.o cacheflush.o note.o getcpu.o
|
||||
|
||||
# Build rules
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
* int __kernel_getcpu(unsigned *cpu, unsigned *node);
|
||||
*
|
||||
*/
|
||||
#if defined(CONFIG_PPC64)
|
||||
V_FUNCTION_BEGIN(__kernel_getcpu)
|
||||
.cfi_startproc
|
||||
mfspr r5,SPRN_SPRG_VDSO_READ
|
||||
|
@ -31,3 +32,19 @@ V_FUNCTION_BEGIN(__kernel_getcpu)
|
|||
blr
|
||||
.cfi_endproc
|
||||
V_FUNCTION_END(__kernel_getcpu)
|
||||
#elif !defined(CONFIG_SMP)
|
||||
V_FUNCTION_BEGIN(__kernel_getcpu)
|
||||
.cfi_startproc
|
||||
cmpwi cr0, r3, 0
|
||||
cmpwi cr1, r4, 0
|
||||
li r5, 0
|
||||
beq cr0, 1f
|
||||
stw r5, 0(r3)
|
||||
1: li r3, 0 /* always success */
|
||||
crclr cr0*4+so
|
||||
beqlr cr1
|
||||
stw r5, 0(r4)
|
||||
blr
|
||||
.cfi_endproc
|
||||
V_FUNCTION_END(__kernel_getcpu)
|
||||
#endif
|
||||
|
|
|
@ -155,7 +155,7 @@ VERSION
|
|||
__kernel_sync_dicache_p5;
|
||||
__kernel_sigtramp32;
|
||||
__kernel_sigtramp_rt32;
|
||||
#ifdef CONFIG_PPC64
|
||||
#if defined(CONFIG_PPC64) || !defined(CONFIG_SMP)
|
||||
__kernel_getcpu;
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in New Issue