powerpc: Add VDSO version of getcpu
We have a request for a fast method of getting CPU and NUMA node IDs from userspace. This patch implements a getcpu VDSO function, similar to x86. Ben suggested we use SPRG3 which is userspace readable. SPRG3 can be modified by a KVM guest, so we save the SPRG3 value in the paca and restore it when transitioning from the guest to the host. I have a glibc patch that implements sched_getcpu on top of this. Testing on a POWER7: baseline: 538 cycles vdso: 30 cycles Signed-off-by:Anton Blanchard <anton@samba.org> Signed-off-by:
Benjamin Herrenschmidt <benh@kernel.crashing.org>
Showing
- arch/powerpc/include/asm/kvm_book3s_asm.h 1 addition, 0 deletionsarch/powerpc/include/asm/kvm_book3s_asm.h
- arch/powerpc/include/asm/reg.h 3 additions, 2 deletionsarch/powerpc/include/asm/reg.h
- arch/powerpc/include/asm/vdso.h 2 additions, 0 deletionsarch/powerpc/include/asm/vdso.h
- arch/powerpc/kernel/asm-offsets.c 1 addition, 0 deletionsarch/powerpc/kernel/asm-offsets.c
- arch/powerpc/kernel/smp.c 3 additions, 0 deletionsarch/powerpc/kernel/smp.c
- arch/powerpc/kernel/vdso.c 28 additions, 0 deletionsarch/powerpc/kernel/vdso.c
- arch/powerpc/kernel/vdso32/Makefile 3 additions, 1 deletionarch/powerpc/kernel/vdso32/Makefile
- arch/powerpc/kernel/vdso32/getcpu.S 45 additions, 0 deletionsarch/powerpc/kernel/vdso32/getcpu.S
- arch/powerpc/kernel/vdso32/vdso32.lds.S 3 additions, 0 deletionsarch/powerpc/kernel/vdso32/vdso32.lds.S
- arch/powerpc/kernel/vdso64/Makefile 1 addition, 1 deletionarch/powerpc/kernel/vdso64/Makefile
- arch/powerpc/kernel/vdso64/getcpu.S 45 additions, 0 deletionsarch/powerpc/kernel/vdso64/getcpu.S
- arch/powerpc/kernel/vdso64/vdso64.lds.S 1 addition, 0 deletionsarch/powerpc/kernel/vdso64/vdso64.lds.S
- arch/powerpc/kvm/book3s_hv_rmhandlers.S 4 additions, 0 deletionsarch/powerpc/kvm/book3s_hv_rmhandlers.S
Please register or sign in to comment