Blame view
arch/x86/vdso/vgetcpu.c
804 Bytes
2aae950b2 x86_64: Add vDSO ... |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/* * Copyright 2006 Andi Kleen, SUSE Labs. * Subject to the GNU Public License, v.2 * * Fast user context implementation of getcpu() */ #include <linux/kernel.h> #include <linux/getcpu.h> #include <linux/jiffies.h> #include <linux/time.h> #include <asm/vsyscall.h> #include <asm/vgtod.h> |
2aae950b2 x86_64: Add vDSO ... |
14 |
|
23adec554 x86: add notrace ... |
15 16 |
notrace long __vdso_getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *unused) |
2aae950b2 x86_64: Add vDSO ... |
17 |
{ |
8f12dea61 x86: introduce na... |
18 |
unsigned int p; |
2aae950b2 x86_64: Add vDSO ... |
19 |
|
8c49d9a74 x86-64: Clean up ... |
20 |
if (VVAR(vgetcpu_mode) == VGETCPU_RDTSCP) { |
2aae950b2 x86_64: Add vDSO ... |
21 |
/* Load per CPU data from RDTSCP */ |
8f12dea61 x86: introduce na... |
22 |
native_read_tscp(&p); |
2aae950b2 x86_64: Add vDSO ... |
23 24 25 26 |
} else { /* Load per CPU data from GDT */ asm("lsl %1,%0" : "=r" (p) : "r" (__PER_CPU_SEG)); } |
2aae950b2 x86_64: Add vDSO ... |
27 28 29 30 31 32 33 34 35 |
if (cpu) *cpu = p & 0xfff; if (node) *node = p >> 12; return 0; } long getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *tcache) __attribute__((weak, alias("__vdso_getcpu"))); |