aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/trace_events.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/trace/trace_events.c')
-rw-r--r--kernel/trace/trace_events.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 8d579ff23610..6d2c842a0248 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -932,9 +932,11 @@ static void trace_module_remove_events(struct module *mod)
932{ 932{
933 struct ftrace_module_file_ops *file_ops; 933 struct ftrace_module_file_ops *file_ops;
934 struct ftrace_event_call *call, *p; 934 struct ftrace_event_call *call, *p;
935 bool found = false;
935 936
936 list_for_each_entry_safe(call, p, &ftrace_events, list) { 937 list_for_each_entry_safe(call, p, &ftrace_events, list) {
937 if (call->mod == mod) { 938 if (call->mod == mod) {
939 found = true;
938 if (call->enabled) { 940 if (call->enabled) {
939 call->enabled = 0; 941 call->enabled = 0;
940 call->unregfunc(); 942 call->unregfunc();
@@ -957,6 +959,13 @@ static void trace_module_remove_events(struct module *mod)
957 list_del(&file_ops->list); 959 list_del(&file_ops->list);
958 kfree(file_ops); 960 kfree(file_ops);
959 } 961 }
962
963 /*
964 * It is safest to reset the ring buffer if the module being unloaded
965 * registered any events.
966 */
967 if (found)
968 tracing_reset_current_online_cpus();
960} 969}
961 970
962static int trace_module_notify(struct notifier_block *self, 971static int trace_module_notify(struct notifier_block *self,