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