File: /Users/paulross/dev/linux/linux-3.13/include/linux/context_tracking_state.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

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