|
@@ -637,17 +637,15 @@ static void append_filter_err(struct filter_parse_state *ps,
|
|
free_page((unsigned long) buf);
|
|
free_page((unsigned long) buf);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/* caller must hold event_mutex */
|
|
void print_event_filter(struct ftrace_event_call *call, struct trace_seq *s)
|
|
void print_event_filter(struct ftrace_event_call *call, struct trace_seq *s)
|
|
{
|
|
{
|
|
- struct event_filter *filter;
|
|
|
|
|
|
+ struct event_filter *filter = call->filter;
|
|
|
|
|
|
- mutex_lock(&event_mutex);
|
|
|
|
- filter = call->filter;
|
|
|
|
if (filter && filter->filter_string)
|
|
if (filter && filter->filter_string)
|
|
trace_seq_printf(s, "%s\n", filter->filter_string);
|
|
trace_seq_printf(s, "%s\n", filter->filter_string);
|
|
else
|
|
else
|
|
trace_seq_puts(s, "none\n");
|
|
trace_seq_puts(s, "none\n");
|
|
- mutex_unlock(&event_mutex);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
void print_subsystem_event_filter(struct event_subsystem *system,
|
|
void print_subsystem_event_filter(struct event_subsystem *system,
|
|
@@ -1841,23 +1839,22 @@ static int create_system_filter(struct event_subsystem *system,
|
|
return err;
|
|
return err;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/* caller must hold event_mutex */
|
|
int apply_event_filter(struct ftrace_event_call *call, char *filter_string)
|
|
int apply_event_filter(struct ftrace_event_call *call, char *filter_string)
|
|
{
|
|
{
|
|
struct event_filter *filter;
|
|
struct event_filter *filter;
|
|
- int err = 0;
|
|
|
|
-
|
|
|
|
- mutex_lock(&event_mutex);
|
|
|
|
|
|
+ int err;
|
|
|
|
|
|
if (!strcmp(strstrip(filter_string), "0")) {
|
|
if (!strcmp(strstrip(filter_string), "0")) {
|
|
filter_disable(call);
|
|
filter_disable(call);
|
|
filter = call->filter;
|
|
filter = call->filter;
|
|
if (!filter)
|
|
if (!filter)
|
|
- goto out_unlock;
|
|
|
|
|
|
+ return 0;
|
|
RCU_INIT_POINTER(call->filter, NULL);
|
|
RCU_INIT_POINTER(call->filter, NULL);
|
|
/* Make sure the filter is not being used */
|
|
/* Make sure the filter is not being used */
|
|
synchronize_sched();
|
|
synchronize_sched();
|
|
__free_filter(filter);
|
|
__free_filter(filter);
|
|
- goto out_unlock;
|
|
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|
|
err = create_filter(call, filter_string, true, &filter);
|
|
err = create_filter(call, filter_string, true, &filter);
|
|
@@ -1884,8 +1881,6 @@ int apply_event_filter(struct ftrace_event_call *call, char *filter_string)
|
|
__free_filter(tmp);
|
|
__free_filter(tmp);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-out_unlock:
|
|
|
|
- mutex_unlock(&event_mutex);
|
|
|
|
|
|
|
|
return err;
|
|
return err;
|
|
}
|
|
}
|