diff options
author | Anton Blanchard <anton@samba.org> | 2012-07-04 16:37:11 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2012-07-11 00:18:40 -0400 |
commit | 18ad51dd342a7eb09dbcd059d0b451b616d4dafc (patch) | |
tree | 94809605669eb3b5e4e049501958a2fa93ae2de7 /arch/powerpc/kvm | |
parent | e6a74c6ea331b79c86e1898c504790b3dadc591d (diff) |
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>
Diffstat (limited to 'arch/powerpc/kvm')
-rw-r--r-- | arch/powerpc/kvm/book3s_hv_rmhandlers.S | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S index e764e2361d47..5a84c8d3d040 100644 --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S | |||
@@ -1064,6 +1064,10 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206) | |||
1064 | mtspr SPRN_DABR,r5 | 1064 | mtspr SPRN_DABR,r5 |
1065 | mtspr SPRN_DABRX,r6 | 1065 | mtspr SPRN_DABRX,r6 |
1066 | 1066 | ||
1067 | /* Restore SPRG3 */ | ||
1068 | ld r3,HSTATE_SPRG3(r13) | ||
1069 | mtspr SPRN_SPRG3,r3 | ||
1070 | |||
1067 | /* | 1071 | /* |
1068 | * Reload DEC. HDEC interrupts were disabled when | 1072 | * Reload DEC. HDEC interrupts were disabled when |
1069 | * we reloaded the host's LPCR value. | 1073 | * we reloaded the host's LPCR value. |