| /* |
| * 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> |
| |
| notrace long |
| __vdso_getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *unused) |
| { |
| unsigned int p; |
| |
| p = __getcpu(); |
| |
| if (cpu) |
| *cpu = p & VGETCPU_CPU_MASK; |
| if (node) |
| *node = p >> 12; |
| return 0; |
| } |
| |
| long getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *tcache) |
| __attribute__((weak, alias("__vdso_getcpu"))); |