This is a note to let you know that I've just added the patch titled tracing: Simplify creation and deletion of synthetic events to the 4.19-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: tracing-simplify-creation-and-deletion-of-synthetic-events.patch and it can be found in the queue-4.19 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From stable+bounces-43478-greg=kroah.com@xxxxxxxxxxxxxxx Thu May 9 04:30:13 2024 From: George Guo <dongtai.guo@xxxxxxxxx> Date: Thu, 9 May 2024 10:29:19 +0800 Subject: tracing: Simplify creation and deletion of synthetic events To: gregkh@xxxxxxxxxxxxxxxxxxx, rostedt@xxxxxxxxxxx, mhiramat@xxxxxxxxxx, tom.zanussi@xxxxxxxxxxxxxxx Cc: stable@xxxxxxxxxxxxxxx, George Guo <guodongtai@xxxxxxxxxx> Message-ID: <20240509022931.3513365-2-dongtai.guo@xxxxxxxxx> From: Masami Hiramatsu <mhiramat@xxxxxxxxxx> commit faacb361f271be4baf2d807e2eeaba87e059225f upstream. Since the event_mutex and synth_event_mutex ordering issue is gone, we can skip existing event check when adding or deleting events, and some redundant code in error path. This changes release_all_synth_events() to abort the process when it hits any error and returns the error code. It succeeds only if it has no error. Link: http://lkml.kernel.org/r/154140847194.17322.17960275728005067803.stgit@devbox Reviewed-by: Tom Zanussi <tom.zanussi@xxxxxxxxxxxxxxx> Tested-by: Tom Zanussi <tom.zanussi@xxxxxxxxxxxxxxx> Signed-off-by: Masami Hiramatsu <mhiramat@xxxxxxxxxx> Signed-off-by: Steven Rostedt (VMware) <rostedt@xxxxxxxxxxx> Signed-off-by: George Guo <guodongtai@xxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- kernel/trace/trace_events_hist.c | 53 +++++++++++++-------------------------- 1 file changed, 18 insertions(+), 35 deletions(-) --- a/kernel/trace/trace_events_hist.c +++ b/kernel/trace/trace_events_hist.c @@ -1028,18 +1028,6 @@ struct hist_var_data { struct hist_trigger_data *hist_data; }; -static void add_or_delete_synth_event(struct synth_event *event, int delete) -{ - if (delete) - free_synth_event(event); - else { - if (!find_synth_event(event->name)) - list_add(&event->list, &synth_event_list); - else - free_synth_event(event); - } -} - static int create_synth_event(int argc, char **argv) { struct synth_field *field, *fields[SYNTH_FIELDS_MAX]; @@ -1072,15 +1060,16 @@ static int create_synth_event(int argc, if (event) { if (delete_event) { if (event->ref) { - event = NULL; ret = -EBUSY; goto out; } - list_del(&event->list); - goto out; - } - event = NULL; - ret = -EEXIST; + ret = unregister_synth_event(event); + if (!ret) { + list_del(&event->list); + free_synth_event(event); + } + } else + ret = -EEXIST; goto out; } else if (delete_event) { ret = -ENOENT; @@ -1120,29 +1109,21 @@ static int create_synth_event(int argc, event = NULL; goto err; } + ret = register_synth_event(event); + if (!ret) + list_add(&event->list, &synth_event_list); + else + free_synth_event(event); out: - if (event) { - if (delete_event) { - ret = unregister_synth_event(event); - add_or_delete_synth_event(event, !ret); - } else { - ret = register_synth_event(event); - add_or_delete_synth_event(event, ret); - } - } mutex_unlock(&synth_event_mutex); mutex_unlock(&event_mutex); return ret; err: - mutex_unlock(&synth_event_mutex); - mutex_unlock(&event_mutex); - for (i = 0; i < n_fields; i++) free_synth_field(fields[i]); - free_synth_event(event); - return ret; + goto out; } static int release_all_synth_events(void) @@ -1161,10 +1142,12 @@ static int release_all_synth_events(void } list_for_each_entry_safe(event, e, &synth_event_list, list) { - list_del(&event->list); - ret = unregister_synth_event(event); - add_or_delete_synth_event(event, !ret); + if (!ret) { + list_del(&event->list); + free_synth_event(event); + } else + break; } mutex_unlock(&synth_event_mutex); mutex_unlock(&event_mutex); Patches currently in stable-queue which might be from kroah.com@xxxxxxxxxxxxxxx are queue-4.19/tracing-consolidate-trace_add-remove_event_call-back-to-the-nolock-functions.patch queue-4.19/tracing-split-up-onmatch-action-data.patch queue-4.19/tracing-remove-unnecessary-var_ref-destroy-in-track_data_destroy.patch queue-4.19/tracing-use-str_has_prefix-helper-for-histogram-code.patch queue-4.19/tracing-simplify-creation-and-deletion-of-synthetic-events.patch queue-4.19/tracing-refactor-hist-trigger-action-code.patch queue-4.19/string.h-add-str_has_prefix-helper-function.patch queue-4.19/tracing-remove-unneeded-synth_event_mutex.patch queue-4.19/tracing-add-unified-dynamic-event-framework.patch queue-4.19/tracing-use-dyn_event-framework-for-synthetic-events.patch queue-4.19/tracing-use-str_has_prefix-instead-of-using-fixed-sizes.patch queue-4.19/tracing-generalize-hist-trigger-onmax-and-save-action.patch queue-4.19/tracing-have-the-historgram-use-the-result-of-str_has_prefix-for-len-of-prefix.patch