From nobody Sun Oct 5 14:37:48 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 242EC24678D for ; Sat, 2 Aug 2025 16:28: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=1754152086; cv=none; b=gP0CqZSppR6gMfd4z9q7sGMpBBw9+lZI3jRF5y9/aKoQSvLINVqloU0m2ZfYR2vDLx4Uiv6l2DqENn+3bzQwURiBReL8ah3DuuuTrFB8i1GPOauoVpmAvxsP8a2myKgW4o3LuOTTEMzAx/Le6sEU8ai3KruSyV3xEOTTSYjoKUE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754152086; c=relaxed/simple; bh=d6zCVUfJaDGVqc+4GbmEQMcZiZelLR5EeqAbnbDeC3g=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=sdKgfYEViXQGVfyzaAQi6BGX25QYsTa6uUyo/CHkEuyCbjby8XxQQ2v5XRZTUYMe+t58GzPgoafXcerdYx5cdMY491L1NtkxzETDhYir99w3s8tRMbFh/yGj1+CO6dwkcdDJCHPqL98tq2XgE4hcmD9Sfyfos8UZ3Zt0p7FnjG8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=B2eE/QqN; 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="B2eE/QqN" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A6A8AC4CEF8; Sat, 2 Aug 2025 16:28:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1754152085; bh=d6zCVUfJaDGVqc+4GbmEQMcZiZelLR5EeqAbnbDeC3g=; h=Date:From:To:Cc:Subject:References:From; b=B2eE/QqNzBSgG/c09pPcG9i/j7xU/b5TJfeOoZm67ksawb8L9iHept+TViyDtqjuk zgWKDUtUDbyKUvbrzodZfH4cgLCuxJFvXPDnovYgzZY+wS8rYpbh79EyFwiP9ZVx94 DrpUlr19phNcgcGUJQxhQh/lc5klAo77hy6UtoWGnqHHAwLXg3agb/T6OnOqatSquH ciypdqniffXMGxO6SlW004xyVUow5nUK++RZ4qCnpvUYG2P3gpcKBJbvCahAxkHPQD FHGVG7ybRu0GVI6JtGt3VR1USQYghb/+gROpZTnwIGUPF/4K4kKZkZbofeKdwxC+1+ FDbg1MnfOan8g== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1uiF5x-00000008SWb-0k8Y; Sat, 02 Aug 2025 12:28:29 -0400 Message-ID: <20250802162829.026774840@kernel.org> User-Agent: quilt/0.68 Date: Sat, 02 Aug 2025 12:27:35 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Tomas Glozar , John Kacur , Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton Subject: [for-next][PATCH 1/6] tracing: Remove unneeded goto out logic References: <20250802162734.529626660@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. Cc: Masami Hiramatsu Cc: Mark Rutland Cc: Mathieu Desnoyers Cc: Andrew Morton Link: https://lore.kernel.org/20250801203857.538726745@kernel.org 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:48 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 07A634315A for ; Sat, 2 Aug 2025 16:28: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=1754152086; cv=none; b=pjlVSvqcyyI3ONieQWPx+n3bhtbjluYveGqxNLR/Ht44fhzKuJ5GSawcxD6EB+Rwf0tIBm/VBfh0n3NugdlGWIrcttiB9PZhA1mlKf+DkZrDl2dhFo/+FjpgvgHQ5WKedzCvvcBhHGn0eDvmGD4GmRx2JzrjraJw5fDqpsfRYcM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754152086; c=relaxed/simple; bh=MS/YrGTC2qsv4C9fz/dXbE5ZkGiheJkbJ25/tHGYvXo=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=K1vzlH7luogc4eJQ/hcUJlupmqmDeF1f+7anPTLziu9gS9g8ONSI5u+jZP5XW+c4BvAJHxLLe0jXDduju5a2/Au6XVcqIaXNW+QTxnXGnLxYjCt+Sh5elvJ3s/ocwsCCmNyvg0Rscmn4CGz87B8/MmI3FZuAu8qDh/X8OqUFgAU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=I/WZubFh; 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="I/WZubFh" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B90FEC4CEF4; Sat, 2 Aug 2025 16:28:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1754152085; bh=MS/YrGTC2qsv4C9fz/dXbE5ZkGiheJkbJ25/tHGYvXo=; h=Date:From:To:Cc:Subject:References:From; b=I/WZubFhM24CNClHFdhKT4y7qJbFdDE6KpE2tsduaswRFq7559gKYAHZczFbKGDqT 8TduKGHwF5nh6RMKzs6VD15N2u/pH41mw2s74BZHcgrrj6ojX/yM44zTn0bN2gS/95 SCp6ENgckkPyBz59E7gFPtxb6Po76wkHtNKRzBBGMDA1i5k2hTSZV51FzUh+VM31ZE 1cL/McyTdobANnkoEtErCr1heUl39HhLxhN8oRDOb81afNVh8HcGahULsXunP2zZLU ZIaYBPkXZOXu0MmNDuZ/acLT4qSeMAsjpSvnsvJs1YzWAU3pgOtHBHqS3W5z+926+o tI2u++g371XjA== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1uiF5x-00000008SX6-1Rf3; Sat, 02 Aug 2025 12:28:29 -0400 Message-ID: <20250802162829.198364711@kernel.org> User-Agent: quilt/0.68 Date: Sat, 02 Aug 2025 12:27:36 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Tomas Glozar , John Kacur , Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton Subject: [for-next][PATCH 2/6] tracing: Add guard(ring_buffer_nest) References: <20250802162734.529626660@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. Cc: Masami Hiramatsu Cc: Mark Rutland Cc: Mathieu Desnoyers Cc: Andrew Morton Link: https://lore.kernel.org/20250801203857.710501021@kernel.org 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:48 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 583B02494F0 for ; Sat, 2 Aug 2025 16:28: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=1754152086; cv=none; b=T2l2KVxeWszf4UrneM80is94Ypz9mHLmADO6FBPo6gR9e2aqeXRwqEtWVRuubZGcfpQ/5Eg4z00EE7M7r6QlTkIG9HtY5amCNKpijQpf6K4Dh6/ODYG6iJ7bQrmXtTTMDQkswYfQm1/7iv3pzI2uA5HbstHyqGEfML0ZQbN6YrI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754152086; c=relaxed/simple; bh=vxiBDmyvlA2PS2tmmpe8jWPMSoj+TI8bgMKDT7CY6eQ=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=D78PmcNmcUYpLrT8VVf/AJ53YCDGtXfXd2hCkHBCvms0epOaAPGqDu1apgA43Rs3M+RNXpEdngi7/2N471aN6fcHcSH+wrfNPeeTOd9rXUq02jDGZXZhq3iV6aQuKP+brTpWa9dx0Ao+h9Ktu28HClBhwuSTNkhtZ0WpOLDZrC4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lPNGyY8T; 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="lPNGyY8T" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E1D11C4CEFA; Sat, 2 Aug 2025 16:28:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1754152086; bh=vxiBDmyvlA2PS2tmmpe8jWPMSoj+TI8bgMKDT7CY6eQ=; h=Date:From:To:Cc:Subject:References:From; b=lPNGyY8TTwcY5a3A2eoqRriZ2chpw7WEDlyglEBX0W2FzqLGNQHmP4QaOdwEF9Pmb m7nE1YFWjD5cBdTGWJGWWJXac5SweW2Qz4VxL31V967ty6h9f/ETmS/Q4GzP2RnI19 9CkH3rGbRG+ObDxTTUkmDNdeOlLpn2aM6a6f8K1e/CIr/sL52XYBT0yb55DZ2QINVD J2lzOMBDsfndkjyu+Eq3rrQpuiZlqpJhQGSVIKwpzXjod6XGaAfpOKlo/6bLQjXWqx L3Ho+I1oXwyxDVZ3lxwgsVF2N1N7UYweG8TdjJeENvaWsU2smX3Hvhm+5r7UrN1MpP v+9k56xPBC2ng== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1uiF5x-00000008SXa-29ux; Sat, 02 Aug 2025 12:28:29 -0400 Message-ID: <20250802162829.364996738@kernel.org> User-Agent: quilt/0.68 Date: Sat, 02 Aug 2025 12:27:37 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Tomas Glozar , John Kacur , Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton Subject: [for-next][PATCH 3/6] tracing: Add guard() around locks and mutexes in trace.c References: <20250802162734.529626660@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. Cc: Masami Hiramatsu Cc: Mark Rutland Cc: Mathieu Desnoyers Cc: Andrew Morton Link: https://lore.kernel.org/20250801203857.879085376@kernel.org Signed-off-by: Steven Rostedt (Google) --- 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:48 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 53DE9248F7A for ; Sat, 2 Aug 2025 16:28: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=1754152086; cv=none; b=LZcCsLL3QiflGPjcelzkDIjERBiTGUUERvAbMRCmV6NmGmll7/0R7vN6VcKhcnMh1q6zX7z6Gwm1cKMaEylNDYtBd+/vIKWzDBhf+JWKKAIbuqMdB3bTxRXgcufdly5MLUBLG7xEISHNJ+CJdAAB1t1cEDeqVafTCqtNLIZlEj8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754152086; c=relaxed/simple; bh=/X/3LJzyJmj4yt21bKc0lShFVhAXzhSf2zE7HC3zBXI=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=M54yLDHfoVJA+HhVbiGxpW9xdhMY7fvOElhz0rxrtxW2hP5UhNmiSUokclQ2VsPx7tD69jCW0GljdepBSArONFZR0H4hmC3aDVMsMv0fuBDg4ijBv62Gh9HE6o/YMGJcEqJfxzd0FI9sj8N7yExTNZK8J5lgq/sMbZg3YzQzhgs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ee1n5DcT; 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="ee1n5DcT" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3155DC4CEFB; Sat, 2 Aug 2025 16:28:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1754152086; bh=/X/3LJzyJmj4yt21bKc0lShFVhAXzhSf2zE7HC3zBXI=; h=Date:From:To:Cc:Subject:References:From; b=ee1n5DcTNsLBF5xtrz5TKrFCgLphP1UnlH7e9He+peyGKZVlBLech0qqmHr9Bgi/D YXdOFJKUA7UGLGJ/EoC+BnVvEjCnon1nzkE23REhbKbHz4wEDOFeJXBBGiRcWtfyyi LTJ2Z5yoMlxGzBGyFtLmjC6WqOOe1uqJQPS5D0jojp3218tDURx61Mj1Ob76efPqMK /FTrLEF9el1JrVoYY5Tj4bmtPtboT32RLsi4Bh6ZsylI97pONDsYfpcObbYtZLjLN2 OAx9jJQMRLS/Ojtt4dNOqjGf5mD9Uiv3eljaSVpMbXGVajGHEs1/o4JzlvmW6NGuw8 VpSpOPl+B4Z/A== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1uiF5x-00000008SY5-2rdz; Sat, 02 Aug 2025 12:28:29 -0400 Message-ID: <20250802162829.535471385@kernel.org> User-Agent: quilt/0.68 Date: Sat, 02 Aug 2025 12:27:38 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Tomas Glozar , John Kacur , Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton Subject: [for-next][PATCH 4/6] tracing: Use __free(kfree) in trace.c to remove gotos References: <20250802162734.529626660@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). Cc: Masami Hiramatsu Cc: Mark Rutland Cc: Mathieu Desnoyers Cc: Andrew Morton Link: https://lore.kernel.org/20250801203858.040892777@kernel.org 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:48 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 97D1F24EA90 for ; Sat, 2 Aug 2025 16:28: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=1754152086; cv=none; b=uyzRehfpxOjGojkB/VlzqRQXnk5sCQU3hyUZX78cJihI/p688vahww27tPPp6IE/NbBUA0qrKz+zRhBszeiHcwJWVr0m0pIo9VoPBA8a17SwB+IW/MQoCNyWa5tqME219XPikIjwHiO5JJMO0wqvxCv7H9W+PBoPwKqT5rV9tGA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754152086; c=relaxed/simple; bh=aNxb/w71zKLtiJLZXZgqTtiWzyS5SfOcqnyHy7m43hM=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=JCyhRXH3HQxGH8X4HF+yNIB52Dw8fWlWzbi3tauL04Rdfcm8FRJcjA3Eft3KO7mbVC/bOjOxPhbGRcizRkVZ187xm8fEL60TBnRCiWF80lvgv70Y48kH6a1jdeYw5Wrh/CfH3lyvQC1S/OqDUFuERTA5MnTrxec8cvPMum+uCAc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GrkrbGjl; 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="GrkrbGjl" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3ABCAC4CEFC; Sat, 2 Aug 2025 16:28:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1754152086; bh=aNxb/w71zKLtiJLZXZgqTtiWzyS5SfOcqnyHy7m43hM=; h=Date:From:To:Cc:Subject:References:From; b=GrkrbGjlH21mkaPauHlUyRaU400xdYzQq7FQcQBjMWY4dcWiXaUFnIl59IS/s5gWs ThGjwe8Fkgrgy2lrcP29zAnesPLX1DlxxTj2Q3g29C5mE/ww+DqtLQi7HOj+xvQn08 NBrZiv5ivWfB6Mz/Adgy70xzebl7HipMpu9lHKZGfTHjSIS/GJboGQpoAx2Xd6xHGN DD2OB2Gb+ahBlGOEzf4Wx35LsIUmYlNzz9i6szZ+ouOpsQd+M0AlnK67UHsSOhp4rg zzn/EOXGTqe2adyIeGy+34Vo84Knv9syZU7B804SVIniAyMpYAXTLQQUzrJwKPq2cz d/AEqb3bD/qvA== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1uiF5x-00000008SYa-3YHw; Sat, 02 Aug 2025 12:28:29 -0400 Message-ID: <20250802162829.701657120@kernel.org> User-Agent: quilt/0.68 Date: Sat, 02 Aug 2025 12:27:39 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Tomas Glozar , John Kacur , Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton Subject: [for-next][PATCH 5/6] ring-buffer: Convert ring_buffer_write() to use guard(preempt_notrace) References: <20250802162734.529626660@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. Cc: Masami Hiramatsu Cc: Mark Rutland Cc: Mathieu Desnoyers Cc: Andrew Morton Link: https://lore.kernel.org/20250801203858.205479143@kernel.org 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 From nobody Sun Oct 5 14:37:48 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 9A47824EAB1 for ; Sat, 2 Aug 2025 16:28: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=1754152086; cv=none; b=gDukE1kIMOcl+/3hXsQryIIFh3H6OCeji101Dhz1jpZXIA8laU+HM/dLvwxZP7nnCDxNIDJT6CvfOavO3+e5rKakZZ7Zuv4gVNdw2igJs4ugGnPHMn5I7BA/Bo3BY9HhOkqZjdUMM1qeAm5jzUTkRKkdJ/O5Irje5TkINQTCMwc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754152086; c=relaxed/simple; bh=PKztpBpC175wXXzmRQnvYbRrP5F2lr9XhbjSgxeGSUQ=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=g9moRTUKwZQQIZ23d9zmv7fhMhgR98lLOePskSnJhU+zwG6UjW1ZH9OmB5MIZBanPwIwxfPBZXJtfmOCc886SMlDvCawoK5rixp1AWbmvrr6sD5iaQUtbus77mra1abmpemLCf4WzLuG0p5ZH7XNQBxDPlq9s2P++NDqYBcSS84= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=PQRgsoNf; 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="PQRgsoNf" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7718EC4CEFE; Sat, 2 Aug 2025 16:28:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1754152086; bh=PKztpBpC175wXXzmRQnvYbRrP5F2lr9XhbjSgxeGSUQ=; h=Date:From:To:Cc:Subject:References:From; b=PQRgsoNfyhAIUUDKCgRBYmKTeg9d6DIhlqIYfn7T9sh8enI4FYOqzTByj5DBbS65g SEcyjmx8wYgwr9dNqE9dDzWtvYS1wv/wC3rtBD6H1lI5rUE8CSnIEsMYbDFaK9hj4F D4g2cJlQT/JkxL472Ure68m4pEpmyLnWH59Xsjl5Gdpa/ozRNKavnvUeo/J6whOA55 HogpkGE6y0Vvg1xTsbWneFH2/GhuWpOklnPVkmzyD7CyvCH7mltOhJcdqgWb4DJ+8W AN1vIbX79HC1ncxsu0LHLEkN3gXPcR7BE99iEliUxiZzmoREngNBmW8TsLBk1cd/9B Mbql9yygvhrhA== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1uiF5y-00000008SZ4-03dc; Sat, 02 Aug 2025 12:28:30 -0400 Message-ID: <20250802162829.867162195@kernel.org> User-Agent: quilt/0.68 Date: Sat, 02 Aug 2025 12:27:40 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Tomas Glozar , John Kacur , Masami Hiramatsu , Mathieu Desnoyers , Douglas Raillard , Martin KaFai Lau , Yonghong Song Subject: [for-next][PATCH 6/6] tracing: Have unsigned int function args displayed as hexadecimal References: <20250802162734.529626660@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 Most function arguments that are passed in as unsigned int or unsigned long are better displayed as hexadecimal than normal integer. For example, the functions: static void __create_object(unsigned long ptr, size_t size, int min_count, gfp_t gfp, unsigned int objflags); static bool stack_access_ok(struct unwind_state *state, unsigned long _addr, size_t len); void __local_bh_disable_ip(unsigned long ip, unsigned int cnt); Show up in the trace as: __create_object(ptr=3D-131387050520576, size=3D4096, min_count=3D1, gfp= =3D3264, objflags=3D0) <-kmem_cache_alloc_noprof stack_access_ok(state=3D0xffffc9000233fc98, _addr=3D-60473102566256, le= n=3D8) <-unwind_next_frame __local_bh_disable_ip(ip=3D-2127311112, cnt=3D256) <-handle_softirqs Instead, by displaying unsigned as hexadecimal, they look more like this: __create_object(ptr=3D0xffff8881028d2080, size=3D0x280, min_count=3D1, = gfp=3D0x82820, objflags=3D0x0) <-kmem_cache_alloc_node_noprof stack_access_ok(state=3D0xffffc90000003938, _addr=3D0xffffc90000003930,= len=3D0x8) <-unwind_next_frame __local_bh_disable_ip(ip=3D0xffffffff8133cef8, cnt=3D0x100) <-handle_so= ftirqs Which is much easier to understand as most unsigned longs are usually just pointers. Even the "unsigned int cnt" in __local_bh_disable_ip() looks better as hexadecimal as a lot of flags are passed as unsigned. Changes since v2: https://lore.kernel.org/20250801111453.01502861@gandalf.l= ocal.home - Use btf_int_encoding() instead of open coding it (Martin KaFai Lau) Cc: Masami Hiramatsu Cc: Mathieu Desnoyers Cc: Douglas Raillard Cc: Martin KaFai Lau Link: https://lore.kernel.org/20250801165601.7770d65c@gandalf.local.home Acked-by: Yonghong Song Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace_output.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c index 0b3db02030a7..97db0b0ccf3e 100644 --- a/kernel/trace/trace_output.c +++ b/kernel/trace/trace_output.c @@ -701,6 +701,7 @@ void print_function_args(struct trace_seq *s, unsigned = long *args, struct btf *btf; s32 tid, nr =3D 0; int a, p, x; + u16 encode; =20 trace_seq_printf(s, "("); =20 @@ -744,7 +745,12 @@ void print_function_args(struct trace_seq *s, unsigned= long *args, trace_seq_printf(s, "0x%lx", arg); break; case BTF_KIND_INT: - trace_seq_printf(s, "%ld", arg); + encode =3D btf_int_encoding(t); + /* Print unsigned ints as hex */ + if (encode & BTF_INT_SIGNED) + trace_seq_printf(s, "%ld", arg); + else + trace_seq_printf(s, "0x%lx", arg); break; case BTF_KIND_ENUM: trace_seq_printf(s, "%ld", arg); --=20 2.47.2