aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/compiler.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/compiler.h')
-rw-r--r--include/linux/compiler.h35
1 files changed, 18 insertions, 17 deletions
diff --git a/include/linux/compiler.h b/include/linux/compiler.h
index 445348facea9..8aaf7cd026b0 100644
--- a/include/linux/compiler.h
+++ b/include/linux/compiler.h
@@ -53,23 +53,24 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
53 * "Define 'is'", Bill Clinton 53 * "Define 'is'", Bill Clinton
54 * "Define 'if'", Steven Rostedt 54 * "Define 'if'", Steven Rostedt
55 */ 55 */
56#define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) 56#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
57#define __trace_if(cond) \ 57
58 if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ 58#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
59 ({ \ 59
60 int ______r; \ 60#define __trace_if_value(cond) ({ \
61 static struct ftrace_branch_data \ 61 static struct ftrace_branch_data \
62 __aligned(4) \ 62 __aligned(4) \
63 __section("_ftrace_branch") \ 63 __section("_ftrace_branch") \
64 ______f = { \ 64 __if_trace = { \
65 .func = __func__, \ 65 .func = __func__, \
66 .file = __FILE__, \ 66 .file = __FILE__, \
67 .line = __LINE__, \ 67 .line = __LINE__, \
68 }; \ 68 }; \
69 ______r = !!(cond); \ 69 (cond) ? \
70 ______f.miss_hit[______r]++; \ 70 (__if_trace.miss_hit[1]++,1) : \
71 ______r; \ 71 (__if_trace.miss_hit[0]++,0); \
72 })) 72})
73
73#endif /* CONFIG_PROFILE_ALL_BRANCHES */ 74#endif /* CONFIG_PROFILE_ALL_BRANCHES */
74 75
75#else 76#else