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 B299B2472BD; Fri, 1 Aug 2025 14:25:05 +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=1754058305; cv=none; b=lhDCXVU6qzAfAoAmsQQttLncPXkM2bC6uO0ZznZMgfj3WsyvM7oJ+p1+dpmAKOgyNhEUxX+AzgaTiMskk/T44EDk4PTf73XhRYeHZEUg+W/Z4B88G//EFyddShp7B0DJ2jWAxcuvMwlQ/VftPTT8+9OvqLrTfzktlnJdSj7XDmI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754058305; c=relaxed/simple; bh=5vo5nx9SFtWUoShcEz3+vT4OCwsILlL6rhdrqsLDQ20=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=HUSvPLSXd45Fr4I7velo1petTkhCZQphLgvZqhaL1emkR5GGjbWw0vUQdJatR7hQLrWmFmWYSvj+tD4Z98CXnC7NvvrNlseW3pA8aNWQCTCnjSb11PxE0h+/L3Cpx3rYe6rxcMLOwkG0xrpOkfWNffT3s/i4699wSBZ8eYeUBZk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=IyPJspmt; 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="IyPJspmt" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5EC91C4CEF6; Fri, 1 Aug 2025 14:25:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1754058305; bh=5vo5nx9SFtWUoShcEz3+vT4OCwsILlL6rhdrqsLDQ20=; h=Date:From:To:Cc:Subject:References:From; b=IyPJspmtwhAkCDnHkiVIijKdldIQJzDqp4wGNR5h4+YPEqc/Ggu582UPSkCO3Ys8Y /18Nzbvloh07UPPMxK+Fo+dpC1uy+scwwAAUBFTPf3NRi8wwW+3eBwdey2pZXwNC2f Aijd3RJJvLn7OaVmGH+uIJCNhb9/yVEduk0FknIqwTgJ4Te/4FxKxg5vD+QPr1N3AS yjRJo5K4osEDZhdZjrSLfOpwGzTWvvfU8Rno+UK7jcPGwuw2oBY0bgkfEMN/bRnFTk KAJz2ug6sEGYCWZN2NyWKBR98sCjj3c+5X7DIEEhRW9Vi07hCGLy5O7tRLMJ6Nxt5K 7xSv3Siiy7otw== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1uhqhK-00000007Uu7-1wTP; Fri, 01 Aug 2025 10:25:26 -0400 Message-ID: <20250801142526.312104819@kernel.org> User-Agent: quilt/0.68 Date: Fri, 01 Aug 2025 10:25: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 Subject: [PATCH 1/5] tracing: Remove unneeded goto out logic References: <20250801142506.431659758@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 DD422269AFB; Fri, 1 Aug 2025 14:25:05 +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=1754058306; cv=none; b=YNVRler78fOZmesWi+IuMSdv/UxF3oOI9WZw72rETmUiropUu+H6sMSfzv38qzWCyZGWvRaKY1AWtZINyCAyoSIYmKP4hC3gdxwnKP8lxb9yP+ENnXnMdn5m4ZSuJK9WxmWn7AuLssXewIoYpp5dXZYEjnDafvScY4o3Feb4xPQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754058306; c=relaxed/simple; bh=cctrR7jatq+pM1SG3SF/xhHgsBAYobbqH/fKsmbXX3k=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=cDmpLk37sBpNPA7qbM3NciLEIHbXfKtCstzZ1OzfgJNX6KzCYJforh4rLaiMcwa/qhn4GKZiysXjsEs7uePCGme0wblkCe/cJYyswuWGrJK3lcj6gMTrfGnoXTyJ6zlgZKpIB+Un7haBuqohVBiUnm+JYYYfNppCYU+EcHOKtu4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=k6tbdMDd; 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="k6tbdMDd" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 81721C4CEF9; Fri, 1 Aug 2025 14:25:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1754058305; bh=cctrR7jatq+pM1SG3SF/xhHgsBAYobbqH/fKsmbXX3k=; h=Date:From:To:Cc:Subject:References:From; b=k6tbdMDdqnGTzcnHoD69vTcKoAUXj09NndX3nmUIxVklGd7nzO3RXtBnfyzCbyYNS ZfEw0d9V2wMMAHfKzAypyai2M/xqjZER3x9nPVIKAqPY6SHJL4kLCLwDepB0ejyui1 XMAnh/p9HqkYtOKajwHbjAyHc3Qp37upoiraG04F0lQnIZAy9WDkpi+4dCoziV5l9Y V024HjkjXOCH4j4rVAfyrAS3gSpVQjIMTqYm8shemFcWEZTT2/TMx6uTsPmwh2Dfpm Ckde5B1hFF3AMJRxYnWVo+unKza4q5H8Ok4a9ktfMIYVWTs5fXpNWfDD4B9A6za3Xq uvLxOQYZv90Hw== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1uhqhK-00000007Uub-2dKq; Fri, 01 Aug 2025 10:25:26 -0400 Message-ID: <20250801142526.482977630@kernel.org> User-Agent: quilt/0.68 Date: Fri, 01 Aug 2025 10:25: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 Subject: [PATCH 2/5] tracing: Add guard(ring_buffer_nest) References: <20250801142506.431659758@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 2BCDC26CE0D; Fri, 1 Aug 2025 14:25:05 +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=1754058306; cv=none; b=EXyvZlpmnIiwqjC52OuDLNNtZViG85WzjaqllDJrPx15+vFfL0eNMhrmL3dFYtQLNPKiw31dUQj7RQd9g4LjModq9jvEz+4SOPlBvr8UCssAwvrIYi7x5FxMH4SWGiYypSTClGp2RFpdXJb1Pzne4d6tZ0DkW5rMbGFrwsxcQtY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754058306; c=relaxed/simple; bh=oIMcGAVQpLgcLGrTsqVTlsystwRd+WESeX076OkDZsE=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=bqTixpU7zUbsaZvXzJNrLgWwT2X1N2KcQModNiCL7SPadtez2g/71no2B3BZHPtJsuRzgz0e9ZWwnJKZzArlgF/jU9wvd5dXgWtn7KtdVDnM0GMpALxzNHlSNeOSDX0/jmiv75dsjBtrNt+PIX4XHYe7pdVcOpOO6H5mEU63VvE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=gVxQ3bPi; 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="gVxQ3bPi" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A29CEC4CEFC; Fri, 1 Aug 2025 14:25:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1754058305; bh=oIMcGAVQpLgcLGrTsqVTlsystwRd+WESeX076OkDZsE=; h=Date:From:To:Cc:Subject:References:From; b=gVxQ3bPihJvPcZBphMV9typPpmzmCOkARaMjLS1j3kPwn0qryKY0wqc2mIqDErOz/ qeJu08VGC1ALyH/jFkh5mTGpPZAqLYS3/xeMAG9QROgY5FFfL427cpHBKN9bS7o5Ug gWnxPD4c07FB6nxOpwyESj43cxtFrMhDAqyk2DMafFC1kLUHCvXq3qISzq1d9GH3bV naYau2pSHMEjXYPXgK6oVUjaudix3YdijpI06yS8t7tTdv2/mZ2m9he5PpmIedr6TS /lm3sJkI1mJRtF/XuWzoLWiEM7RdhkWfH19GDOB8OZQ8YCNp/44sLx4A65Dp1p4zMB /3F4yMrsPAKRw== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1uhqhK-00000007Uv6-3L2x; Fri, 01 Aug 2025 10:25:26 -0400 Message-ID: <20250801142526.649674199@kernel.org> User-Agent: quilt/0.68 Date: Fri, 01 Aug 2025 10:25:09 -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 3/5] tracing: Add guard() around locks and mutexes in trace.c References: <20250801142506.431659758@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) --- kernel/trace/trace.c | 147 ++++++++++++++----------------------------- 1 file changed, 47 insertions(+), 100 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 332487179e1d..a781c8145ea6 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 @@ -2760,7 +2734,7 @@ trace_event_buffer_lock_reserve(struct trace_buffer *= *current_rb, =20 if (!tr->no_filter_buffering_ref && (trace_file->flags & (EVENT_FILE_FL_SOFT_DISABLED | EVENT_FILE_FL_FIL= TERED))) { - preempt_disable_notrace(); + guard(preempt_notrace)(); /* * Filtering is on, so try to use the per cpu buffer first. * This buffer will simulate a ring_buffer_event, @@ -2809,7 +2783,6 @@ trace_event_buffer_lock_reserve(struct trace_buffer *= *current_rb, this_cpu_dec(trace_buffered_event_cnt); } /* __trace_buffer_lock_reserve() disables preemption */ - preempt_enable_notrace(); } =20 entry =3D __trace_buffer_lock_reserve(*current_rb, type, len, @@ -3029,7 +3002,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 +3060,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 +3142,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 +3162,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 +3343,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 +3375,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 +3398,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 +3426,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 +4755,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 +5908,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 +6212,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 +6515,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 +6559,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 +6567,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 +6575,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 +7384,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 +7408,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 +7459,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 +8053,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 +8331,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 +8342,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 +8549,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 +9045,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 +9356,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 +9370,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 +9753,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 +9777,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 4E3A426CE37; Fri, 1 Aug 2025 14:25:06 +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=1754058306; cv=none; b=YEFKUW+FbBwuB4+OYOLABMjzcHb1qodR0256IEnla9T7FMCnVMLWk2vjkqtb+EniV+uYjTp+KHWqy6NQ7pqpIlQ8pvfkclI6glNRQi80i47O1c8D51VAjHQLujsbi04X3PjI8LjEkDuL5pFlJdwLMaKhKvPdhtLfH3P+0X4V3+8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754058306; c=relaxed/simple; bh=wBWx+Y3RO/IH5YBMOUYqg6RORH0rHuPQ/Pbz7bTXkRg=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=m+U9XLKYi+WV/MYc4Z1nfRi3xvfHvlPjGA9mwZSUAHIs4KDmX4aCP8w9E8uIUadD0bzBxV7NPe5n23/WwkADfXPrqdENg6MVqiOJl0Swud9Y458TWwXetCIlDMDrYRiTsoVwRgwVebjE9yTrEcG1eH46q33JkyocUbnLR5wd1RM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=e5+w/YTQ; 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="e5+w/YTQ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DC770C4CEF6; Fri, 1 Aug 2025 14:25:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1754058305; bh=wBWx+Y3RO/IH5YBMOUYqg6RORH0rHuPQ/Pbz7bTXkRg=; h=Date:From:To:Cc:Subject:References:From; b=e5+w/YTQPbjv5gkqIpOPZyiKKf3yvsQIDBxEy29IFCFKAr9kWO+HQOdd6WkXVjolu F9ZUhNNg8B4k9IBKoiz3LALsjocJ+9+jJT1sayrTTs6apNzcZPJFqJTQdi3akt5rqd a+U9vcVRGrpwcpvBDRtDiaHwPAoT1VR6IvBLjcWxX0gYIBPwyn7XLmc6jEsvONkwJU Lf/RmuFTuHMJgcde/Bq7Kb/UH4iC8ptlcsNyVSqV5oWtQdS2ClgGy25Ll2H0LiijMU 14e6+hXOm09b9lIxN7oqqdPNYArYNZBJdq1883D+ZX1tM7QQZpxkZYM5eyT2RCw9By 5kk7NnlitJgfw== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1uhqhK-00000007Uva-42rV; Fri, 01 Aug 2025 10:25:26 -0400 Message-ID: <20250801142526.816157660@kernel.org> User-Agent: quilt/0.68 Date: Fri, 01 Aug 2025 10:25:10 -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 4/5] tracing: Use __free(kfree) in trace.c to remove gotos References: <20250801142506.431659758@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 a781c8145ea6..e029b92cf379 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -5041,7 +5041,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", @@ -5052,16 +5052,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, @@ -10738,7 +10732,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; @@ -10753,10 +10748,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 { @@ -10772,8 +10766,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; @@ -10786,17 +10779,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 685D326E158; Fri, 1 Aug 2025 14:25:06 +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=1754058306; cv=none; b=iFd1EM6yehbayzPnUpNzFnLfpncHUTvmIwF9OE+6d4XL5X8SbaTwnl0A75J4DzXCF0ENXTJnFsP2hPUqZ4MtKmb0EfksT/zlvBu9kWmPIRzHPWYnmrdj2qF6cGH4a1PmzNb9BOM3VagyieMZXQTaJORHMx4ELApQJ1gSl+tyD8E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754058306; c=relaxed/simple; bh=jeMxIFQt8cB+r45OB46qo/PPW19UaEPLR2jFap9uz5s=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=OytVkXOrxcAUOggD14omF7MVOsJooB780kU9GqEosAfRcH00mMB0eg3mxa9/tnHOqQw+MPHRuvyXCrh0howpX2Mzi/pk0pVP7nub2c5cIAukum4QqsIKrvw6wwImfQWflA3N9clCPkrjXTv5p33fukdRArBf4ctAnVqZCtTAbDo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kxiKpxJi; 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="kxiKpxJi" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1500AC4CEE7; Fri, 1 Aug 2025 14:25:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1754058306; bh=jeMxIFQt8cB+r45OB46qo/PPW19UaEPLR2jFap9uz5s=; h=Date:From:To:Cc:Subject:References:From; b=kxiKpxJiGFJsp8v2V6Jku1U0xZuetV4A0Pf+HC3Ghe2wxZ3VJz1O5gsQgyJI1Jbd0 3R3QMs7hzi3KRcL+a9m1MP9AJ6+1jxq7epaeglCvNdK3bBC/7bBFKlEqu+oBS3WkVt xdC6T0N1wCDLN5WjbhCfuTEJ0vaTjWHECyI0slFyl7D7R4QoZNXbrVYQAvuD7SCO/m +tpYjsV257jslCA+1O0HpDUwx3LeFjntJd5Mt/tdofJEfbmHqENh47q2QBukGMCMIQ e3cMWSKMUyceKIlXsgHe6Z/lfTjxs8fDZdPtXx9vySDP3ko4pW2i2O9HZjWO0BLu7w +eCQmTtvGW+Vg== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1uhqhL-00000007Uw4-0YYM; Fri, 01 Aug 2025 10:25:27 -0400 Message-ID: <20250801142526.984251081@kernel.org> User-Agent: quilt/0.68 Date: Fri, 01 Aug 2025 10:25:11 -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 5/5] ring-buffer: Convert ring_buffer_write() to use guard(preempt_notrace) References: <20250801142506.431659758@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