From: Steven Rostedt Currently, the branch profiler is either always enabled, or always disabled. This patch adds a sysctl (/proc/sys/kernel/branch_profiling_enabled) to be able to enable/disable the branch profiler. This should help on cache line bouncing when not enabled. Signed-off-by: Steven Rostedt --- include/linux/kernel.h | 4 +++- kernel/sysctl.c | 10 ++++++++++ kernel/trace/trace_branch.c | 9 +++++++++ 3 files changed, 22 insertions(+), 1 deletions(-) diff --git a/include/linux/kernel.h b/include/linux/kernel.h index f96a481..9372a87 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h @@ -77,13 +77,15 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); #define unlikely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 0)) #ifdef CONFIG_PROFILE_ALL_BRANCHES +extern int sysctl_branch_profiling_enabled; /* * "Define 'is'", Bill Clinton * "Define 'if'", Steven Rostedt */ #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) ) #define __trace_if(cond) \ - if (__builtin_constant_p((cond)) ? !!(cond) : \ + if ((!sysctl_branch_profiling_enabled || \ + __builtin_constant_p((cond))) ? !!(cond) : \ ({ \ int ______r; \ static struct ftrace_branch_data \ diff --git a/kernel/sysctl.c b/kernel/sysctl.c index b2970d5..2628aa7 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -912,6 +912,16 @@ static struct ctl_table kern_table[] = { .child = slow_work_sysctls, }, #endif +#ifdef CONFIG_PROFILE_ALL_BRANCHES + { + .ctl_name = CTL_UNNUMBERED, + .procname = "branch_profiling_enabled", + .data = &sysctl_branch_profiling_enabled, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = &proc_dointvec, + }, +#endif /* * NOTE: do not add new entries to this table unless you have read * Documentation/sysctl/ctl_unnumbered.txt diff --git a/kernel/trace/trace_branch.c b/kernel/trace/trace_branch.c index 19c618f..e4f1465 100644 --- a/kernel/trace/trace_branch.c +++ b/kernel/trace/trace_branch.c @@ -334,6 +334,15 @@ fs_initcall(init_annotated_branch_stats); #ifdef CONFIG_PROFILE_ALL_BRANCHES +int sysctl_branch_profiling_enabled __read_mostly; + +static int __init set_enable_branch_profiler(char *str) +{ + sysctl_branch_profiling_enabled = 1; + return 1; +} +__setup("enable_branch_profiler", set_enable_branch_profiler); + extern unsigned long __start_branch_profile[]; extern unsigned long __stop_branch_profile[]; -- 1.6.3.1 -- -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/