at v3.9-rc2 1.2 kB view raw
1#ifndef _LINUX_CONTEXT_TRACKING_H 2#define _LINUX_CONTEXT_TRACKING_H 3 4#ifdef CONFIG_CONTEXT_TRACKING 5#include <linux/sched.h> 6#include <linux/percpu.h> 7 8struct context_tracking { 9 /* 10 * When active is false, probes are unset in order 11 * to minimize overhead: TIF flags are cleared 12 * and calls to user_enter/exit are ignored. This 13 * may be further optimized using static keys. 14 */ 15 bool active; 16 enum { 17 IN_KERNEL = 0, 18 IN_USER, 19 } state; 20}; 21 22DECLARE_PER_CPU(struct context_tracking, context_tracking); 23 24static inline bool context_tracking_in_user(void) 25{ 26 return __this_cpu_read(context_tracking.state) == IN_USER; 27} 28 29static inline bool context_tracking_active(void) 30{ 31 return __this_cpu_read(context_tracking.active); 32} 33 34extern void user_enter(void); 35extern void user_exit(void); 36extern void context_tracking_task_switch(struct task_struct *prev, 37 struct task_struct *next); 38#else 39static inline bool context_tracking_in_user(void) { return false; } 40static inline void user_enter(void) { } 41static inline void user_exit(void) { } 42static inline void context_tracking_task_switch(struct task_struct *prev, 43 struct task_struct *next) { } 44#endif /* !CONFIG_CONTEXT_TRACKING */ 45 46#endif