From nobody Mon Dec 15 21:19:56 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 67D431DA21; Wed, 7 May 2025 14:54:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746629685; cv=none; b=V4Ljq5+6vzVyMHMPZV0FLzkTszrvYjy7r00orqw7CwTUDWoPeEq/6MGd+oEaKw08lpH3d0eCkUL8mjcCd7Eaa6trZaVVJKcCG9W9hm7+K6KlD3rVpR8+u3VI0OEIyOxJmR/KkFreTqmBCyMk15zX4LPbMiqAsiHHtC3TA6h1Wv4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746629685; c=relaxed/simple; bh=v3BqsBu76mZ9IjtnZSmxnnLPzK9Gfutz/C4dFMdez7Q=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=iwZY4PGfVyIVKw/1sy3zG7m119MDZnUyRNhDV5jEpGN9STfCYVU7YXfKu7mS/LhI4CipSd2D+XpFcwBfaDxQJonJuBavE4Z+J0ztNXB/Bq6P4CswqX8E3FoDc3y3xUhkK+dq+/1liOTbWKJdPPsrfnpLch0fcDadCHMMZRRUxQw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id EE8B4C4CEEB; Wed, 7 May 2025 14:54:44 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1uCgAh-00000001q9y-3s4N; Wed, 07 May 2025 10:54:55 -0400 Message-ID: <20250507145455.776436410@goodmis.org> User-Agent: quilt/0.68 Date: Wed, 07 May 2025 10:53:06 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton , Tom Zanussi Subject: [PATCH 1/3] tracing: Rename event_trigger_alloc() to trigger_data_alloc() References: <20250507145305.730136036@goodmis.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Steven Rostedt The function event_trigger_alloc() creates an event_trigger_data descriptor and states that it needs to be freed via event_trigger_free(). This is incorrect, it needs to be freed by trigger_data_free() as event_trigger_free() adds ref counting. Rename event_trigger_alloc() to trigger_data_alloc() and state that it needs to be freed via trigger_data_free(). This naming convention was introducing bugs. Fixes: 86599dbe2c527 ("tracing: Add helper functions to simplify event_comm= and.parse() callback handling") Signed-off-by: Steven Rostedt (Google) Reviewed-by: Tom Zanussi --- kernel/trace/trace.h | 8 +++----- kernel/trace/trace_events_hist.c | 2 +- kernel/trace/trace_events_trigger.c | 16 ++++++++-------- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index a2639daea47b..053af6e4e7e0 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@ -1774,6 +1774,9 @@ extern int event_enable_register_trigger(char *glob, extern void event_enable_unregister_trigger(char *glob, struct event_trigger_data *test, struct trace_event_file *file); +extern struct event_trigger_data * +trigger_data_alloc(struct event_command *cmd_ops, char *cmd, char *param, + void *private_data); extern void trigger_data_free(struct event_trigger_data *data); extern int event_trigger_init(struct event_trigger_data *data); extern int trace_event_trigger_enable_disable(struct trace_event_file *fil= e, @@ -1800,11 +1803,6 @@ extern bool event_trigger_check_remove(const char *g= lob); extern bool event_trigger_empty_param(const char *param); extern int event_trigger_separate_filter(char *param_and_filter, char **pa= ram, char **filter, bool param_required); -extern struct event_trigger_data * -event_trigger_alloc(struct event_command *cmd_ops, - char *cmd, - char *param, - void *private_data); extern int event_trigger_parse_num(char *trigger, struct event_trigger_data *trigger_data); extern int event_trigger_set_filter(struct event_command *cmd_ops, diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_h= ist.c index 58c9535f61df..1d536219b624 100644 --- a/kernel/trace/trace_events_hist.c +++ b/kernel/trace/trace_events_hist.c @@ -6826,7 +6826,7 @@ static int event_hist_trigger_parse(struct event_comm= and *cmd_ops, return PTR_ERR(hist_data); } =20 - trigger_data =3D event_trigger_alloc(cmd_ops, cmd, param, hist_data); + trigger_data =3D trigger_data_alloc(cmd_ops, cmd, param, hist_data); if (!trigger_data) { ret =3D -ENOMEM; goto out_free; diff --git a/kernel/trace/trace_events_trigger.c b/kernel/trace/trace_event= s_trigger.c index b66b6d235d91..dac3344ee345 100644 --- a/kernel/trace/trace_events_trigger.c +++ b/kernel/trace/trace_events_trigger.c @@ -804,7 +804,7 @@ int event_trigger_separate_filter(char *param_and_filte= r, char **param, } =20 /** - * event_trigger_alloc - allocate and init event_trigger_data for a trigger + * trigger_data_alloc - allocate and init event_trigger_data for a trigger * @cmd_ops: The event_command operations for the trigger * @cmd: The cmd string * @param: The param string @@ -815,14 +815,14 @@ int event_trigger_separate_filter(char *param_and_fil= ter, char **param, * trigger_ops to assign to the event_trigger_data. @private_data can * also be passed in and associated with the event_trigger_data. * - * Use event_trigger_free() to free an event_trigger_data object. + * Use trigger_data_free() to free an event_trigger_data object. * * Return: The trigger_data object success, NULL otherwise */ -struct event_trigger_data *event_trigger_alloc(struct event_command *cmd_o= ps, - char *cmd, - char *param, - void *private_data) +struct event_trigger_data *trigger_data_alloc(struct event_command *cmd_op= s, + char *cmd, + char *param, + void *private_data) { struct event_trigger_data *trigger_data; const struct event_trigger_ops *trigger_ops; @@ -989,7 +989,7 @@ event_trigger_parse(struct event_command *cmd_ops, return ret; =20 ret =3D -ENOMEM; - trigger_data =3D event_trigger_alloc(cmd_ops, cmd, param, file); + trigger_data =3D trigger_data_alloc(cmd_ops, cmd, param, file); if (!trigger_data) goto out; =20 @@ -1793,7 +1793,7 @@ int event_enable_trigger_parse(struct event_command *= cmd_ops, enable_data->enable =3D enable; enable_data->file =3D event_enable_file; =20 - trigger_data =3D event_trigger_alloc(cmd_ops, cmd, param, enable_data); + trigger_data =3D trigger_data_alloc(cmd_ops, cmd, param, enable_data); if (!trigger_data) { kfree(enable_data); goto out; --=20 2.47.2 From nobody Mon Dec 15 21:19:56 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7F44A280CE7; Wed, 7 May 2025 14:54:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746629685; cv=none; b=fTyMa1/NRBf/ZStIpbWn5/BhGHY9MMH/JZOb9+zwvFsjGLdZNOSArgsyP4rprTNatZfQDEUzAjicyzLyxgiFfbI84DhCHixU4DxmKecJWV9gw1DWlOniLYUAG04SSXcrFn8y5WLzTg2TaP3/2YXgwZCU/hd/dplXE4p1YrlxTdU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746629685; c=relaxed/simple; bh=Zb/lfoSuBbKPbSZ/G/4eL07FT372hBGNiyY++BYN92g=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=G0ImFHTTAdLu1m+LmT6DH+3K3XYKkU8Dm4s1CnhNyuFGzkmgnTin5poM/fwwNZpF6FqgqiZv+4xhrNaLxhScfu3GXKKEWkJc1rGoTDWsHYX4jdNywtShc0zXmvyj0e63O6iaXx0bA+8R4H/QlDN5TJ2yrZd4+DEtOnWwFJW5vLQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3C740C4CEEE; Wed, 7 May 2025 14:54:45 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1uCgAi-00000001qAT-0Ply; Wed, 07 May 2025 10:54:56 -0400 Message-ID: <20250507145455.944453325@goodmis.org> User-Agent: quilt/0.68 Date: Wed, 07 May 2025 10:53:07 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton , Tom Zanussi , Miaoqian Lin Subject: [PATCH 2/3] tracing: Fix error handling in event_trigger_parse() References: <20250507145305.730136036@goodmis.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Miaoqian Lin According to trigger_data_alloc() doc, trigger_data_free() should be used to free an event_trigger_data object. This fixes a mismatch introduced when kzalloc was replaced with trigger_data_alloc without updating the corresponding deallocation calls. Cc: Masami Hiramatsu Cc: Mathieu Desnoyers Cc: Tom Zanussi Link: https://lore.kernel.org/20250318112737.4174-1-linmq006@gmail.com Fixes: e1f187d09e11 ("tracing: Have existing event_command.parse() implemen= tations use helpers") Signed-off-by: Miaoqian Lin [ SDR: Changed event_trigger_alloc/free() to trigger_data_alloc/free() ] Signed-off-by: Steven Rostedt (Google) Reviewed-by: Tom Zanussi --- kernel/trace/trace_events_trigger.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/trace/trace_events_trigger.c b/kernel/trace/trace_event= s_trigger.c index dac3344ee345..c316badc608b 100644 --- a/kernel/trace/trace_events_trigger.c +++ b/kernel/trace/trace_events_trigger.c @@ -995,7 +995,7 @@ event_trigger_parse(struct event_command *cmd_ops, =20 if (remove) { event_trigger_unregister(cmd_ops, file, glob+1, trigger_data); - kfree(trigger_data); + trigger_data_free(trigger_data); ret =3D 0; goto out; } @@ -1022,7 +1022,7 @@ event_trigger_parse(struct event_command *cmd_ops, =20 out_free: event_trigger_reset_filter(cmd_ops, trigger_data); - kfree(trigger_data); + trigger_data_free(trigger_data); goto out; } =20 --=20 2.47.2 From nobody Mon Dec 15 21:19:56 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7F4B828934A; Wed, 7 May 2025 14:54:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746629685; cv=none; b=PwrnIpZDqHmIal3xUJN8VYBHQ7hKorbeWYvIb5hpocJShektSqKr4KNnCjjBtWnN45dEyo1mTbpxpMOVYagWKqfpHT6+nNZbNTdBSL347c0zIAbVWhhxkiFNXQmz7bcYJur6h8RLeiXWevxr3nIbkHlr+O6PC39sxfephoDAhDM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746629685; c=relaxed/simple; bh=ax0RfAyfqlQKkQcvo78648dWff+TrIua/v5tQxEHJLU=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=QrchO7mFo+JyyUkz50Hf6Cg3VNrFDKISSOaWipEJddvG0MT10rJIW676ndHAW0AeQPW823+qpUbPeSC2HMpvC23l7m5nkTS+31cunevyC2M4PVqTbyrXKmvKtom8z4D6keMSvFkiBdFoa7oT9BqF6dcgSCEnl+G/e6l/G4ApGKg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 44FA4C4CEF1; Wed, 7 May 2025 14:54:45 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1uCgAi-00000001qAx-18GM; Wed, 07 May 2025 10:54:56 -0400 Message-ID: <20250507145456.121186494@goodmis.org> User-Agent: quilt/0.68 Date: Wed, 07 May 2025 10:53:08 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton , Tom Zanussi Subject: [PATCH 3/3] tracing: Remove unnecessary "goto out" that simply returns ret is trigger code References: <20250507145305.730136036@goodmis.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Steven Rostedt There's several functions that have "goto out;" where the label out is just: out: return ret; Simplify the code by just doing the return in the location and removing all the out labels and jumps. Signed-off-by: Steven Rostedt (Google) Reviewed-by: Tom Zanussi --- kernel/trace/trace_events_trigger.c | 44 +++++++++++------------------ 1 file changed, 17 insertions(+), 27 deletions(-) diff --git a/kernel/trace/trace_events_trigger.c b/kernel/trace/trace_event= s_trigger.c index c316badc608b..fdd1112388e9 100644 --- a/kernel/trace/trace_events_trigger.c +++ b/kernel/trace/trace_events_trigger.c @@ -552,16 +552,14 @@ static int register_trigger(char *glob, lockdep_assert_held(&event_mutex); =20 list_for_each_entry(test, &file->triggers, list) { - if (test->cmd_ops->trigger_type =3D=3D data->cmd_ops->trigger_type) { - ret =3D -EEXIST; - goto out; - } + if (test->cmd_ops->trigger_type =3D=3D data->cmd_ops->trigger_type) + return -EEXIST; } =20 if (data->ops->init) { ret =3D data->ops->init(data); if (ret < 0) - goto out; + return ret; } =20 list_add_rcu(&data->list, &file->triggers); @@ -572,7 +570,6 @@ static int register_trigger(char *glob, list_del_rcu(&data->list); update_cond_flag(file); } -out: return ret; } =20 @@ -770,7 +767,7 @@ int event_trigger_separate_filter(char *param_and_filte= r, char **param, if (!param_and_filter) { if (param_required) ret =3D -EINVAL; - goto out; + return ret; } =20 /* @@ -781,7 +778,7 @@ int event_trigger_separate_filter(char *param_and_filte= r, char **param, */ if (!param_required && param_and_filter && !isdigit(param_and_filter[0]))= { *filter =3D param_and_filter; - goto out; + return ret; } =20 /* @@ -799,7 +796,6 @@ int event_trigger_separate_filter(char *param_and_filte= r, char **param, if (!**filter) *filter =3D NULL; } -out: return ret; } =20 @@ -991,13 +987,12 @@ event_trigger_parse(struct event_command *cmd_ops, ret =3D -ENOMEM; trigger_data =3D trigger_data_alloc(cmd_ops, cmd, param, file); if (!trigger_data) - goto out; + return ret; =20 if (remove) { event_trigger_unregister(cmd_ops, file, glob+1, trigger_data); trigger_data_free(trigger_data); - ret =3D 0; - goto out; + return 0; } =20 ret =3D event_trigger_parse_num(param, trigger_data); @@ -1017,13 +1012,12 @@ event_trigger_parse(struct event_command *cmd_ops, =20 /* Down the counter of trigger_data or free it if not used anymore */ event_trigger_free(trigger_data); - out: return ret; =20 out_free: event_trigger_reset_filter(cmd_ops, trigger_data); trigger_data_free(trigger_data); - goto out; + return ret; } =20 /** @@ -1057,10 +1051,10 @@ int set_trigger_filter(char *filter_str, s =3D strsep(&filter_str, " \t"); =20 if (!strlen(s) || strcmp(s, "if") !=3D 0) - goto out; + return ret; =20 if (!filter_str) - goto out; + return ret; =20 /* The filter is for the 'trigger' event, not the triggered event */ ret =3D create_event_filter(file->tr, file->event_call, @@ -1104,7 +1098,6 @@ int set_trigger_filter(char *filter_str, ret =3D -ENOMEM; } } - out: return ret; } =20 @@ -1772,7 +1765,7 @@ int event_enable_trigger_parse(struct event_command *= cmd_ops, ret =3D -EINVAL; event_enable_file =3D find_event_file(tr, system, event); if (!event_enable_file) - goto out; + return ret; =20 #ifdef CONFIG_HIST_TRIGGERS hist =3D ((strcmp(cmd, ENABLE_HIST_STR) =3D=3D 0) || @@ -1787,7 +1780,7 @@ int event_enable_trigger_parse(struct event_command *= cmd_ops, =20 enable_data =3D kzalloc(sizeof(*enable_data), GFP_KERNEL); if (!enable_data) - goto out; + return ret; =20 enable_data->hist =3D hist; enable_data->enable =3D enable; @@ -1796,7 +1789,7 @@ int event_enable_trigger_parse(struct event_command *= cmd_ops, trigger_data =3D trigger_data_alloc(cmd_ops, cmd, param, enable_data); if (!trigger_data) { kfree(enable_data); - goto out; + return ret; } =20 if (remove) { @@ -1804,7 +1797,7 @@ int event_enable_trigger_parse(struct event_command *= cmd_ops, kfree(trigger_data); kfree(enable_data); ret =3D 0; - goto out; + return ret; } =20 /* Up the trigger_data count to make sure nothing frees it on failure */ @@ -1834,7 +1827,6 @@ int event_enable_trigger_parse(struct event_command *= cmd_ops, goto out_disable; =20 event_trigger_free(trigger_data); - out: return ret; out_disable: trace_event_enable_disable(event_enable_file, 0, 1); @@ -1845,7 +1837,7 @@ int event_enable_trigger_parse(struct event_command *= cmd_ops, event_trigger_free(trigger_data); kfree(enable_data); =20 - goto out; + return ret; } =20 int event_enable_register_trigger(char *glob, @@ -1865,15 +1857,14 @@ int event_enable_register_trigger(char *glob, (test->cmd_ops->trigger_type =3D=3D data->cmd_ops->trigger_type) && (test_enable_data->file =3D=3D enable_data->file)) { - ret =3D -EEXIST; - goto out; + return -EEXIST; } } =20 if (data->ops->init) { ret =3D data->ops->init(data); if (ret < 0) - goto out; + return ret; } =20 list_add_rcu(&data->list, &file->triggers); @@ -1884,7 +1875,6 @@ int event_enable_register_trigger(char *glob, list_del_rcu(&data->list); update_cond_flag(file); } -out: return ret; } =20 --=20 2.47.2