Commit 2f0df49c authored by Steven Rostedt (VMware)'s avatar Steven Rostedt (VMware) Committed by Peter Zijlstra

jump_label: Do not profile branch annotations

While running my branch profiler that checks for incorrect "likely" and
"unlikely"s around the kernel, there's a large number of them that are
incorrect due to being "static_branches".

As static_branches are rather special, as they are likely or unlikely for
other reasons than normal annotations are used for, there's no reason to
have them be profiled.

Expose the "unlikely_notrace" and "likely_notrace" so that the
static_branch can use them, and have them be ignored by the branch
profilers.
Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20201211163754.585174b9@gandalf.local.home
parent c7539258
...@@ -76,6 +76,8 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val, ...@@ -76,6 +76,8 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
#else #else
# define likely(x) __builtin_expect(!!(x), 1) # define likely(x) __builtin_expect(!!(x), 1)
# define unlikely(x) __builtin_expect(!!(x), 0) # define unlikely(x) __builtin_expect(!!(x), 0)
# define likely_notrace(x) likely(x)
# define unlikely_notrace(x) unlikely(x)
#endif #endif
/* Optimization barrier */ /* Optimization barrier */
......
...@@ -261,14 +261,14 @@ static __always_inline void jump_label_init(void) ...@@ -261,14 +261,14 @@ static __always_inline void jump_label_init(void)
static __always_inline bool static_key_false(struct static_key *key) static __always_inline bool static_key_false(struct static_key *key)
{ {
if (unlikely(static_key_count(key) > 0)) if (unlikely_notrace(static_key_count(key) > 0))
return true; return true;
return false; return false;
} }
static __always_inline bool static_key_true(struct static_key *key) static __always_inline bool static_key_true(struct static_key *key)
{ {
if (likely(static_key_count(key) > 0)) if (likely_notrace(static_key_count(key) > 0))
return true; return true;
return false; return false;
} }
...@@ -460,7 +460,7 @@ extern bool ____wrong_branch_error(void); ...@@ -460,7 +460,7 @@ extern bool ____wrong_branch_error(void);
branch = !arch_static_branch_jump(&(x)->key, true); \ branch = !arch_static_branch_jump(&(x)->key, true); \
else \ else \
branch = ____wrong_branch_error(); \ branch = ____wrong_branch_error(); \
likely(branch); \ likely_notrace(branch); \
}) })
#define static_branch_unlikely(x) \ #define static_branch_unlikely(x) \
...@@ -472,13 +472,13 @@ extern bool ____wrong_branch_error(void); ...@@ -472,13 +472,13 @@ extern bool ____wrong_branch_error(void);
branch = arch_static_branch(&(x)->key, false); \ branch = arch_static_branch(&(x)->key, false); \
else \ else \
branch = ____wrong_branch_error(); \ branch = ____wrong_branch_error(); \
unlikely(branch); \ unlikely_notrace(branch); \
}) })
#else /* !CONFIG_JUMP_LABEL */ #else /* !CONFIG_JUMP_LABEL */
#define static_branch_likely(x) likely(static_key_enabled(&(x)->key)) #define static_branch_likely(x) likely_notrace(static_key_enabled(&(x)->key))
#define static_branch_unlikely(x) unlikely(static_key_enabled(&(x)->key)) #define static_branch_unlikely(x) unlikely_notrace(static_key_enabled(&(x)->key))
#endif /* CONFIG_JUMP_LABEL */ #endif /* CONFIG_JUMP_LABEL */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment