linux/include/linux/context_tracking.h
<<
>>
Prefs
   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
  47
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.