diff options
author | Marcelo Tosatti <mtosatti@redhat.com> | 2012-11-27 20:28:57 -0500 |
---|---|---|
committer | Marcelo Tosatti <mtosatti@redhat.com> | 2012-11-27 20:29:11 -0500 |
commit | 51c19b4f5927f5a646e93d69f73c7e89ea14e737 (patch) | |
tree | a48486f72dc433fd516684d4441022650429d333 /arch/x86/vdso/vgetcpu.c | |
parent | 3dc4f7cfb7441e5e0fed3a02fc81cdaabd28300a (diff) |
x86: vdso: pvclock gettime support
Improve performance of time system calls when using Linux pvclock,
by reading time info from fixmap visible copy of pvclock data.
Originally from Jeremy Fitzhardinge.
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'arch/x86/vdso/vgetcpu.c')
-rw-r--r-- | arch/x86/vdso/vgetcpu.c | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/arch/x86/vdso/vgetcpu.c b/arch/x86/vdso/vgetcpu.c index 5463ad558573..2f94b039e55b 100644 --- a/arch/x86/vdso/vgetcpu.c +++ b/arch/x86/vdso/vgetcpu.c | |||
@@ -17,15 +17,10 @@ __vdso_getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *unused) | |||
17 | { | 17 | { |
18 | unsigned int p; | 18 | unsigned int p; |
19 | 19 | ||
20 | if (VVAR(vgetcpu_mode) == VGETCPU_RDTSCP) { | 20 | p = __getcpu(); |
21 | /* Load per CPU data from RDTSCP */ | 21 | |
22 | native_read_tscp(&p); | ||
23 | } else { | ||
24 | /* Load per CPU data from GDT */ | ||
25 | asm("lsl %1,%0" : "=r" (p) : "r" (__PER_CPU_SEG)); | ||
26 | } | ||
27 | if (cpu) | 22 | if (cpu) |
28 | *cpu = p & 0xfff; | 23 | *cpu = p & VGETCPU_CPU_MASK; |
29 | if (node) | 24 | if (node) |
30 | *node = p >> 12; | 25 | *node = p >> 12; |
31 | return 0; | 26 | return 0; |