From nobody Sun Oct 5 14:37:50 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 7913F15539A; Fri, 1 Aug 2025 20:38:36 +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=1754080716; cv=none; b=GW5k+TP3NVWQjQwzVrLucME8xyy349yy5EpH0Bhg0VMIIqKups4bzZooE/O24KR7u6QWxzcKTzcOhFMzTPN5C8ZoWIbEwTl6cuPHVlRF2cbH4gLAdHlIEsRJz2oprG3CGHjbqDtf9mAiN+oFofRuzOWNcBYTZBoWVDMzB06nRSc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754080716; c=relaxed/simple; bh=5vo5nx9SFtWUoShcEz3+vT4OCwsILlL6rhdrqsLDQ20=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=IuPVeJvuZTUe6QfsT4oGJnuI3XbaROieDFv1w16vbNs1srWrRW0CD4fiCePRv4QW6TwnKuJbuoJ3QdrQVDQ6rjLHZa2ua1pxDAGPme9E8f2UqoqCs033OjeUSTA8xUc5L/m4OfwYi3zlf6EBECWJ8sISujZJH+gt45pvTUJOjOQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pc0TqoSD; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="pc0TqoSD" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 27BABC4CEF8; Fri, 1 Aug 2025 20:38:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1754080716; bh=5vo5nx9SFtWUoShcEz3+vT4OCwsILlL6rhdrqsLDQ20=; h=Date:From:To:Cc:Subject:References:From; b=pc0TqoSDrOtgq5TnB+v2GMtQbaaGHq7maH2z9iUGUxpU0xDhp+G56Y/3nWY/eQWi8 j3NZW55U9AcwRGChG/UPxLg3Y6tgbiP0S5Pxv3lEfyUhcgz9RwNgUBdU+7uQ086BOc zpEp81yOilHne/8CVBTvD68xgpi6LavMS8RHALmwRF3enoQxLiWhna1wNxz+L89h6B 9libTPspwvUp4/4CixH4fdO3NRZaeKk59UgnRcrn3NO4EMLMAaA0SCNbLQiS7+Agp5 9lPQyhTk+mzaE2j9CuaWVAJLSzqpJIO9N1+6WaJleX/SRk5xe0r67nTd4emu0exyuR nWHvUYwZdKyLQ== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1uhwWn-00000007jZa-2taV; Fri, 01 Aug 2025 16:38:57 -0400 Message-ID: <20250801203857.538726745@kernel.org> User-Agent: quilt/0.68 Date: Fri, 01 Aug 2025 16:37:23 -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 Subject: [PATCH v2 1/5] tracing: Remove unneeded goto out logic References: <20250801203722.072085868@kernel.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 Several places in the trace.c file there's a goto out where the out is simply a return. There's no reason to jump to the out label if it's not doing any more logic but simply returning from the function. Replace the goto outs with a return and remove the out labels. Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace.c | 38 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 945a8ecf2c62..0ec9cab9a812 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -1841,7 +1841,7 @@ int trace_get_user(struct trace_parser *parser, const= char __user *ubuf, =20 ret =3D get_user(ch, ubuf++); if (ret) - goto out; + return ret; =20 read++; cnt--; @@ -1855,7 +1855,7 @@ int trace_get_user(struct trace_parser *parser, const= char __user *ubuf, while (cnt && isspace(ch)) { ret =3D get_user(ch, ubuf++); if (ret) - goto out; + return ret; read++; cnt--; } @@ -1865,8 +1865,7 @@ int trace_get_user(struct trace_parser *parser, const= char __user *ubuf, /* only spaces were written */ if (isspace(ch) || !ch) { *ppos +=3D read; - ret =3D read; - goto out; + return read; } } =20 @@ -1874,13 +1873,12 @@ int trace_get_user(struct trace_parser *parser, con= st char __user *ubuf, while (cnt && !isspace(ch) && ch) { if (parser->idx < parser->size - 1) parser->buffer[parser->idx++] =3D ch; - else { - ret =3D -EINVAL; - goto out; - } + else + return -EINVAL; + ret =3D get_user(ch, ubuf++); if (ret) - goto out; + return ret; read++; cnt--; } @@ -1895,15 +1893,11 @@ int trace_get_user(struct trace_parser *parser, con= st char __user *ubuf, /* Make sure the parsed string always terminates with '\0'. */ parser->buffer[parser->idx] =3D 0; } else { - ret =3D -EINVAL; - goto out; + return -EINVAL; } =20 *ppos +=3D read; - ret =3D read; - -out: - return ret; + return read; } =20 /* TODO add a seq_buf_to_buffer() */ @@ -2405,10 +2399,10 @@ int __init register_tracer(struct tracer *type) mutex_unlock(&trace_types_lock); =20 if (ret || !default_bootup_tracer) - goto out_unlock; + return ret; =20 if (strncmp(default_bootup_tracer, type->name, MAX_TRACER_SIZE)) - goto out_unlock; + return 0; =20 printk(KERN_INFO "Starting tracer '%s'\n", type->name); /* Do we want this tracer to start on bootup? */ @@ -2420,8 +2414,7 @@ int __init register_tracer(struct tracer *type) /* disable other selftests, since this will break it. */ disable_tracing_selftest("running a tracer"); =20 - out_unlock: - return ret; + return 0; } =20 static void tracing_reset_cpu(struct array_buffer *buf, int cpu) @@ -8963,12 +8956,12 @@ ftrace_trace_snapshot_callback(struct trace_array *= tr, struct ftrace_hash *hash, out_reg: ret =3D tracing_arm_snapshot(tr); if (ret < 0) - goto out; + return ret; =20 ret =3D register_ftrace_function_probe(glob, tr, ops, count); if (ret < 0) tracing_disarm_snapshot(tr); - out: + return ret < 0 ? ret : 0; } =20 @@ -11070,7 +11063,7 @@ __init static int tracer_alloc_buffers(void) BUILD_BUG_ON(TRACE_ITER_LAST_BIT > TRACE_FLAGS_MAX_SIZE); =20 if (!alloc_cpumask_var(&tracing_buffer_mask, GFP_KERNEL)) - goto out; + return -ENOMEM; =20 if (!alloc_cpumask_var(&global_trace.tracing_cpumask, GFP_KERNEL)) goto out_free_buffer_mask; @@ -11188,7 +11181,6 @@ __init static int tracer_alloc_buffers(void) free_cpumask_var(global_trace.tracing_cpumask); out_free_buffer_mask: free_cpumask_var(tracing_buffer_mask); -out: return ret; } =20 --=20 2.47.2 From nobody Sun Oct 5 14:37:50 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 79194214812; Fri, 1 Aug 2025 20:38:36 +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=1754080716; cv=none; b=AQCpZOBQM+IpEjDsHiz0jO1nffo9YyT4FmG0R8sbKLn1RRXJ24EQJWnBRngRsvV9pw8J4cLF5oyw3BZIBiOymol9zYZt/jRYTPaM+kBFM4fjzMZEdK0KO9jYHHOA3xc9AmUpZSJz0S8/mWkBYivaH2VIJ7xJt7AhH39KBTWOpgA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754080716; c=relaxed/simple; bh=cctrR7jatq+pM1SG3SF/xhHgsBAYobbqH/fKsmbXX3k=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=iNk5a2idMmiBvBd9apeAifSAKEBeeagGwsl61Xu4hSZnTd2VITCnetMqQdtXTRBvDUYIHHoxdsp71C/D8ulP7A7h8zxgLOa4Ba3nL8VGiVwmRljAVEfN6THHIoYopLXHF9rXZqSFyktOWKeP4011eur6yMjXPVDmbczjjDSUGdM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=LEbBDZvA; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="LEbBDZvA" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2326FC4CEE7; Fri, 1 Aug 2025 20:38:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1754080716; bh=cctrR7jatq+pM1SG3SF/xhHgsBAYobbqH/fKsmbXX3k=; h=Date:From:To:Cc:Subject:References:From; b=LEbBDZvAnfOGCB0aaDEQ9y2wpM8L8pigaIlahtVspSBIb1gZI2TQ18B4N+6ahTkjS KGkFFzExozb2diTg/XTtizoTJ65KNdk+IWQX008DwNQVLkqjVAUNRj5qcKQ9reNwhW K8XDi1NcE/B8o6ITNL7gviYijjKqWOs1YQRxgIJs2sxb5118b01UisFFrFjyutDnmZ Slj9fSqyaBuNtrneGYn1H8YnaiLyPq/ZrJV8BvQF2a4LexmY1LR/70y70Muh4tiI2I 5yzmec7iYfo68U8xwKZrCf7eTyrEwXizxLYd+7ih6LfpMAX697PbNL91bLAzG5ZpGy g9S//jm5CLofQ== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1uhwWn-00000007ja5-3bIc; Fri, 01 Aug 2025 16:38:57 -0400 Message-ID: <20250801203857.710501021@kernel.org> User-Agent: quilt/0.68 Date: Fri, 01 Aug 2025 16:37:24 -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 Subject: [PATCH v2 2/5] tracing: Add guard(ring_buffer_nest) References: <20250801203722.072085868@kernel.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 Some calls to the tracing ring buffer can happen when the ring buffer is already being written to by the same context (for example, a trace_printk() in between a ring_buffer_lock_reserve() and a ring_buffer_unlock_commit()). In order to not trigger the recursion detection, these functions use ring_buffer_nest_start() and ring_buffer_nest_end(). Create a guard() for these functions so that their use cases can be simplified and not need to use goto for the release. Signed-off-by: Steven Rostedt (Google) --- include/linux/ring_buffer.h | 3 ++ kernel/trace/trace.c | 69 +++++++++++++------------------ kernel/trace/trace_events_synth.c | 6 +-- 3 files changed, 34 insertions(+), 44 deletions(-) diff --git a/include/linux/ring_buffer.h b/include/linux/ring_buffer.h index cd7f0ae26615..8253cb69540c 100644 --- a/include/linux/ring_buffer.h +++ b/include/linux/ring_buffer.h @@ -144,6 +144,9 @@ int ring_buffer_write(struct trace_buffer *buffer, void ring_buffer_nest_start(struct trace_buffer *buffer); void ring_buffer_nest_end(struct trace_buffer *buffer); =20 +DEFINE_GUARD(ring_buffer_nest, struct trace_buffer *, + ring_buffer_nest_start(_T), ring_buffer_nest_end(_T)) + struct ring_buffer_event * ring_buffer_peek(struct trace_buffer *buffer, int cpu, u64 *ts, unsigned long *lost_events); diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 0ec9cab9a812..332487179e1d 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -1160,13 +1160,11 @@ int __trace_array_puts(struct trace_array *tr, unsi= gned long ip, =20 trace_ctx =3D tracing_gen_ctx(); buffer =3D tr->array_buffer.buffer; - ring_buffer_nest_start(buffer); + guard(ring_buffer_nest)(buffer); event =3D __trace_buffer_lock_reserve(buffer, TRACE_PRINT, alloc, trace_ctx); - if (!event) { - size =3D 0; - goto out; - } + if (!event) + return 0; =20 entry =3D ring_buffer_event_data(event); entry->ip =3D ip; @@ -1182,8 +1180,6 @@ int __trace_array_puts(struct trace_array *tr, unsign= ed long ip, =20 __buffer_unlock_commit(buffer, event); ftrace_trace_stack(tr, buffer, trace_ctx, 4, NULL); - out: - ring_buffer_nest_end(buffer); return size; } EXPORT_SYMBOL_GPL(__trace_array_puts); @@ -1213,7 +1209,6 @@ int __trace_bputs(unsigned long ip, const char *str) struct bputs_entry *entry; unsigned int trace_ctx; int size =3D sizeof(struct bputs_entry); - int ret =3D 0; =20 if (!printk_binsafe(tr)) return __trace_puts(ip, str, strlen(str)); @@ -1227,11 +1222,11 @@ int __trace_bputs(unsigned long ip, const char *str) trace_ctx =3D tracing_gen_ctx(); buffer =3D tr->array_buffer.buffer; =20 - ring_buffer_nest_start(buffer); + guard(ring_buffer_nest)(buffer); event =3D __trace_buffer_lock_reserve(buffer, TRACE_BPUTS, size, trace_ctx); if (!event) - goto out; + return 0; =20 entry =3D ring_buffer_event_data(event); entry->ip =3D ip; @@ -1240,10 +1235,7 @@ int __trace_bputs(unsigned long ip, const char *str) __buffer_unlock_commit(buffer, event); ftrace_trace_stack(tr, buffer, trace_ctx, 4, NULL); =20 - ret =3D 1; - out: - ring_buffer_nest_end(buffer); - return ret; + return 1; } EXPORT_SYMBOL_GPL(__trace_bputs); =20 @@ -3397,21 +3389,19 @@ int trace_vbprintk(unsigned long ip, const char *fm= t, va_list args) =20 size =3D sizeof(*entry) + sizeof(u32) * len; buffer =3D tr->array_buffer.buffer; - ring_buffer_nest_start(buffer); - event =3D __trace_buffer_lock_reserve(buffer, TRACE_BPRINT, size, - trace_ctx); - if (!event) - goto out; - entry =3D ring_buffer_event_data(event); - entry->ip =3D ip; - entry->fmt =3D fmt; - - memcpy(entry->buf, tbuffer, sizeof(u32) * len); - __buffer_unlock_commit(buffer, event); - ftrace_trace_stack(tr, buffer, trace_ctx, 6, NULL); + scoped_guard(ring_buffer_nest, buffer) { + event =3D __trace_buffer_lock_reserve(buffer, TRACE_BPRINT, size, + trace_ctx); + if (!event) + goto out_put; + entry =3D ring_buffer_event_data(event); + entry->ip =3D ip; + entry->fmt =3D fmt; =20 -out: - ring_buffer_nest_end(buffer); + memcpy(entry->buf, tbuffer, sizeof(u32) * len); + __buffer_unlock_commit(buffer, event); + ftrace_trace_stack(tr, buffer, trace_ctx, 6, NULL); + } out_put: put_trace_buf(); =20 @@ -3452,20 +3442,19 @@ int __trace_array_vprintk(struct trace_buffer *buff= er, len =3D vscnprintf(tbuffer, TRACE_BUF_SIZE, fmt, args); =20 size =3D sizeof(*entry) + len + 1; - ring_buffer_nest_start(buffer); - event =3D __trace_buffer_lock_reserve(buffer, TRACE_PRINT, size, - trace_ctx); - if (!event) - goto out; - entry =3D ring_buffer_event_data(event); - entry->ip =3D ip; - - memcpy(&entry->buf, tbuffer, len + 1); - __buffer_unlock_commit(buffer, event); - ftrace_trace_stack(printk_trace, buffer, trace_ctx, 6, NULL); + scoped_guard(ring_buffer_nest, buffer) { + event =3D __trace_buffer_lock_reserve(buffer, TRACE_PRINT, size, + trace_ctx); + if (!event) + goto out; + entry =3D ring_buffer_event_data(event); + entry->ip =3D ip; =20 + memcpy(&entry->buf, tbuffer, len + 1); + __buffer_unlock_commit(buffer, event); + ftrace_trace_stack(printk_trace, buffer, trace_ctx, 6, NULL); + } out: - ring_buffer_nest_end(buffer); put_trace_buf(); =20 out_nobuffer: diff --git a/kernel/trace/trace_events_synth.c b/kernel/trace/trace_events_= synth.c index 33cfbd4ed76d..f24ee61f8884 100644 --- a/kernel/trace/trace_events_synth.c +++ b/kernel/trace/trace_events_synth.c @@ -536,12 +536,12 @@ static notrace void trace_event_raw_event_synth(void = *__data, * is being performed within another event. */ buffer =3D trace_file->tr->array_buffer.buffer; - ring_buffer_nest_start(buffer); + guard(ring_buffer_nest)(buffer); =20 entry =3D trace_event_buffer_reserve(&fbuffer, trace_file, sizeof(*entry) + fields_size); if (!entry) - goto out; + return; =20 for (i =3D 0, n_u64 =3D 0; i < event->n_fields; i++) { val_idx =3D var_ref_idx[i]; @@ -584,8 +584,6 @@ static notrace void trace_event_raw_event_synth(void *_= _data, } =20 trace_event_buffer_commit(&fbuffer); -out: - ring_buffer_nest_end(buffer); } =20 static void free_synth_event_print_fmt(struct trace_event_call *call) --=20 2.47.2 From nobody Sun Oct 5 14:37:50 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 B2DEC26C391; Fri, 1 Aug 2025 20:38:36 +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=1754080716; cv=none; b=SpQd+RSt2opJkx485NBEd5+QrtaCmU8Ak6bsCVNR/8WBz8zeexP6pXBCSRyt/3KNsBuffN87qQtAwGs/dX0xwM4efc+sYBfS+bWbDgMAJQCBx+X3jKh5qsffa96krrzPSLOGE5bQR6F1OpZ895WYCl3eDvasYbKv6pRvsRfN73g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754080716; c=relaxed/simple; bh=h3ZdY0iNxRzCloUieHvGpQ7HrTrbG/rgXngnY0goLxc=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=gYwobR/GsCVM/qQ37XN52hVRqRz6fSYh9yXl9cN5X5hEF3hx0SaE6p6lDZjAjRHKmIMXZnxAOZsBk+F33/L56AnDR+BkE1q9v+su4QN1pKAQF82EpApgqmqumSMzCDAzKFud6pVO7SbYctFmaLPE88tqyegAwQm9PSF5TYzJS1Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ghGT/DN+; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ghGT/DN+" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 51A2FC4CEF6; Fri, 1 Aug 2025 20:38:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1754080716; bh=h3ZdY0iNxRzCloUieHvGpQ7HrTrbG/rgXngnY0goLxc=; h=Date:From:To:Cc:Subject:References:From; b=ghGT/DN+zrtPeBGh3NelQisb0govJLD0fbVvHjZnFCqTFEs+mhS+dkTuLyxELGogP slDApOlfTFg3NIDUDZlc8DUOKSVhTBOCp1KeSOHxA/EoP3ICb7YbC5UgJuzX/BXKIr wtAcYa7AWvHAN4vq1lm8ZZqi1eXKMQgwRDBZU8lpv+MPaXbmn2mD/HoEn35+Vf+Br/ fLC8f+BmmxurRowZixGfxA65E4dKkYXMx/9iD3wJZI5z1iPPT1IGQh6kchCpikWzq9 rZNimyhxVu95pF4N6idSs5TSgYGg+++g+0+LDntY/yWsurcTZZ4zFJsDR4up2sLsn2 o+Y56di5i7rKA== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1uhwWo-00000007jaZ-05PI; Fri, 01 Aug 2025 16:38:58 -0400 Message-ID: <20250801203857.879085376@kernel.org> User-Agent: quilt/0.68 Date: Fri, 01 Aug 2025 16:37:25 -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 Subject: [PATCH v2 3/5] tracing: Add guard() around locks and mutexes in trace.c References: <20250801203722.072085868@kernel.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 locations in trace.c that can be simplified by using guards around raw_spin_lock_irqsave, mutexes and preempt disabling. Signed-off-by: Steven Rostedt (Google) --- Changes since v1: https://lore.kernel.org/20250801142526.649674199@kernel.o= rg - Do not use guard(preempt) for trace_event_buffer_lock_reserve() as that returns with preemption enabled between the disable and enable preempt. kernel/trace/trace.c | 144 ++++++++++++++----------------------------- 1 file changed, 46 insertions(+), 98 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 332487179e1d..4299e89ed04e 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -432,15 +432,13 @@ static void ftrace_exports(struct ring_buffer_event *= event, int flag) { struct trace_export *export; =20 - preempt_disable_notrace(); + guard(preempt_notrace)(); =20 export =3D rcu_dereference_raw_check(ftrace_exports_list); while (export) { trace_process_export(export, event, flag); export =3D rcu_dereference_raw_check(export->next); } - - preempt_enable_notrace(); } =20 static inline void @@ -497,27 +495,18 @@ int register_ftrace_export(struct trace_export *expor= t) if (WARN_ON_ONCE(!export->write)) return -1; =20 - mutex_lock(&ftrace_export_lock); + guard(mutex)(&ftrace_export_lock); =20 add_ftrace_export(&ftrace_exports_list, export); =20 - mutex_unlock(&ftrace_export_lock); - return 0; } EXPORT_SYMBOL_GPL(register_ftrace_export); =20 int unregister_ftrace_export(struct trace_export *export) { - int ret; - - mutex_lock(&ftrace_export_lock); - - ret =3D rm_ftrace_export(&ftrace_exports_list, export); - - mutex_unlock(&ftrace_export_lock); - - return ret; + guard(mutex)(&ftrace_export_lock); + return rm_ftrace_export(&ftrace_exports_list, export); } EXPORT_SYMBOL_GPL(unregister_ftrace_export); =20 @@ -640,9 +629,8 @@ void trace_array_put(struct trace_array *this_tr) if (!this_tr) return; =20 - mutex_lock(&trace_types_lock); + guard(mutex)(&trace_types_lock); __trace_array_put(this_tr); - mutex_unlock(&trace_types_lock); } EXPORT_SYMBOL_GPL(trace_array_put); =20 @@ -1424,13 +1412,8 @@ static int tracing_arm_snapshot_locked(struct trace_= array *tr) =20 int tracing_arm_snapshot(struct trace_array *tr) { - int ret; - - mutex_lock(&trace_types_lock); - ret =3D tracing_arm_snapshot_locked(tr); - mutex_unlock(&trace_types_lock); - - return ret; + guard(mutex)(&trace_types_lock); + return tracing_arm_snapshot_locked(tr); } =20 void tracing_disarm_snapshot(struct trace_array *tr) @@ -2483,9 +2466,8 @@ void tracing_reset_all_online_cpus_unlocked(void) =20 void tracing_reset_all_online_cpus(void) { - mutex_lock(&trace_types_lock); + guard(mutex)(&trace_types_lock); tracing_reset_all_online_cpus_unlocked(); - mutex_unlock(&trace_types_lock); } =20 int is_tracing_stopped(void) @@ -2496,18 +2478,17 @@ int is_tracing_stopped(void) static void tracing_start_tr(struct trace_array *tr) { struct trace_buffer *buffer; - unsigned long flags; =20 if (tracing_disabled) return; =20 - raw_spin_lock_irqsave(&tr->start_lock, flags); + guard(raw_spinlock_irqsave)(&tr->start_lock); if (--tr->stop_count) { if (WARN_ON_ONCE(tr->stop_count < 0)) { /* Someone screwed up their debugging */ tr->stop_count =3D 0; } - goto out; + return; } =20 /* Prevent the buffers from switching */ @@ -2524,9 +2505,6 @@ static void tracing_start_tr(struct trace_array *tr) #endif =20 arch_spin_unlock(&tr->max_lock); - - out: - raw_spin_unlock_irqrestore(&tr->start_lock, flags); } =20 /** @@ -2544,11 +2522,10 @@ void tracing_start(void) static void tracing_stop_tr(struct trace_array *tr) { struct trace_buffer *buffer; - unsigned long flags; =20 - raw_spin_lock_irqsave(&tr->start_lock, flags); + guard(raw_spinlock_irqsave)(&tr->start_lock); if (tr->stop_count++) - goto out; + return; =20 /* Prevent the buffers from switching */ arch_spin_lock(&tr->max_lock); @@ -2564,9 +2541,6 @@ static void tracing_stop_tr(struct trace_array *tr) #endif =20 arch_spin_unlock(&tr->max_lock); - - out: - raw_spin_unlock_irqrestore(&tr->start_lock, flags); } =20 /** @@ -2679,12 +2653,12 @@ void trace_buffered_event_enable(void) =20 per_cpu(trace_buffered_event, cpu) =3D event; =20 - preempt_disable(); - if (cpu =3D=3D smp_processor_id() && - __this_cpu_read(trace_buffered_event) !=3D - per_cpu(trace_buffered_event, cpu)) - WARN_ON_ONCE(1); - preempt_enable(); + scoped_guard(preempt,) { + if (cpu =3D=3D smp_processor_id() && + __this_cpu_read(trace_buffered_event) !=3D + per_cpu(trace_buffered_event, cpu)) + WARN_ON_ONCE(1); + } } } =20 @@ -3029,7 +3003,7 @@ static void __ftrace_trace_stack(struct trace_array *= tr, skip++; #endif =20 - preempt_disable_notrace(); + guard(preempt_notrace)(); =20 stackidx =3D __this_cpu_inc_return(ftrace_stack_reserve) - 1; =20 @@ -3087,8 +3061,6 @@ static void __ftrace_trace_stack(struct trace_array *= tr, /* Again, don't let gcc optimize things here */ barrier(); __this_cpu_dec(ftrace_stack_reserve); - preempt_enable_notrace(); - } =20 static inline void ftrace_trace_stack(struct trace_array *tr, @@ -3171,9 +3143,9 @@ ftrace_trace_userstack(struct trace_array *tr, * prevent recursion, since the user stack tracing may * trigger other kernel events. */ - preempt_disable(); + guard(preempt)(); if (__this_cpu_read(user_stack_count)) - goto out; + return; =20 __this_cpu_inc(user_stack_count); =20 @@ -3191,8 +3163,6 @@ ftrace_trace_userstack(struct trace_array *tr, =20 out_drop_count: __this_cpu_dec(user_stack_count); - out: - preempt_enable(); } #else /* CONFIG_USER_STACKTRACE_SUPPORT */ static void ftrace_trace_userstack(struct trace_array *tr, @@ -3374,7 +3344,7 @@ int trace_vbprintk(unsigned long ip, const char *fmt,= va_list args) pause_graph_tracing(); =20 trace_ctx =3D tracing_gen_ctx(); - preempt_disable_notrace(); + guard(preempt_notrace)(); =20 tbuffer =3D get_trace_buf(); if (!tbuffer) { @@ -3406,7 +3376,6 @@ int trace_vbprintk(unsigned long ip, const char *fmt,= va_list args) put_trace_buf(); =20 out_nobuffer: - preempt_enable_notrace(); unpause_graph_tracing(); =20 return len; @@ -3430,7 +3399,7 @@ int __trace_array_vprintk(struct trace_buffer *buffer, pause_graph_tracing(); =20 trace_ctx =3D tracing_gen_ctx(); - preempt_disable_notrace(); + guard(preempt_notrace)(); =20 =20 tbuffer =3D get_trace_buf(); @@ -3458,7 +3427,6 @@ int __trace_array_vprintk(struct trace_buffer *buffer, put_trace_buf(); =20 out_nobuffer: - preempt_enable_notrace(); unpause_graph_tracing(); =20 return len; @@ -4788,20 +4756,16 @@ int tracing_open_file_tr(struct inode *inode, struc= t file *filp) if (ret) return ret; =20 - mutex_lock(&event_mutex); + guard(mutex)(&event_mutex); =20 /* Fail if the file is marked for removal */ if (file->flags & EVENT_FILE_FL_FREED) { trace_array_put(file->tr); - ret =3D -ENODEV; + return -ENODEV; } else { event_file_get(file); } =20 - mutex_unlock(&event_mutex); - if (ret) - return ret; - filp->private_data =3D inode->i_private; =20 return 0; @@ -5945,9 +5909,9 @@ tracing_set_trace_read(struct file *filp, char __user= *ubuf, char buf[MAX_TRACER_SIZE+2]; int r; =20 - mutex_lock(&trace_types_lock); - r =3D sprintf(buf, "%s\n", tr->current_trace->name); - mutex_unlock(&trace_types_lock); + scoped_guard(mutex, &trace_types_lock) { + r =3D sprintf(buf, "%s\n", tr->current_trace->name); + } =20 return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); } @@ -6249,15 +6213,13 @@ int tracing_update_buffers(struct trace_array *tr) { int ret =3D 0; =20 - mutex_lock(&trace_types_lock); + guard(mutex)(&trace_types_lock); =20 update_last_data(tr); =20 if (!tr->ring_buffer_expanded) ret =3D __tracing_resize_ring_buffer(tr, trace_buf_size, RING_BUFFER_ALL_CPUS); - mutex_unlock(&trace_types_lock); - return ret; } =20 @@ -6554,7 +6516,7 @@ static int tracing_open_pipe(struct inode *inode, str= uct file *filp) if (ret) return ret; =20 - mutex_lock(&trace_types_lock); + guard(mutex)(&trace_types_lock); cpu =3D tracing_get_cpu(inode); ret =3D open_pipe_on_cpu(tr, cpu); if (ret) @@ -6598,7 +6560,6 @@ static int tracing_open_pipe(struct inode *inode, str= uct file *filp) =20 tr->trace_ref++; =20 - mutex_unlock(&trace_types_lock); return ret; =20 fail: @@ -6607,7 +6568,6 @@ static int tracing_open_pipe(struct inode *inode, str= uct file *filp) close_pipe_on_cpu(tr, cpu); fail_pipe_on_cpu: __trace_array_put(tr); - mutex_unlock(&trace_types_lock); return ret; } =20 @@ -6616,14 +6576,13 @@ static int tracing_release_pipe(struct inode *inode= , struct file *file) struct trace_iterator *iter =3D file->private_data; struct trace_array *tr =3D inode->i_private; =20 - mutex_lock(&trace_types_lock); + scoped_guard(mutex, &trace_types_lock) { + tr->trace_ref--; =20 - tr->trace_ref--; - - if (iter->trace->pipe_close) - iter->trace->pipe_close(iter); - close_pipe_on_cpu(tr, iter->cpu_file); - mutex_unlock(&trace_types_lock); + if (iter->trace->pipe_close) + iter->trace->pipe_close(iter); + close_pipe_on_cpu(tr, iter->cpu_file); + } =20 free_trace_iter_content(iter); kfree(iter); @@ -7426,7 +7385,7 @@ int tracing_set_clock(struct trace_array *tr, const c= har *clockstr) if (i =3D=3D ARRAY_SIZE(trace_clocks)) return -EINVAL; =20 - mutex_lock(&trace_types_lock); + guard(mutex)(&trace_types_lock); =20 tr->clock_id =3D i; =20 @@ -7450,8 +7409,6 @@ int tracing_set_clock(struct trace_array *tr, const c= har *clockstr) tscratch->clock_id =3D i; } =20 - mutex_unlock(&trace_types_lock); - return 0; } =20 @@ -7503,15 +7460,13 @@ static int tracing_time_stamp_mode_show(struct seq_= file *m, void *v) { struct trace_array *tr =3D m->private; =20 - mutex_lock(&trace_types_lock); + guard(mutex)(&trace_types_lock); =20 if (ring_buffer_time_stamp_abs(tr->array_buffer.buffer)) seq_puts(m, "delta [absolute]\n"); else seq_puts(m, "[delta] absolute\n"); =20 - mutex_unlock(&trace_types_lock); - return 0; } =20 @@ -8099,14 +8054,14 @@ static void clear_tracing_err_log(struct trace_arra= y *tr) { struct tracing_log_err *err, *next; =20 - mutex_lock(&tracing_err_log_lock); + guard(mutex)(&tracing_err_log_lock); + list_for_each_entry_safe(err, next, &tr->err_log, list) { list_del(&err->list); free_tracing_log_err(err); } =20 tr->n_err_log_entries =3D 0; - mutex_unlock(&tracing_err_log_lock); } =20 static void *tracing_err_log_seq_start(struct seq_file *m, loff_t *pos) @@ -8377,7 +8332,7 @@ static int tracing_buffers_release(struct inode *inod= e, struct file *file) struct ftrace_buffer_info *info =3D file->private_data; struct trace_iterator *iter =3D &info->iter; =20 - mutex_lock(&trace_types_lock); + guard(mutex)(&trace_types_lock); =20 iter->tr->trace_ref--; =20 @@ -8388,8 +8343,6 @@ static int tracing_buffers_release(struct inode *inod= e, struct file *file) info->spare_cpu, info->spare); kvfree(info); =20 - mutex_unlock(&trace_types_lock); - return 0; } =20 @@ -8597,14 +8550,13 @@ static long tracing_buffers_ioctl(struct file *file= , unsigned int cmd, unsigned * An ioctl call with cmd 0 to the ring buffer file will wake up all * waiters */ - mutex_lock(&trace_types_lock); + guard(mutex)(&trace_types_lock); =20 /* Make sure the waiters see the new wait_index */ (void)atomic_fetch_inc_release(&iter->wait_index); =20 ring_buffer_wake_waiters(iter->array_buffer->buffer, iter->cpu_file); =20 - mutex_unlock(&trace_types_lock); return 0; } =20 @@ -9094,10 +9046,9 @@ trace_options_write(struct file *filp, const char __= user *ubuf, size_t cnt, return -EINVAL; =20 if (!!(topt->flags->val & topt->opt->bit) !=3D val) { - mutex_lock(&trace_types_lock); + guard(mutex)(&trace_types_lock); ret =3D __set_tracer_option(topt->tr, topt->flags, topt->opt, !val); - mutex_unlock(&trace_types_lock); if (ret) return ret; } @@ -9406,7 +9357,7 @@ rb_simple_write(struct file *filp, const char __user = *ubuf, return ret; =20 if (buffer) { - mutex_lock(&trace_types_lock); + guard(mutex)(&trace_types_lock); if (!!val =3D=3D tracer_tracing_is_on(tr)) { val =3D 0; /* do nothing */ } else if (val) { @@ -9420,7 +9371,6 @@ rb_simple_write(struct file *filp, const char __user = *ubuf, /* Wake up any waiters */ ring_buffer_wake_waiters(buffer, RING_BUFFER_ALL_CPUS); } - mutex_unlock(&trace_types_lock); } =20 (*ppos)++; @@ -9804,10 +9754,9 @@ static void __update_tracer_options(struct trace_arr= ay *tr) =20 static void update_tracer_options(struct trace_array *tr) { - mutex_lock(&trace_types_lock); + guard(mutex)(&trace_types_lock); tracer_options_updated =3D true; __update_tracer_options(tr); - mutex_unlock(&trace_types_lock); } =20 /* Must have trace_types_lock held */ @@ -9829,11 +9778,10 @@ struct trace_array *trace_array_find_get(const char= *instance) { struct trace_array *tr; =20 - mutex_lock(&trace_types_lock); + guard(mutex)(&trace_types_lock); tr =3D trace_array_find(instance); if (tr) tr->ref++; - mutex_unlock(&trace_types_lock); =20 return tr; } --=20 2.47.2 From nobody Sun Oct 5 14:37:50 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 D6CBC28BAB1; Fri, 1 Aug 2025 20:38:36 +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=1754080716; cv=none; b=EtbUGHWt4WM2jAQqxr1ZyuA47TX6ca0h6VSrn/cE+RkeDQ6HGHjAixii5Ex6ur0mL6TgJZirsFo7da7oTKhZeI0EsqXNyu7Ytt+HlHEkVbfDW21giB8fvWRhpOdujCxX4kxO/q5pE6C6+Iz9Etof8DNe61+mr42paJPUqJ2+8Ww= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754080716; c=relaxed/simple; bh=taGLadHbgyKGhx64e1z5+xzIAjnv5MRlLFrrYN0dWf0=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=GDUV0Txej9rDXhHmVUvaWd/T1XDZjnSNAktrqqpQDONuXc/rF/CzPbnJBiaK+lg7C2wmd0ZUYeyWC+RqYHq19jFQu9PZ5yjDM+VihW4vlWzdGq0JoiFx6j3Lg6u8XmPJamiGqpj2lQLxm3Od04jxy6tuwVdaKDlfsZY2yCqdnCc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GLQIt9iS; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="GLQIt9iS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 89AE6C4CEFA; Fri, 1 Aug 2025 20:38:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1754080716; bh=taGLadHbgyKGhx64e1z5+xzIAjnv5MRlLFrrYN0dWf0=; h=Date:From:To:Cc:Subject:References:From; b=GLQIt9iS/9lfzx8MHw7f3PU3/cSxBsjZnmSYFXs0YLkXZNtHbvh54xsOmKH9rK5Ns o19ySfGtSG0e/8D8kpNlI5cQu9YwVodFZWFNiXgBAfJeQe3iEpqLfG/IHJkyiQe5B2 mWipt0mPZvswPqrVD+c4L0a7d41YrMQ9kUdQLRXNQcYD65BOyfDJfsbT/OnaTIUk5E MLHp4snHBeuxrOF64ourUXrgfo0kgpMFHZjDuE8V4DWJvFwyk9qqi3HoCLcop3dAkj aD8CycrQQL3t3AZkT5KlkoMg0oSbAjSz6tFTGmiDMTcutObkILS6sVhd4QFCNMAStx b1W+qVpng3qYA== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1uhwWo-00000007jb3-0mKr; Fri, 01 Aug 2025 16:38:58 -0400 Message-ID: <20250801203858.040892777@kernel.org> User-Agent: quilt/0.68 Date: Fri, 01 Aug 2025 16:37:26 -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 Subject: [PATCH v2 4/5] tracing: Use __free(kfree) in trace.c to remove gotos References: <20250801203722.072085868@kernel.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 a couple of locations that have goto out in trace.c for the only purpose of freeing a variable that was allocated. These can be replaced with __free(kfree). Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace.c | 36 ++++++++++++------------------------ 1 file changed, 12 insertions(+), 24 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 4299e89ed04e..d0b1964648c1 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -5042,7 +5042,7 @@ tracing_cpumask_read(struct file *filp, char __user *= ubuf, size_t count, loff_t *ppos) { struct trace_array *tr =3D file_inode(filp)->i_private; - char *mask_str; + char *mask_str __free(kfree) =3D NULL; int len; =20 len =3D snprintf(NULL, 0, "%*pb\n", @@ -5053,16 +5053,10 @@ tracing_cpumask_read(struct file *filp, char __user= *ubuf, =20 len =3D snprintf(mask_str, len, "%*pb\n", cpumask_pr_args(tr->tracing_cpumask)); - if (len >=3D count) { - count =3D -EINVAL; - goto out_err; - } - count =3D simple_read_from_buffer(ubuf, count, ppos, mask_str, len); - -out_err: - kfree(mask_str); + if (len >=3D count) + return -EINVAL; =20 - return count; + return simple_read_from_buffer(ubuf, count, ppos, mask_str, len); } =20 int tracing_set_cpumask(struct trace_array *tr, @@ -10739,7 +10733,8 @@ ssize_t trace_parse_run_command(struct file *file, = const char __user *buffer, size_t count, loff_t *ppos, int (*createfn)(const char *)) { - char *kbuf, *buf, *tmp; + char *kbuf __free(kfree) =3D NULL; + char *buf, *tmp; int ret =3D 0; size_t done =3D 0; size_t size; @@ -10754,10 +10749,9 @@ ssize_t trace_parse_run_command(struct file *file,= const char __user *buffer, if (size >=3D WRITE_BUFSIZE) size =3D WRITE_BUFSIZE - 1; =20 - if (copy_from_user(kbuf, buffer + done, size)) { - ret =3D -EFAULT; - goto out; - } + if (copy_from_user(kbuf, buffer + done, size)) + return -EFAULT; + kbuf[size] =3D '\0'; buf =3D kbuf; do { @@ -10773,8 +10767,7 @@ ssize_t trace_parse_run_command(struct file *file, = const char __user *buffer, /* This can accept WRITE_BUFSIZE - 2 ('\n' + '\0') */ pr_warn("Line length is too long: Should be less than %d\n", WRITE_BUFSIZE - 2); - ret =3D -EINVAL; - goto out; + return -EINVAL; } } done +=3D size; @@ -10787,17 +10780,12 @@ ssize_t trace_parse_run_command(struct file *file= , const char __user *buffer, =20 ret =3D createfn(buf); if (ret) - goto out; + return ret; buf +=3D size; =20 } while (done < count); } - ret =3D done; - -out: - kfree(kbuf); - - return ret; + return done; } =20 #ifdef CONFIG_TRACER_MAX_TRACE --=20 2.47.2 From nobody Sun Oct 5 14:37:50 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 E862328D821; Fri, 1 Aug 2025 20:38:36 +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=1754080717; cv=none; b=PHQ9DoEFXrcw20VZTCGgwXN5d9PaBWKkD4pMM5U8DNFGEY5g5pxLIGKEmRTgI309vgpEoSXs6aB9L59fZ9icHDBa53ZajrpOnZ1uV5A9YMxpyaLTpemPS9CpDkHC9+moN1sn+Bo0qicuLASGN5QL8ihqvKxI7GIxmurSOT+l1/Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754080717; c=relaxed/simple; bh=jeMxIFQt8cB+r45OB46qo/PPW19UaEPLR2jFap9uz5s=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=kb76L8eQCs5fken2HnunJn0hMmCMnTvGmMwjfIRTJ0uyr9XFhZwDn2Vmxwk/lILwSGYp3/grEnsp67c5lH6iCiWsKsh9q4bL4DyP35E5kT9TNutinhiDw+yHplfoKFGiEuFxnCLiCLyA5ZAWyqxFvMBtlPmcknmCwg4ttB85rLU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=oMr5N3WQ; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="oMr5N3WQ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A0D80C4CEE7; Fri, 1 Aug 2025 20:38:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1754080716; bh=jeMxIFQt8cB+r45OB46qo/PPW19UaEPLR2jFap9uz5s=; h=Date:From:To:Cc:Subject:References:From; b=oMr5N3WQs0siVAlDcZXdHTLZeWEfoq0QyfKIm3WRm+w3zoQKcCE2kKQkNqDiOA7x8 EoFCpRQU6T+1aiPobE19iqwKv+olTIbmzD997ckspAMbYdZqMpsU0J9ktXDMZOaWpn NSeR/HBvAmRjwbJt03bq0R/JIbPwqDyG9F/O4FJYS7licRp8aA1wvuZB4R/AuBqlZS IjgAOp2gOwEbr77zA/uESK9UDxT/CcJS+008891mced/071+QFAhUMoRslgHJegJfM IylLg1XnXxXbZHUvS4M4kBuihJIsxxCN+q3iWK04f4bPpC0SjzhrFGztaoCzWYrgqm eHg1wa3YqA5IA== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1uhwWo-00000007jbY-1THp; Fri, 01 Aug 2025 16:38:58 -0400 Message-ID: <20250801203858.205479143@kernel.org> User-Agent: quilt/0.68 Date: Fri, 01 Aug 2025 16:37:27 -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 Subject: [PATCH v2 5/5] ring-buffer: Convert ring_buffer_write() to use guard(preempt_notrace) References: <20250801203722.072085868@kernel.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 ring_buffer_write() has a goto out to only do a preempt_enable_notrace(). This can be replaced by a guard. Signed-off-by: Steven Rostedt (Google) --- kernel/trace/ring_buffer.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 00fc38d70e86..9d7bf17fbfba 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -4714,26 +4714,26 @@ int ring_buffer_write(struct trace_buffer *buffer, int ret =3D -EBUSY; int cpu; =20 - preempt_disable_notrace(); + guard(preempt_notrace)(); =20 if (atomic_read(&buffer->record_disabled)) - goto out; + return -EBUSY; =20 cpu =3D raw_smp_processor_id(); =20 if (!cpumask_test_cpu(cpu, buffer->cpumask)) - goto out; + return -EBUSY; =20 cpu_buffer =3D buffer->buffers[cpu]; =20 if (atomic_read(&cpu_buffer->record_disabled)) - goto out; + return -EBUSY; =20 if (length > buffer->max_data_size) - goto out; + return -EBUSY; =20 if (unlikely(trace_recursive_lock(cpu_buffer))) - goto out; + return -EBUSY; =20 event =3D rb_reserve_next_event(buffer, cpu_buffer, length); if (!event) @@ -4751,10 +4751,6 @@ int ring_buffer_write(struct trace_buffer *buffer, =20 out_unlock: trace_recursive_unlock(cpu_buffer); - - out: - preempt_enable_notrace(); - return ret; } EXPORT_SYMBOL_GPL(ring_buffer_write); --=20 2.47.2