[PATCH] Add the vgetcpu vsyscall
This patch adds a vgetcpu vsyscall, which depending on the CPU RDTSCP capability uses either the RDTSCP or CPUID to obtain a CPU and node numbers and pass them to the program. AK: Lots of changes over Vojtech's original code: Better prototype for vgetcpu() It's better to pass the cpu / node numbers as separate arguments to avoid mistakes when going from SMP to NUMA. Also add a fast time stamp based cache using a user supplied argument to speed things more up. Use fast method from Chuck Ebbert to retrieve node/cpu from GDT limit instead of CPUID Made sure RDTSCP init is always executed after node is known. Drop printk Signed-off-by: Vojtech Pavlik <vojtech@suse.cz> Signed-off-by: Andi Kleen <ak@suse.de>
This commit is contained in:

committed by
Andi Kleen

parent
a670fad0ad
commit
c08c820508
16
include/linux/getcpu.h
Normal file
16
include/linux/getcpu.h
Normal file
@@ -0,0 +1,16 @@
|
||||
#ifndef _LINUX_GETCPU_H
|
||||
#define _LINUX_GETCPU_H 1
|
||||
|
||||
/* Cache for getcpu() to speed it up. Results might be upto a jiffie
|
||||
out of date, but will be faster.
|
||||
User programs should not refer to the contents of this structure.
|
||||
It is only a cache for vgetcpu(). It might change in future kernels.
|
||||
The user program must store this information per thread (__thread)
|
||||
If you want 100% accurate information pass NULL instead. */
|
||||
struct getcpu_cache {
|
||||
unsigned long t0;
|
||||
unsigned long t1;
|
||||
unsigned long res[4];
|
||||
};
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user