diff options
Diffstat (limited to 'kernel/trace')
-rw-r--r-- | kernel/trace/trace_events.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index 0f1307a29fcf..9a7dc4bf1171 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c | |||
@@ -245,6 +245,9 @@ static int ftrace_event_enable_disable(struct ftrace_event_file *file, | |||
245 | break; | 245 | break; |
246 | } | 246 | } |
247 | file->flags |= FTRACE_EVENT_FL_ENABLED; | 247 | file->flags |= FTRACE_EVENT_FL_ENABLED; |
248 | |||
249 | /* WAS_ENABLED gets set but never cleared. */ | ||
250 | call->flags |= TRACE_EVENT_FL_WAS_ENABLED; | ||
248 | } | 251 | } |
249 | break; | 252 | break; |
250 | } | 253 | } |
@@ -1626,12 +1629,13 @@ static void trace_module_remove_events(struct module *mod) | |||
1626 | { | 1629 | { |
1627 | struct ftrace_module_file_ops *file_ops; | 1630 | struct ftrace_module_file_ops *file_ops; |
1628 | struct ftrace_event_call *call, *p; | 1631 | struct ftrace_event_call *call, *p; |
1629 | bool found = false; | 1632 | bool clear_trace = false; |
1630 | 1633 | ||
1631 | down_write(&trace_event_mutex); | 1634 | down_write(&trace_event_mutex); |
1632 | list_for_each_entry_safe(call, p, &ftrace_events, list) { | 1635 | list_for_each_entry_safe(call, p, &ftrace_events, list) { |
1633 | if (call->mod == mod) { | 1636 | if (call->mod == mod) { |
1634 | found = true; | 1637 | if (call->flags & TRACE_EVENT_FL_WAS_ENABLED) |
1638 | clear_trace = true; | ||
1635 | __trace_remove_event_call(call); | 1639 | __trace_remove_event_call(call); |
1636 | } | 1640 | } |
1637 | } | 1641 | } |
@@ -1648,9 +1652,9 @@ static void trace_module_remove_events(struct module *mod) | |||
1648 | 1652 | ||
1649 | /* | 1653 | /* |
1650 | * It is safest to reset the ring buffer if the module being unloaded | 1654 | * It is safest to reset the ring buffer if the module being unloaded |
1651 | * registered any events. | 1655 | * registered any events that were used. |
1652 | */ | 1656 | */ |
1653 | if (found) | 1657 | if (clear_trace) |
1654 | tracing_reset_current_online_cpus(); | 1658 | tracing_reset_current_online_cpus(); |
1655 | up_write(&trace_event_mutex); | 1659 | up_write(&trace_event_mutex); |
1656 | } | 1660 | } |