Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 364926
b: refs/heads/master
c: 575380d
h: refs/heads/master
v: v3
  • Loading branch information
Steven Rostedt (Red Hat) authored and Steven Rostedt committed Mar 15, 2013
1 parent 136e0a7 commit 307e45a
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2a30c11f6a037e2475f3c651bc57e697e79fa963
refs/heads/master: 575380da8b46969a2c6a7e14a51056a63b30fe2e
5 changes: 5 additions & 0 deletions trunk/include/linux/ftrace_event.h
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,7 @@ enum {
TRACE_EVENT_FL_CAP_ANY_BIT,
TRACE_EVENT_FL_NO_SET_FILTER_BIT,
TRACE_EVENT_FL_IGNORE_ENABLE_BIT,
TRACE_EVENT_FL_WAS_ENABLED_BIT,
};

/*
Expand All @@ -205,12 +206,16 @@ enum {
* CAP_ANY - Any user can enable for perf
* NO_SET_FILTER - Set when filter has error and is to be ignored
* IGNORE_ENABLE - For ftrace internal events, do not enable with debugfs file
* WAS_ENABLED - Set and stays set when an event was ever enabled
* (used for module unloading, if a module event is enabled,
* it is best to clear the buffers that used it).
*/
enum {
TRACE_EVENT_FL_FILTERED = (1 << TRACE_EVENT_FL_FILTERED_BIT),
TRACE_EVENT_FL_CAP_ANY = (1 << TRACE_EVENT_FL_CAP_ANY_BIT),
TRACE_EVENT_FL_NO_SET_FILTER = (1 << TRACE_EVENT_FL_NO_SET_FILTER_BIT),
TRACE_EVENT_FL_IGNORE_ENABLE = (1 << TRACE_EVENT_FL_IGNORE_ENABLE_BIT),
TRACE_EVENT_FL_WAS_ENABLED = (1 << TRACE_EVENT_FL_WAS_ENABLED_BIT),
};

struct ftrace_event_call {
Expand Down
12 changes: 8 additions & 4 deletions trunk/kernel/trace/trace_events.c
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,9 @@ static int ftrace_event_enable_disable(struct ftrace_event_file *file,
break;
}
file->flags |= FTRACE_EVENT_FL_ENABLED;

/* WAS_ENABLED gets set but never cleared. */
call->flags |= TRACE_EVENT_FL_WAS_ENABLED;
}
break;
}
Expand Down Expand Up @@ -1626,12 +1629,13 @@ static void trace_module_remove_events(struct module *mod)
{
struct ftrace_module_file_ops *file_ops;
struct ftrace_event_call *call, *p;
bool found = false;
bool clear_trace = false;

down_write(&trace_event_mutex);
list_for_each_entry_safe(call, p, &ftrace_events, list) {
if (call->mod == mod) {
found = true;
if (call->flags & TRACE_EVENT_FL_WAS_ENABLED)
clear_trace = true;
__trace_remove_event_call(call);
}
}
Expand All @@ -1648,9 +1652,9 @@ static void trace_module_remove_events(struct module *mod)

/*
* It is safest to reset the ring buffer if the module being unloaded
* registered any events.
* registered any events that were used.
*/
if (found)
if (clear_trace)
tracing_reset_current_online_cpus();
up_write(&trace_event_mutex);
}
Expand Down

0 comments on commit 307e45a

Please sign in to comment.