]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
jump_label: Do not profile branch annotations
authorSteven Rostedt (VMware) <rostedt@goodmis.org>
Fri, 11 Dec 2020 21:37:54 +0000 (16:37 -0500)
committerPeter Zijlstra <peterz@infradead.org>
Fri, 22 Jan 2021 10:08:56 +0000 (11:08 +0100)
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: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20201211163754.585174b9@gandalf.local.home
include/linux/compiler.h
include/linux/jump_label.h

index b8fe0c23cfffb32736c16ca678c37a8dcd591f15..df5b405e630514475370f66a26efc7c2b59aec9b 100644 (file)
@@ -76,6 +76,8 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
 #else
 # define likely(x)     __builtin_expect(!!(x), 1)
 # define unlikely(x)   __builtin_expect(!!(x), 0)
+# define likely_notrace(x)     likely(x)
+# define unlikely_notrace(x)   unlikely(x)
 #endif
 
 /* Optimization barrier */
index 32809624d422e1985860cba6a0e2faaf23dda41d..d92691262f51a6ef5c0a2efa4df6ab4668b6f920 100644 (file)
@@ -261,14 +261,14 @@ static __always_inline void jump_label_init(void)
 
 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 false;
 }
 
 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 false;
 }
@@ -460,7 +460,7 @@ extern bool ____wrong_branch_error(void);
                branch = !arch_static_branch_jump(&(x)->key, true);             \
        else                                                                    \
                branch = ____wrong_branch_error();                              \
-       likely(branch);                                                         \
+       likely_notrace(branch);                                                         \
 })
 
 #define static_branch_unlikely(x)                                              \
@@ -472,13 +472,13 @@ extern bool ____wrong_branch_error(void);
                branch = arch_static_branch(&(x)->key, false);                  \
        else                                                                    \
                branch = ____wrong_branch_error();                              \
-       unlikely(branch);                                                       \
+       unlikely_notrace(branch);                                                       \
 })
 
 #else /* !CONFIG_JUMP_LABEL */
 
-#define static_branch_likely(x)                likely(static_key_enabled(&(x)->key))
-#define static_branch_unlikely(x)      unlikely(static_key_enabled(&(x)->key))
+#define static_branch_likely(x)                likely_notrace(static_key_enabled(&(x)->key))
+#define static_branch_unlikely(x)      unlikely_notrace(static_key_enabled(&(x)->key))
 
 #endif /* CONFIG_JUMP_LABEL */