diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/trace/trace_events.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index 920e08fb53b3..7d854290bf81 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c | |||
| @@ -441,14 +441,14 @@ static int tracing_release_generic_file(struct inode *inode, struct file *filp) | |||
| 441 | /* | 441 | /* |
| 442 | * __ftrace_set_clr_event(NULL, NULL, NULL, set) will set/unset all events. | 442 | * __ftrace_set_clr_event(NULL, NULL, NULL, set) will set/unset all events. |
| 443 | */ | 443 | */ |
| 444 | static int __ftrace_set_clr_event(struct trace_array *tr, const char *match, | 444 | static int |
| 445 | const char *sub, const char *event, int set) | 445 | __ftrace_set_clr_event_nolock(struct trace_array *tr, const char *match, |
| 446 | const char *sub, const char *event, int set) | ||
| 446 | { | 447 | { |
| 447 | struct ftrace_event_file *file; | 448 | struct ftrace_event_file *file; |
| 448 | struct ftrace_event_call *call; | 449 | struct ftrace_event_call *call; |
| 449 | int ret = -EINVAL; | 450 | int ret = -EINVAL; |
| 450 | 451 | ||
| 451 | mutex_lock(&event_mutex); | ||
| 452 | list_for_each_entry(file, &tr->events, list) { | 452 | list_for_each_entry(file, &tr->events, list) { |
| 453 | 453 | ||
| 454 | call = file->event_call; | 454 | call = file->event_call; |
| @@ -474,6 +474,17 @@ static int __ftrace_set_clr_event(struct trace_array *tr, const char *match, | |||
| 474 | 474 | ||
| 475 | ret = 0; | 475 | ret = 0; |
| 476 | } | 476 | } |
| 477 | |||
| 478 | return ret; | ||
| 479 | } | ||
| 480 | |||
| 481 | static int __ftrace_set_clr_event(struct trace_array *tr, const char *match, | ||
| 482 | const char *sub, const char *event, int set) | ||
| 483 | { | ||
| 484 | int ret; | ||
| 485 | |||
| 486 | mutex_lock(&event_mutex); | ||
| 487 | ret = __ftrace_set_clr_event_nolock(tr, match, sub, event, set); | ||
| 477 | mutex_unlock(&event_mutex); | 488 | mutex_unlock(&event_mutex); |
| 478 | 489 | ||
| 479 | return ret; | 490 | return ret; |
| @@ -2408,11 +2419,11 @@ early_event_add_tracer(struct dentry *parent, struct trace_array *tr) | |||
| 2408 | 2419 | ||
| 2409 | int event_trace_del_tracer(struct trace_array *tr) | 2420 | int event_trace_del_tracer(struct trace_array *tr) |
| 2410 | { | 2421 | { |
| 2411 | /* Disable any running events */ | ||
| 2412 | __ftrace_set_clr_event(tr, NULL, NULL, NULL, 0); | ||
| 2413 | |||
| 2414 | mutex_lock(&event_mutex); | 2422 | mutex_lock(&event_mutex); |
| 2415 | 2423 | ||
| 2424 | /* Disable any running events */ | ||
| 2425 | __ftrace_set_clr_event_nolock(tr, NULL, NULL, NULL, 0); | ||
| 2426 | |||
| 2416 | down_write(&trace_event_sem); | 2427 | down_write(&trace_event_sem); |
| 2417 | __trace_remove_event_dirs(tr); | 2428 | __trace_remove_event_dirs(tr); |
| 2418 | debugfs_remove_recursive(tr->event_dir); | 2429 | debugfs_remove_recursive(tr->event_dir); |
