Commit 902137ba authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman
Browse files

powerpc/32: Add VDSO version of getcpu on non SMP



Commit 18ad51dd ("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: default avatarChristophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/eaac4b6494ecff1811220fccc895bf282aab884a.1575273217.git.christophe.leroy@c-s.fr
parent 8c452a88
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -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

+17 −0
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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