diff options
Diffstat (limited to 'include/linux/compiler.h')
-rw-r--r-- | include/linux/compiler.h | 35 |
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 |