From c422ee2b99920c4e877bbb08aff1bf426bdc3f65 Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Wed, 6 May 2009 21:54:09 -0400 Subject: [PATCH] --- yaml --- r: 146105 b: refs/heads/master c: 9456f0fa6d3cb944d3b9fc31c9a244e0362c26ea h: refs/heads/master i: 146103: b28e5c7f3943dc43035a9dd9bebf4dc567456f49 v: v3 --- [refs] | 2 +- trunk/kernel/trace/trace.c | 10 ++++++++++ trunk/kernel/trace/trace.h | 2 ++ trunk/kernel/trace/trace_events.c | 9 +++++++++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 8ba6e98b8ea4..e49dd9daa878 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 71e1c8ac42ae4038ddb1367cce7097ab868dc532 +refs/heads/master: 9456f0fa6d3cb944d3b9fc31c9a244e0362c26ea diff --git a/trunk/kernel/trace/trace.c b/trunk/kernel/trace/trace.c index 4164a344e72a..dd40d2320346 100644 --- a/trunk/kernel/trace/trace.c +++ b/trunk/kernel/trace/trace.c @@ -639,6 +639,16 @@ void tracing_reset_online_cpus(struct trace_array *tr) tracing_reset(tr, cpu); } +void tracing_reset_current(int cpu) +{ + tracing_reset(&global_trace, cpu); +} + +void tracing_reset_current_online_cpus(void) +{ + tracing_reset_online_cpus(&global_trace); +} + #define SAVED_CMDLINES 128 #define NO_CMDLINE_MAP UINT_MAX static unsigned map_pid_to_cmdline[PID_MAX_DEFAULT+1]; diff --git a/trunk/kernel/trace/trace.h b/trunk/kernel/trace/trace.h index 777c6c3a0cde..ba25793ffe67 100644 --- a/trunk/kernel/trace/trace.h +++ b/trunk/kernel/trace/trace.h @@ -409,6 +409,8 @@ int tracing_is_enabled(void); void trace_wake_up(void); void tracing_reset(struct trace_array *tr, int cpu); void tracing_reset_online_cpus(struct trace_array *tr); +void tracing_reset_current(int cpu); +void tracing_reset_current_online_cpus(void); int tracing_open_generic(struct inode *inode, struct file *filp); struct dentry *trace_create_file(const char *name, mode_t mode, diff --git a/trunk/kernel/trace/trace_events.c b/trunk/kernel/trace/trace_events.c index 8d579ff23610..6d2c842a0248 100644 --- a/trunk/kernel/trace/trace_events.c +++ b/trunk/kernel/trace/trace_events.c @@ -932,9 +932,11 @@ 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; list_for_each_entry_safe(call, p, &ftrace_events, list) { if (call->mod == mod) { + found = true; if (call->enabled) { call->enabled = 0; call->unregfunc(); @@ -957,6 +959,13 @@ static void trace_module_remove_events(struct module *mod) list_del(&file_ops->list); kfree(file_ops); } + + /* + * It is safest to reset the ring buffer if the module being unloaded + * registered any events. + */ + if (found) + tracing_reset_current_online_cpus(); } static int trace_module_notify(struct notifier_block *self,