branch-check: fix long->int truncation when profiling branches
Subsystems (3)
Mikulas Patocka
maintainerPATCH 3/4 branch-check: fix long->int truncation when profiling branches
The function __builtin_expect returns long type (see the gcc documentation), and so do macros likely and unlikely. Unfortunatelly, when CONFIG_PROFILE_ANNOTATED_BRANCHES is selected, the macros likely and unlikely expand to __branch_check__ and __branch_check__ truncates the long type to int. This unintended truncation may cause bugs in various kernel code (we found a bug in dm-writecache because of it), so it's better to fix __branch_check__ to return long.
Signed-off-by Mikulas Patocka <[email protected]>
--- include/linux/compiler.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/linux/compiler.h +1 -1
@@ -21,7 +21,7 @@ void ftrace_likely_update(struct ftrace_#define unlikely_notrace (x) __builtin_expect(!!(x), 0)#define __branch_check__ (x, expect, is_constant) ({ \ - int ______r; \ + long ______r; \ static struct ftrace_likely_data \ __attribute__((__aligned__(4))) \ __attribute__((section("_ftrace_annotated_branch"))) \