Commit 936e074b authored by Steven Rostedt's avatar Steven Rostedt Committed by Steven Rostedt

ftrace: Modify ftrace_set_filter/notrace to take ops

Since users of the function tracer can now pick and choose which
functions they want to trace agnostically from other users of the
function tracer, we need to pass the ops struct to the ftrace_set_filter()
functions.

The functions ftrace_set_global_filter() and ftrace_set_global_notrace()
is added to keep the old filter functions which are used to modify
the generic function tracers.
Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
parent cdbe61bf
...@@ -179,7 +179,12 @@ struct dyn_ftrace { ...@@ -179,7 +179,12 @@ struct dyn_ftrace {
}; };
int ftrace_force_update(void); int ftrace_force_update(void);
void ftrace_set_filter(unsigned char *buf, int len, int reset); void ftrace_set_filter(struct ftrace_ops *ops, unsigned char *buf,
int len, int reset);
void ftrace_set_notrace(struct ftrace_ops *ops, unsigned char *buf,
int len, int reset);
void ftrace_set_global_filter(unsigned char *buf, int len, int reset);
void ftrace_set_global_notrace(unsigned char *buf, int len, int reset);
int register_ftrace_command(struct ftrace_func_command *cmd); int register_ftrace_command(struct ftrace_func_command *cmd);
int unregister_ftrace_command(struct ftrace_func_command *cmd); int unregister_ftrace_command(struct ftrace_func_command *cmd);
......
...@@ -2826,6 +2826,10 @@ ftrace_set_regex(struct ftrace_ops *ops, unsigned char *buf, int len, ...@@ -2826,6 +2826,10 @@ ftrace_set_regex(struct ftrace_ops *ops, unsigned char *buf, int len,
struct ftrace_hash *hash; struct ftrace_hash *hash;
int ret; int ret;
/* All global ops uses the global ops filters */
if (ops->flags & FTRACE_OPS_FL_GLOBAL)
ops = &global_ops;
if (unlikely(ftrace_disabled)) if (unlikely(ftrace_disabled))
return -ENODEV; return -ENODEV;
...@@ -2856,6 +2860,41 @@ ftrace_set_regex(struct ftrace_ops *ops, unsigned char *buf, int len, ...@@ -2856,6 +2860,41 @@ ftrace_set_regex(struct ftrace_ops *ops, unsigned char *buf, int len,
/** /**
* ftrace_set_filter - set a function to filter on in ftrace * ftrace_set_filter - set a function to filter on in ftrace
* @ops - the ops to set the filter with
* @buf - the string that holds the function filter text.
* @len - the length of the string.
* @reset - non zero to reset all filters before applying this filter.
*
* Filters denote which functions should be enabled when tracing is enabled.
* If @buf is NULL and reset is set, all functions will be enabled for tracing.
*/
void ftrace_set_filter(struct ftrace_ops *ops, unsigned char *buf,
int len, int reset)
{
ftrace_set_regex(ops, buf, len, reset, 1);
}
EXPORT_SYMBOL_GPL(ftrace_set_filter);
/**
* ftrace_set_notrace - set a function to not trace in ftrace
* @ops - the ops to set the notrace filter with
* @buf - the string that holds the function notrace text.
* @len - the length of the string.
* @reset - non zero to reset all filters before applying this filter.
*
* Notrace Filters denote which functions should not be enabled when tracing
* is enabled. If @buf is NULL and reset is set, all functions will be enabled
* for tracing.
*/
void ftrace_set_notrace(struct ftrace_ops *ops, unsigned char *buf,
int len, int reset)
{
ftrace_set_regex(ops, buf, len, reset, 0);
}
EXPORT_SYMBOL_GPL(ftrace_set_notrace);
/**
* ftrace_set_filter - set a function to filter on in ftrace
* @ops - the ops to set the filter with
* @buf - the string that holds the function filter text. * @buf - the string that holds the function filter text.
* @len - the length of the string. * @len - the length of the string.
* @reset - non zero to reset all filters before applying this filter. * @reset - non zero to reset all filters before applying this filter.
...@@ -2863,13 +2902,15 @@ ftrace_set_regex(struct ftrace_ops *ops, unsigned char *buf, int len, ...@@ -2863,13 +2902,15 @@ ftrace_set_regex(struct ftrace_ops *ops, unsigned char *buf, int len,
* Filters denote which functions should be enabled when tracing is enabled. * Filters denote which functions should be enabled when tracing is enabled.
* If @buf is NULL and reset is set, all functions will be enabled for tracing. * If @buf is NULL and reset is set, all functions will be enabled for tracing.
*/ */
void ftrace_set_filter(unsigned char *buf, int len, int reset) void ftrace_set_global_filter(unsigned char *buf, int len, int reset)
{ {
ftrace_set_regex(&global_ops, buf, len, reset, 1); ftrace_set_regex(&global_ops, buf, len, reset, 1);
} }
EXPORT_SYMBOL_GPL(ftrace_set_global_filter);
/** /**
* ftrace_set_notrace - set a function to not trace in ftrace * ftrace_set_notrace - set a function to not trace in ftrace
* @ops - the ops to set the notrace filter with
* @buf - the string that holds the function notrace text. * @buf - the string that holds the function notrace text.
* @len - the length of the string. * @len - the length of the string.
* @reset - non zero to reset all filters before applying this filter. * @reset - non zero to reset all filters before applying this filter.
...@@ -2878,10 +2919,11 @@ void ftrace_set_filter(unsigned char *buf, int len, int reset) ...@@ -2878,10 +2919,11 @@ void ftrace_set_filter(unsigned char *buf, int len, int reset)
* is enabled. If @buf is NULL and reset is set, all functions will be enabled * is enabled. If @buf is NULL and reset is set, all functions will be enabled
* for tracing. * for tracing.
*/ */
void ftrace_set_notrace(unsigned char *buf, int len, int reset) void ftrace_set_global_notrace(unsigned char *buf, int len, int reset)
{ {
ftrace_set_regex(&global_ops, buf, len, reset, 0); ftrace_set_regex(&global_ops, buf, len, reset, 0);
} }
EXPORT_SYMBOL_GPL(ftrace_set_global_notrace);
/* /*
* command line interface to allow users to set filters on boot up. * command line interface to allow users to set filters on boot up.
......
...@@ -131,7 +131,7 @@ int trace_selftest_startup_dynamic_tracing(struct tracer *trace, ...@@ -131,7 +131,7 @@ int trace_selftest_startup_dynamic_tracing(struct tracer *trace,
func_name = "*" __stringify(DYN_FTRACE_TEST_NAME); func_name = "*" __stringify(DYN_FTRACE_TEST_NAME);
/* filter only on our function */ /* filter only on our function */
ftrace_set_filter(func_name, strlen(func_name), 1); ftrace_set_global_filter(func_name, strlen(func_name), 1);
/* enable tracing */ /* enable tracing */
ret = tracer_init(trace, tr); ret = tracer_init(trace, tr);
...@@ -181,7 +181,7 @@ int trace_selftest_startup_dynamic_tracing(struct tracer *trace, ...@@ -181,7 +181,7 @@ int trace_selftest_startup_dynamic_tracing(struct tracer *trace,
tracer_enabled = save_tracer_enabled; tracer_enabled = save_tracer_enabled;
/* Enable tracing on all functions again */ /* Enable tracing on all functions again */
ftrace_set_filter(NULL, 0, 1); ftrace_set_global_filter(NULL, 0, 1);
return ret; return ret;
} }
......
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