1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- #ifndef _ASM_X86_VSYSCALL_H
- #define _ASM_X86_VSYSCALL_H
- #include <linux/seqlock.h>
- #include <uapi/asm/vsyscall.h>
- #define VGETCPU_RDTSCP 1
- #define VGETCPU_LSL 2
- /* kernel space (writeable) */
- extern int vgetcpu_mode;
- extern struct timezone sys_tz;
- #include <asm/vvar.h>
- extern void map_vsyscall(void);
- /*
- * Called on instruction fetch fault in vsyscall page.
- * Returns true if handled.
- */
- extern bool emulate_vsyscall(struct pt_regs *regs, unsigned long address);
- #ifdef CONFIG_X86_64
- #define VGETCPU_CPU_MASK 0xfff
- static inline unsigned int __getcpu(void)
- {
- unsigned int p;
- if (VVAR(vgetcpu_mode) == VGETCPU_RDTSCP) {
- /* Load per CPU data from RDTSCP */
- native_read_tscp(&p);
- } else {
- /* Load per CPU data from GDT */
- asm("lsl %1,%0" : "=r" (p) : "r" (__PER_CPU_SEG));
- }
- return p;
- }
- #endif /* CONFIG_X86_64 */
- #endif /* _ASM_X86_VSYSCALL_H */
|