From nobody Fri Dec 19 17:14:27 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 1DF782FD68F for ; Thu, 6 Nov 2025 21:03:57 +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=1762463038; cv=none; b=LOjQHycimQhLAVtIk1dRVZdkv24UzF9+Ft/aAJXgvqrb7b6fGo032vO0HEXhhj63qamlXYTX9RSrL3Sb2De78mWxvAR8K07T3fco95pkvEFpZuaAd8Ux6CScEg7/Sc69yeh5/dsIeOL3m7pTkf33lkNt6bPIT3afjecGL+1u39k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762463038; c=relaxed/simple; bh=CyFl/hMRm7CEO6e/Lp7GL1yF4dvjt6p3JRXezGXwlK8=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=M3Ww2xQ8v55zxBjf1WKLIonMHJIYHBApCGk9kNjJ6p8fRCkScC+rkn3FxTPxc0YgV0Gkeo5L5ilO/2IED8Ljl0Q+deCtw7rK7xyaR0eIMujOwYYjUOWueaq0Iesty5nmCM6OqSAB0jx/obSxpPckdSvP59ijTf4fGM5PHE24T68= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=XZ7UxeNU; 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="XZ7UxeNU" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 775D5C19424; Thu, 6 Nov 2025 21:03:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1762463037; bh=CyFl/hMRm7CEO6e/Lp7GL1yF4dvjt6p3JRXezGXwlK8=; h=Date:From:To:Cc:Subject:References:From; b=XZ7UxeNUFNuX4IU3MEeI7RkSMS1Q/XZQlFBmAEQ+d3NF01T64hPHezOM//UOk2+f2 A6SNT8x+P3DOvgb9UfvbToGYODcQqMR2O0uIYPdU8bQaiEXUDCf6pEmEycBw4P0fAx pVtUuuTEw9XcWEZJ5sUX9JQ1iRQjrwgz3PM08dIwESM3ginYk9+PMJyWABJ4gK6p7f A0u6AoGHUsFUS9ZSi8WbApaz8X5QuKXj1teDtnSVi9DJdxaSCYWUpUgplmsERBW3I7 wyd3bmha6aseVjAVqh0HTFZklE9it/KZM6BDcsAcweVF340sIYdWkcOvJYe1gc3EFW 1M2svojKumv0g== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1vH79B-000000008BO-0ZeU; Thu, 06 Nov 2025 16:03:57 -0500 Message-ID: <20251106210356.990439042@kernel.org> User-Agent: quilt/0.68 Date: Thu, 06 Nov 2025 16:03:32 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton Subject: [for-next][PATCH 1/7] tracing: Allow tracer to add more than 32 options References: <20251106210331.537317097@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: "Masami Hiramatsu (Google)" Since enum trace_iterator_flags is 32bit, the max number of the option flags is limited to 32 and it is fully used now. To add a new option, we need to expand it. So replace the TRACE_ITER_##flag with TRACE_ITER(flag) macro which is 64bit bitmask. Link: https://lore.kernel.org/all/176187877103.994619.166076000668757232.st= git@devnote2/ Signed-off-by: Masami Hiramatsu (Google) --- kernel/trace/blktrace.c | 6 +- kernel/trace/trace.c | 151 ++++++++++++++------------- kernel/trace/trace.h | 29 +++-- kernel/trace/trace_events.c | 4 +- kernel/trace/trace_events_synth.c | 2 +- kernel/trace/trace_fprobe.c | 6 +- kernel/trace/trace_functions_graph.c | 18 ++-- kernel/trace/trace_irqsoff.c | 30 +++--- kernel/trace/trace_kdb.c | 2 +- kernel/trace/trace_kprobe.c | 6 +- kernel/trace/trace_output.c | 18 ++-- kernel/trace/trace_output.h | 11 ++ kernel/trace/trace_sched_wakeup.c | 24 ++--- kernel/trace/trace_syscalls.c | 2 +- 14 files changed, 159 insertions(+), 150 deletions(-) diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c index 6941145b5058..e21176f396d5 100644 --- a/kernel/trace/blktrace.c +++ b/kernel/trace/blktrace.c @@ -1452,7 +1452,7 @@ static enum print_line_t print_one_line(struct trace_= iterator *iter, =20 t =3D te_blk_io_trace(iter->ent); what =3D (t->action & ((1 << BLK_TC_SHIFT) - 1)) & ~__BLK_TA_CGROUP; - long_act =3D !!(tr->trace_flags & TRACE_ITER_VERBOSE); + long_act =3D !!(tr->trace_flags & TRACE_ITER(VERBOSE)); log_action =3D classic ? &blk_log_action_classic : &blk_log_action; has_cg =3D t->action & __BLK_TA_CGROUP; =20 @@ -1517,9 +1517,9 @@ blk_tracer_set_flag(struct trace_array *tr, u32 old_f= lags, u32 bit, int set) /* don't output context-info for blk_classic output */ if (bit =3D=3D TRACE_BLK_OPT_CLASSIC) { if (set) - tr->trace_flags &=3D ~TRACE_ITER_CONTEXT_INFO; + tr->trace_flags &=3D ~TRACE_ITER(CONTEXT_INFO); else - tr->trace_flags |=3D TRACE_ITER_CONTEXT_INFO; + tr->trace_flags |=3D TRACE_ITER(CONTEXT_INFO); } return 0; } diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index d1e527cf2aae..14e8703a6a53 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -513,21 +513,21 @@ EXPORT_SYMBOL_GPL(unregister_ftrace_export); /* trace_flags holds trace_options default values */ #define TRACE_DEFAULT_FLAGS \ (FUNCTION_DEFAULT_FLAGS | \ - TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK | \ - TRACE_ITER_ANNOTATE | TRACE_ITER_CONTEXT_INFO | \ - TRACE_ITER_RECORD_CMD | TRACE_ITER_OVERWRITE | \ - TRACE_ITER_IRQ_INFO | TRACE_ITER_MARKERS | \ - TRACE_ITER_HASH_PTR | TRACE_ITER_TRACE_PRINTK | \ - TRACE_ITER_COPY_MARKER) + TRACE_ITER(PRINT_PARENT) | TRACE_ITER(PRINTK) | \ + TRACE_ITER(ANNOTATE) | TRACE_ITER(CONTEXT_INFO) | \ + TRACE_ITER(RECORD_CMD) | TRACE_ITER(OVERWRITE) | \ + TRACE_ITER(IRQ_INFO) | TRACE_ITER(MARKERS) | \ + TRACE_ITER(HASH_PTR) | TRACE_ITER(TRACE_PRINTK) | \ + TRACE_ITER(COPY_MARKER)) =20 /* trace_options that are only supported by global_trace */ -#define TOP_LEVEL_TRACE_FLAGS (TRACE_ITER_PRINTK | \ - TRACE_ITER_PRINTK_MSGONLY | TRACE_ITER_RECORD_CMD) +#define TOP_LEVEL_TRACE_FLAGS (TRACE_ITER(PRINTK) | \ + TRACE_ITER(PRINTK_MSGONLY) | TRACE_ITER(RECORD_CMD)) =20 /* trace_flags that are default zero for instances */ #define ZEROED_TRACE_FLAGS \ - (TRACE_ITER_EVENT_FORK | TRACE_ITER_FUNC_FORK | TRACE_ITER_TRACE_PRINTK |= \ - TRACE_ITER_COPY_MARKER) + (TRACE_ITER(EVENT_FORK) | TRACE_ITER(FUNC_FORK) | TRACE_ITER(TRACE_PRINTK= ) | \ + TRACE_ITER(COPY_MARKER)) =20 /* * The global_trace is the descriptor that holds the top-level tracing @@ -558,9 +558,9 @@ static void update_printk_trace(struct trace_array *tr) if (printk_trace =3D=3D tr) return; =20 - printk_trace->trace_flags &=3D ~TRACE_ITER_TRACE_PRINTK; + printk_trace->trace_flags &=3D ~TRACE_ITER(TRACE_PRINTK); printk_trace =3D tr; - tr->trace_flags |=3D TRACE_ITER_TRACE_PRINTK; + tr->trace_flags |=3D TRACE_ITER(TRACE_PRINTK); } =20 /* Returns true if the status of tr changed */ @@ -573,7 +573,7 @@ static bool update_marker_trace(struct trace_array *tr,= int enabled) return false; =20 list_add_rcu(&tr->marker_list, &marker_copies); - tr->trace_flags |=3D TRACE_ITER_COPY_MARKER; + tr->trace_flags |=3D TRACE_ITER(COPY_MARKER); return true; } =20 @@ -581,7 +581,7 @@ static bool update_marker_trace(struct trace_array *tr,= int enabled) return false; =20 list_del_init(&tr->marker_list); - tr->trace_flags &=3D ~TRACE_ITER_COPY_MARKER; + tr->trace_flags &=3D ~TRACE_ITER(COPY_MARKER); return true; } =20 @@ -1139,7 +1139,7 @@ int __trace_array_puts(struct trace_array *tr, unsign= ed long ip, unsigned int trace_ctx; int alloc; =20 - if (!(tr->trace_flags & TRACE_ITER_PRINTK)) + if (!(tr->trace_flags & TRACE_ITER(PRINTK))) return 0; =20 if (unlikely(tracing_selftest_running && tr =3D=3D &global_trace)) @@ -1205,7 +1205,7 @@ int __trace_bputs(unsigned long ip, const char *str) if (!printk_binsafe(tr)) return __trace_puts(ip, str, strlen(str)); =20 - if (!(tr->trace_flags & TRACE_ITER_PRINTK)) + if (!(tr->trace_flags & TRACE_ITER(PRINTK))) return 0; =20 if (unlikely(tracing_selftest_running || tracing_disabled)) @@ -3078,7 +3078,7 @@ static inline void ftrace_trace_stack(struct trace_ar= ray *tr, unsigned int trace_ctx, int skip, struct pt_regs *regs) { - if (!(tr->trace_flags & TRACE_ITER_STACKTRACE)) + if (!(tr->trace_flags & TRACE_ITER(STACKTRACE))) return; =20 __ftrace_trace_stack(tr, buffer, trace_ctx, skip, regs); @@ -3139,7 +3139,7 @@ ftrace_trace_userstack(struct trace_array *tr, struct ring_buffer_event *event; struct userstack_entry *entry; =20 - if (!(tr->trace_flags & TRACE_ITER_USERSTACKTRACE)) + if (!(tr->trace_flags & TRACE_ITER(USERSTACKTRACE))) return; =20 /* @@ -3484,7 +3484,7 @@ int trace_array_printk(struct trace_array *tr, if (tr =3D=3D &global_trace) return 0; =20 - if (!(tr->trace_flags & TRACE_ITER_PRINTK)) + if (!(tr->trace_flags & TRACE_ITER(PRINTK))) return 0; =20 va_start(ap, fmt); @@ -3521,7 +3521,7 @@ int trace_array_printk_buf(struct trace_buffer *buffe= r, int ret; va_list ap; =20 - if (!(printk_trace->trace_flags & TRACE_ITER_PRINTK)) + if (!(printk_trace->trace_flags & TRACE_ITER(PRINTK))) return 0; =20 va_start(ap, fmt); @@ -3791,7 +3791,7 @@ const char *trace_event_format(struct trace_iterator = *iter, const char *fmt) if (WARN_ON_ONCE(!fmt)) return fmt; =20 - if (!iter->tr || iter->tr->trace_flags & TRACE_ITER_HASH_PTR) + if (!iter->tr || iter->tr->trace_flags & TRACE_ITER(HASH_PTR)) return fmt; =20 p =3D fmt; @@ -4113,7 +4113,7 @@ static void print_event_info(struct array_buffer *buf= , struct seq_file *m) static void print_func_help_header(struct array_buffer *buf, struct seq_fi= le *m, unsigned int flags) { - bool tgid =3D flags & TRACE_ITER_RECORD_TGID; + bool tgid =3D flags & TRACE_ITER(RECORD_TGID); =20 print_event_info(buf, m); =20 @@ -4124,7 +4124,7 @@ static void print_func_help_header(struct array_buffe= r *buf, struct seq_file *m, static void print_func_help_header_irq(struct array_buffer *buf, struct se= q_file *m, unsigned int flags) { - bool tgid =3D flags & TRACE_ITER_RECORD_TGID; + bool tgid =3D flags & TRACE_ITER(RECORD_TGID); static const char space[] =3D " "; int prec =3D tgid ? 12 : 2; =20 @@ -4197,7 +4197,7 @@ static void test_cpu_buff_start(struct trace_iterator= *iter) struct trace_seq *s =3D &iter->seq; struct trace_array *tr =3D iter->tr; =20 - if (!(tr->trace_flags & TRACE_ITER_ANNOTATE)) + if (!(tr->trace_flags & TRACE_ITER(ANNOTATE))) return; =20 if (!(iter->iter_flags & TRACE_FILE_ANNOTATE)) @@ -4233,7 +4233,7 @@ static enum print_line_t print_trace_fmt(struct trace= _iterator *iter) =20 event =3D ftrace_find_event(entry->type); =20 - if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) { + if (tr->trace_flags & TRACE_ITER(CONTEXT_INFO)) { if (iter->iter_flags & TRACE_FILE_LAT_FMT) trace_print_lat_context(iter); else @@ -4244,7 +4244,7 @@ static enum print_line_t print_trace_fmt(struct trace= _iterator *iter) return TRACE_TYPE_PARTIAL_LINE; =20 if (event) { - if (tr->trace_flags & TRACE_ITER_FIELDS) + if (tr->trace_flags & TRACE_ITER(FIELDS)) return print_event_fields(iter, event); /* * For TRACE_EVENT() events, the print_fmt is not @@ -4272,7 +4272,7 @@ static enum print_line_t print_raw_fmt(struct trace_i= terator *iter) =20 entry =3D iter->ent; =20 - if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) + if (tr->trace_flags & TRACE_ITER(CONTEXT_INFO)) trace_seq_printf(s, "%d %d %llu ", entry->pid, iter->cpu, iter->ts); =20 @@ -4298,7 +4298,7 @@ static enum print_line_t print_hex_fmt(struct trace_i= terator *iter) =20 entry =3D iter->ent; =20 - if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) { + if (tr->trace_flags & TRACE_ITER(CONTEXT_INFO)) { SEQ_PUT_HEX_FIELD(s, entry->pid); SEQ_PUT_HEX_FIELD(s, iter->cpu); SEQ_PUT_HEX_FIELD(s, iter->ts); @@ -4327,7 +4327,7 @@ static enum print_line_t print_bin_fmt(struct trace_i= terator *iter) =20 entry =3D iter->ent; =20 - if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) { + if (tr->trace_flags & TRACE_ITER(CONTEXT_INFO)) { SEQ_PUT_FIELD(s, entry->pid); SEQ_PUT_FIELD(s, iter->cpu); SEQ_PUT_FIELD(s, iter->ts); @@ -4398,27 +4398,27 @@ enum print_line_t print_trace_line(struct trace_ite= rator *iter) } =20 if (iter->ent->type =3D=3D TRACE_BPUTS && - trace_flags & TRACE_ITER_PRINTK && - trace_flags & TRACE_ITER_PRINTK_MSGONLY) + trace_flags & TRACE_ITER(PRINTK) && + trace_flags & TRACE_ITER(PRINTK_MSGONLY)) return trace_print_bputs_msg_only(iter); =20 if (iter->ent->type =3D=3D TRACE_BPRINT && - trace_flags & TRACE_ITER_PRINTK && - trace_flags & TRACE_ITER_PRINTK_MSGONLY) + trace_flags & TRACE_ITER(PRINTK) && + trace_flags & TRACE_ITER(PRINTK_MSGONLY)) return trace_print_bprintk_msg_only(iter); =20 if (iter->ent->type =3D=3D TRACE_PRINT && - trace_flags & TRACE_ITER_PRINTK && - trace_flags & TRACE_ITER_PRINTK_MSGONLY) + trace_flags & TRACE_ITER(PRINTK) && + trace_flags & TRACE_ITER(PRINTK_MSGONLY)) return trace_print_printk_msg_only(iter); =20 - if (trace_flags & TRACE_ITER_BIN) + if (trace_flags & TRACE_ITER(BIN)) return print_bin_fmt(iter); =20 - if (trace_flags & TRACE_ITER_HEX) + if (trace_flags & TRACE_ITER(HEX)) return print_hex_fmt(iter); =20 - if (trace_flags & TRACE_ITER_RAW) + if (trace_flags & TRACE_ITER(RAW)) return print_raw_fmt(iter); =20 return print_trace_fmt(iter); @@ -4436,7 +4436,7 @@ void trace_latency_header(struct seq_file *m) if (iter->iter_flags & TRACE_FILE_LAT_FMT) print_trace_header(m, iter); =20 - if (!(tr->trace_flags & TRACE_ITER_VERBOSE)) + if (!(tr->trace_flags & TRACE_ITER(VERBOSE))) print_lat_help_header(m); } =20 @@ -4446,7 +4446,7 @@ void trace_default_header(struct seq_file *m) struct trace_array *tr =3D iter->tr; unsigned long trace_flags =3D tr->trace_flags; =20 - if (!(trace_flags & TRACE_ITER_CONTEXT_INFO)) + if (!(trace_flags & TRACE_ITER(CONTEXT_INFO))) return; =20 if (iter->iter_flags & TRACE_FILE_LAT_FMT) { @@ -4454,11 +4454,11 @@ void trace_default_header(struct seq_file *m) if (trace_empty(iter)) return; print_trace_header(m, iter); - if (!(trace_flags & TRACE_ITER_VERBOSE)) + if (!(trace_flags & TRACE_ITER(VERBOSE))) print_lat_help_header(m); } else { - if (!(trace_flags & TRACE_ITER_VERBOSE)) { - if (trace_flags & TRACE_ITER_IRQ_INFO) + if (!(trace_flags & TRACE_ITER(VERBOSE))) { + if (trace_flags & TRACE_ITER(IRQ_INFO)) print_func_help_header_irq(iter->array_buffer, m, trace_flags); else @@ -4682,7 +4682,7 @@ __tracing_open(struct inode *inode, struct file *file= , bool snapshot) * If pause-on-trace is enabled, then stop the trace while * dumping, unless this is the "snapshot" file */ - if (!iter->snapshot && (tr->trace_flags & TRACE_ITER_PAUSE_ON_TRACE)) + if (!iter->snapshot && (tr->trace_flags & TRACE_ITER(PAUSE_ON_TRACE))) tracing_stop_tr(tr); =20 if (iter->cpu_file =3D=3D RING_BUFFER_ALL_CPUS) { @@ -4876,7 +4876,7 @@ static int tracing_open(struct inode *inode, struct f= ile *file) iter =3D __tracing_open(inode, file, false); if (IS_ERR(iter)) ret =3D PTR_ERR(iter); - else if (tr->trace_flags & TRACE_ITER_LATENCY_FMT) + else if (tr->trace_flags & TRACE_ITER(LATENCY_FMT)) iter->iter_flags |=3D TRACE_FILE_LAT_FMT; } =20 @@ -5148,7 +5148,7 @@ static int tracing_trace_options_show(struct seq_file= *m, void *v) trace_opts =3D tr->current_trace->flags->opts; =20 for (i =3D 0; trace_options[i]; i++) { - if (tr->trace_flags & (1 << i)) + if (tr->trace_flags & (1ULL << i)) seq_printf(m, "%s\n", trace_options[i]); else seq_printf(m, "no%s\n", trace_options[i]); @@ -5201,20 +5201,20 @@ static int set_tracer_option(struct trace_array *tr= , char *cmp, int neg) } =20 /* Some tracers require overwrite to stay enabled */ -int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set) +int trace_keep_overwrite(struct tracer *tracer, u64 mask, int set) { - if (tracer->enabled && (mask & TRACE_ITER_OVERWRITE) && !set) + if (tracer->enabled && (mask & TRACE_ITER(OVERWRITE)) && !set) return -1; =20 return 0; } =20 -int set_tracer_flag(struct trace_array *tr, unsigned int mask, int enabled) +int set_tracer_flag(struct trace_array *tr, u64 mask, int enabled) { - if ((mask =3D=3D TRACE_ITER_RECORD_TGID) || - (mask =3D=3D TRACE_ITER_RECORD_CMD) || - (mask =3D=3D TRACE_ITER_TRACE_PRINTK) || - (mask =3D=3D TRACE_ITER_COPY_MARKER)) + if ((mask =3D=3D TRACE_ITER(RECORD_TGID)) || + (mask =3D=3D TRACE_ITER(RECORD_CMD)) || + (mask =3D=3D TRACE_ITER(TRACE_PRINTK)) || + (mask =3D=3D TRACE_ITER(COPY_MARKER))) lockdep_assert_held(&event_mutex); =20 /* do nothing if flag is already set */ @@ -5226,7 +5226,7 @@ int set_tracer_flag(struct trace_array *tr, unsigned = int mask, int enabled) if (tr->current_trace->flag_changed(tr, mask, !!enabled)) return -EINVAL; =20 - if (mask =3D=3D TRACE_ITER_TRACE_PRINTK) { + if (mask =3D=3D TRACE_ITER(TRACE_PRINTK)) { if (enabled) { update_printk_trace(tr); } else { @@ -5245,7 +5245,7 @@ int set_tracer_flag(struct trace_array *tr, unsigned = int mask, int enabled) } } =20 - if (mask =3D=3D TRACE_ITER_COPY_MARKER) + if (mask =3D=3D TRACE_ITER(COPY_MARKER)) update_marker_trace(tr, enabled); =20 if (enabled) @@ -5253,33 +5253,33 @@ int set_tracer_flag(struct trace_array *tr, unsigne= d int mask, int enabled) else tr->trace_flags &=3D ~mask; =20 - if (mask =3D=3D TRACE_ITER_RECORD_CMD) + if (mask =3D=3D TRACE_ITER(RECORD_CMD)) trace_event_enable_cmd_record(enabled); =20 - if (mask =3D=3D TRACE_ITER_RECORD_TGID) { + if (mask =3D=3D TRACE_ITER(RECORD_TGID)) { =20 if (trace_alloc_tgid_map() < 0) { - tr->trace_flags &=3D ~TRACE_ITER_RECORD_TGID; + tr->trace_flags &=3D ~TRACE_ITER(RECORD_TGID); return -ENOMEM; } =20 trace_event_enable_tgid_record(enabled); } =20 - if (mask =3D=3D TRACE_ITER_EVENT_FORK) + if (mask =3D=3D TRACE_ITER(EVENT_FORK)) trace_event_follow_fork(tr, enabled); =20 - if (mask =3D=3D TRACE_ITER_FUNC_FORK) + if (mask =3D=3D TRACE_ITER(FUNC_FORK)) ftrace_pid_follow_fork(tr, enabled); =20 - if (mask =3D=3D TRACE_ITER_OVERWRITE) { + if (mask =3D=3D TRACE_ITER(OVERWRITE)) { ring_buffer_change_overwrite(tr->array_buffer.buffer, enabled); #ifdef CONFIG_TRACER_MAX_TRACE ring_buffer_change_overwrite(tr->max_buffer.buffer, enabled); #endif } =20 - if (mask =3D=3D TRACE_ITER_PRINTK) { + if (mask =3D=3D TRACE_ITER(PRINTK)) { trace_printk_start_stop_comm(enabled); trace_printk_control(enabled); } @@ -5311,7 +5311,7 @@ int trace_set_options(struct trace_array *tr, char *o= ption) if (ret < 0) ret =3D set_tracer_option(tr, cmp, neg); else - ret =3D set_tracer_flag(tr, 1 << ret, !neg); + ret =3D set_tracer_flag(tr, 1ULL << ret, !neg); =20 mutex_unlock(&trace_types_lock); mutex_unlock(&event_mutex); @@ -6532,7 +6532,7 @@ static int tracing_open_pipe(struct inode *inode, str= uct file *filp) /* trace pipe does not show start of buffer */ cpumask_setall(iter->started); =20 - if (tr->trace_flags & TRACE_ITER_LATENCY_FMT) + if (tr->trace_flags & TRACE_ITER(LATENCY_FMT)) iter->iter_flags |=3D TRACE_FILE_LAT_FMT; =20 /* Output in nanoseconds only if we are using a clock in nanoseconds. */ @@ -6593,7 +6593,7 @@ trace_poll(struct trace_iterator *iter, struct file *= filp, poll_table *poll_tabl if (trace_buffer_iter(iter, iter->cpu_file)) return EPOLLIN | EPOLLRDNORM; =20 - if (tr->trace_flags & TRACE_ITER_BLOCK) + if (tr->trace_flags & TRACE_ITER(BLOCK)) /* * Always select as readable when in blocking mode */ @@ -7145,7 +7145,7 @@ tracing_free_buffer_release(struct inode *inode, stru= ct file *filp) struct trace_array *tr =3D inode->i_private; =20 /* disable tracing ? */ - if (tr->trace_flags & TRACE_ITER_STOP_ON_FREE) + if (tr->trace_flags & TRACE_ITER(STOP_ON_FREE)) tracer_tracing_off(tr); /* resize the ring buffer to 0 */ tracing_resize_ring_buffer(tr, 0, RING_BUFFER_ALL_CPUS); @@ -7395,7 +7395,7 @@ tracing_mark_write(struct file *filp, const char __us= er *ubuf, if (tracing_disabled) return -EINVAL; =20 - if (!(tr->trace_flags & TRACE_ITER_MARKERS)) + if (!(tr->trace_flags & TRACE_ITER(MARKERS))) return -EINVAL; =20 if ((ssize_t)cnt < 0) @@ -7479,7 +7479,7 @@ tracing_mark_raw_write(struct file *filp, const char = __user *ubuf, if (tracing_disabled) return -EINVAL; =20 - if (!(tr->trace_flags & TRACE_ITER_MARKERS)) + if (!(tr->trace_flags & TRACE_ITER(MARKERS))) return -EINVAL; =20 /* The marker must at least have a tag id */ @@ -9305,7 +9305,7 @@ trace_options_core_read(struct file *filp, char __use= r *ubuf, size_t cnt, =20 get_tr_index(tr_index, &tr, &index); =20 - if (tr->trace_flags & (1 << index)) + if (tr->trace_flags & (1ULL << index)) buf =3D "1\n"; else buf =3D "0\n"; @@ -9334,7 +9334,7 @@ trace_options_core_write(struct file *filp, const cha= r __user *ubuf, size_t cnt, =20 mutex_lock(&event_mutex); mutex_lock(&trace_types_lock); - ret =3D set_tracer_flag(tr, 1 << index, val); + ret =3D set_tracer_flag(tr, 1ULL << index, val); mutex_unlock(&trace_types_lock); mutex_unlock(&event_mutex); =20 @@ -9498,8 +9498,9 @@ static void create_trace_options_dir(struct trace_arr= ay *tr) =20 for (i =3D 0; trace_options[i]; i++) { if (top_level || - !((1 << i) & TOP_LEVEL_TRACE_FLAGS)) + !((1ULL << i) & TOP_LEVEL_TRACE_FLAGS)) { create_trace_option_core_file(tr, trace_options[i], i); + } } } =20 @@ -9820,7 +9821,7 @@ allocate_trace_buffer(struct trace_array *tr, struct = array_buffer *buf, int size struct trace_scratch *tscratch; unsigned int scratch_size =3D 0; =20 - rb_flags =3D tr->trace_flags & TRACE_ITER_OVERWRITE ? RB_FL_OVERWRITE : 0; + rb_flags =3D tr->trace_flags & TRACE_ITER(OVERWRITE) ? RB_FL_OVERWRITE : = 0; =20 buf->tr =3D tr; =20 @@ -10183,7 +10184,7 @@ static int __remove_instance(struct trace_array *tr) /* Disable all the flags that were enabled coming in */ for (i =3D 0; i < TRACE_FLAGS_MAX_SIZE; i++) { if ((1 << i) & ZEROED_TRACE_FLAGS) - set_tracer_flag(tr, 1 << i, 0); + set_tracer_flag(tr, 1ULL << i, 0); } =20 if (printk_trace =3D=3D tr) @@ -10773,10 +10774,10 @@ static void ftrace_dump_one(struct trace_array *t= r, enum ftrace_dump_mode dump_m /* While dumping, do not allow the buffer to be enable */ tracer_tracing_disable(tr); =20 - old_userobj =3D tr->trace_flags & TRACE_ITER_SYM_USEROBJ; + old_userobj =3D tr->trace_flags & TRACE_ITER(SYM_USEROBJ); =20 /* don't look at user memory in panic mode */ - tr->trace_flags &=3D ~TRACE_ITER_SYM_USEROBJ; + tr->trace_flags &=3D ~TRACE_ITER(SYM_USEROBJ); =20 if (dump_mode =3D=3D DUMP_ORIG) iter.cpu_file =3D raw_smp_processor_id(); diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index 85eabb454bee..8c99136619bf 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@ -216,7 +216,7 @@ struct array_buffer { int cpu; }; =20 -#define TRACE_FLAGS_MAX_SIZE 32 +#define TRACE_FLAGS_MAX_SIZE 64 =20 struct trace_options { struct tracer *tracer; @@ -390,7 +390,7 @@ struct trace_array { int buffer_percent; unsigned int n_err_log_entries; struct tracer *current_trace; - unsigned int trace_flags; + u64 trace_flags; unsigned char trace_flags_index[TRACE_FLAGS_MAX_SIZE]; unsigned int flags; raw_spinlock_t start_lock; @@ -631,7 +631,7 @@ struct tracer { u32 old_flags, u32 bit, int set); /* Return 0 if OK with change, else return non-zero */ int (*flag_changed)(struct trace_array *tr, - u32 mask, int set); + u64 mask, int set); struct tracer *next; struct tracer_flags *flags; int enabled; @@ -1345,11 +1345,11 @@ extern int trace_get_user(struct trace_parser *pars= er, const char __user *ubuf, # define FUNCTION_FLAGS \ C(FUNCTION, "function-trace"), \ C(FUNC_FORK, "function-fork"), -# define FUNCTION_DEFAULT_FLAGS TRACE_ITER_FUNCTION +# define FUNCTION_DEFAULT_FLAGS TRACE_ITER(FUNCTION) #else # define FUNCTION_FLAGS # define FUNCTION_DEFAULT_FLAGS 0UL -# define TRACE_ITER_FUNC_FORK 0UL +# define TRACE_ITER_FUNC_FORK_BIT -1 #endif =20 #ifdef CONFIG_STACKTRACE @@ -1391,7 +1391,7 @@ extern int trace_get_user(struct trace_parser *parser= , const char __user *ubuf, C(MARKERS, "markers"), \ C(EVENT_FORK, "event-fork"), \ C(TRACE_PRINTK, "trace_printk_dest"), \ - C(COPY_MARKER, "copy_trace_marker"),\ + C(COPY_MARKER, "copy_trace_marker"), \ C(PAUSE_ON_TRACE, "pause-on-trace"), \ C(HASH_PTR, "hash-ptr"), /* Print hashed pointer */ \ FUNCTION_FLAGS \ @@ -1413,20 +1413,17 @@ enum trace_iterator_bits { }; =20 /* - * By redefining C, we can make TRACE_FLAGS a list of masks that - * use the bits as defined above. + * And use TRACE_ITER(flag) to define the bit masks. */ -#undef C -#define C(a, b) TRACE_ITER_##a =3D (1 << TRACE_ITER_##a##_BIT) - -enum trace_iterator_flags { TRACE_FLAGS }; +#define TRACE_ITER(flag) \ + (TRACE_ITER_##flag##_BIT < 0 ? 0 : 1ULL << (TRACE_ITER_##flag##_BIT)) =20 /* * TRACE_ITER_SYM_MASK masks the options in trace_flags that * control the output of kernel symbols. */ #define TRACE_ITER_SYM_MASK \ - (TRACE_ITER_PRINT_PARENT|TRACE_ITER_SYM_OFFSET|TRACE_ITER_SYM_ADDR) + (TRACE_ITER(PRINT_PARENT)|TRACE_ITER(SYM_OFFSET)|TRACE_ITER(SYM_ADDR)) =20 extern struct tracer nop_trace; =20 @@ -1435,7 +1432,7 @@ extern int enable_branch_tracing(struct trace_array *= tr); extern void disable_branch_tracing(void); static inline int trace_branch_enable(struct trace_array *tr) { - if (tr->trace_flags & TRACE_ITER_BRANCH) + if (tr->trace_flags & TRACE_ITER(BRANCH)) return enable_branch_tracing(tr); return 0; } @@ -2064,8 +2061,8 @@ extern const char *__stop___tracepoint_str[]; =20 void trace_printk_control(bool enabled); void trace_printk_start_comm(void); -int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set); -int set_tracer_flag(struct trace_array *tr, unsigned int mask, int enabled= ); +int trace_keep_overwrite(struct tracer *tracer, u64 mask, int set); +int set_tracer_flag(struct trace_array *tr, u64 mask, int enabled); =20 /* Used from boot time tracer */ extern int trace_set_options(struct trace_array *tr, char *option); diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index e00da4182deb..9b07ad9eb284 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c @@ -845,13 +845,13 @@ static int __ftrace_event_enable_disable(struct trace= _event_file *file, if (soft_disable) set_bit(EVENT_FILE_FL_SOFT_DISABLED_BIT, &file->flags); =20 - if (tr->trace_flags & TRACE_ITER_RECORD_CMD) { + if (tr->trace_flags & TRACE_ITER(RECORD_CMD)) { cmd =3D true; tracing_start_cmdline_record(); set_bit(EVENT_FILE_FL_RECORDED_CMD_BIT, &file->flags); } =20 - if (tr->trace_flags & TRACE_ITER_RECORD_TGID) { + if (tr->trace_flags & TRACE_ITER(RECORD_TGID)) { tgid =3D true; tracing_start_tgid_record(); set_bit(EVENT_FILE_FL_RECORDED_TGID_BIT, &file->flags); diff --git a/kernel/trace/trace_events_synth.c b/kernel/trace/trace_events_= synth.c index f24ee61f8884..2f19bbe73d27 100644 --- a/kernel/trace/trace_events_synth.c +++ b/kernel/trace/trace_events_synth.c @@ -359,7 +359,7 @@ static enum print_line_t print_synth_event(struct trace= _iterator *iter, fmt =3D synth_field_fmt(se->fields[i]->type); =20 /* parameter types */ - if (tr && tr->trace_flags & TRACE_ITER_VERBOSE) + if (tr && tr->trace_flags & TRACE_ITER(VERBOSE)) trace_seq_printf(s, "%s ", fmt); =20 snprintf(print_fmt, sizeof(print_fmt), "%%s=3D%s%%s", fmt); diff --git a/kernel/trace/trace_fprobe.c b/kernel/trace/trace_fprobe.c index ad9d6347b5fa..53e2325800e0 100644 --- a/kernel/trace/trace_fprobe.c +++ b/kernel/trace/trace_fprobe.c @@ -631,7 +631,7 @@ print_fentry_event(struct trace_iterator *iter, int fla= gs, =20 trace_seq_printf(s, "%s: (", trace_probe_name(tp)); =20 - if (!seq_print_ip_sym(s, field->ip, flags | TRACE_ITER_SYM_OFFSET)) + if (!seq_print_ip_sym_offset(s, field->ip, flags)) goto out; =20 trace_seq_putc(s, ')'); @@ -661,12 +661,12 @@ print_fexit_event(struct trace_iterator *iter, int fl= ags, =20 trace_seq_printf(s, "%s: (", trace_probe_name(tp)); =20 - if (!seq_print_ip_sym(s, field->ret_ip, flags | TRACE_ITER_SYM_OFFSET)) + if (!seq_print_ip_sym_offset(s, field->ret_ip, flags)) goto out; =20 trace_seq_puts(s, " <- "); =20 - if (!seq_print_ip_sym(s, field->func, flags & ~TRACE_ITER_SYM_OFFSET)) + if (!seq_print_ip_sym_no_offset(s, field->func, flags)) goto out; =20 trace_seq_putc(s, ')'); diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_func= tions_graph.c index a7f4b9a47a71..fe9607edc8f9 100644 --- a/kernel/trace/trace_functions_graph.c +++ b/kernel/trace/trace_functions_graph.c @@ -703,7 +703,7 @@ print_graph_irq(struct trace_iterator *iter, unsigned l= ong addr, addr >=3D (unsigned long)__irqentry_text_end) return; =20 - if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) { + if (tr->trace_flags & TRACE_ITER(CONTEXT_INFO)) { /* Absolute time */ if (flags & TRACE_GRAPH_PRINT_ABS_TIME) print_graph_abs_time(iter->ts, s); @@ -723,7 +723,7 @@ print_graph_irq(struct trace_iterator *iter, unsigned l= ong addr, } =20 /* Latency format */ - if (tr->trace_flags & TRACE_ITER_LATENCY_FMT) + if (tr->trace_flags & TRACE_ITER(LATENCY_FMT)) print_graph_lat_fmt(s, ent); } =20 @@ -777,7 +777,7 @@ print_graph_duration(struct trace_array *tr, unsigned l= ong long duration, struct trace_seq *s, u32 flags) { if (!(flags & TRACE_GRAPH_PRINT_DURATION) || - !(tr->trace_flags & TRACE_ITER_CONTEXT_INFO)) + !(tr->trace_flags & TRACE_ITER(CONTEXT_INFO))) return; =20 /* No real adata, just filling the column with spaces */ @@ -818,7 +818,7 @@ static void print_graph_retaddr(struct trace_seq *s, st= ruct fgraph_retaddr_ent_e trace_seq_puts(s, " /*"); =20 trace_seq_puts(s, " <-"); - seq_print_ip_sym(s, entry->graph_ent.retaddr, trace_flags | TRACE_ITER_SY= M_OFFSET); + seq_print_ip_sym_offset(s, entry->graph_ent.retaddr, trace_flags); =20 if (comment) trace_seq_puts(s, " */"); @@ -1054,7 +1054,7 @@ print_graph_prologue(struct trace_iterator *iter, str= uct trace_seq *s, /* Interrupt */ print_graph_irq(iter, addr, type, cpu, ent->pid, flags); =20 - if (!(tr->trace_flags & TRACE_ITER_CONTEXT_INFO)) + if (!(tr->trace_flags & TRACE_ITER(CONTEXT_INFO))) return; =20 /* Absolute time */ @@ -1076,7 +1076,7 @@ print_graph_prologue(struct trace_iterator *iter, str= uct trace_seq *s, } =20 /* Latency format */ - if (tr->trace_flags & TRACE_ITER_LATENCY_FMT) + if (tr->trace_flags & TRACE_ITER(LATENCY_FMT)) print_graph_lat_fmt(s, ent); =20 return; @@ -1495,7 +1495,7 @@ static void print_lat_header(struct seq_file *s, u32 = flags) static void __print_graph_headers_flags(struct trace_array *tr, struct seq_file *s, u32 flags) { - int lat =3D tr->trace_flags & TRACE_ITER_LATENCY_FMT; + int lat =3D tr->trace_flags & TRACE_ITER(LATENCY_FMT); =20 if (lat) print_lat_header(s, flags); @@ -1543,10 +1543,10 @@ void print_graph_headers_flags(struct seq_file *s, = u32 flags) struct trace_iterator *iter =3D s->private; struct trace_array *tr =3D iter->tr; =20 - if (!(tr->trace_flags & TRACE_ITER_CONTEXT_INFO)) + if (!(tr->trace_flags & TRACE_ITER(CONTEXT_INFO))) return; =20 - if (tr->trace_flags & TRACE_ITER_LATENCY_FMT) { + if (tr->trace_flags & TRACE_ITER(LATENCY_FMT)) { /* print nothing if the buffers are empty */ if (trace_empty(iter)) return; diff --git a/kernel/trace/trace_irqsoff.c b/kernel/trace/trace_irqsoff.c index 4c45c49b06c8..17673905907c 100644 --- a/kernel/trace/trace_irqsoff.c +++ b/kernel/trace/trace_irqsoff.c @@ -63,7 +63,7 @@ irq_trace(void) =20 #ifdef CONFIG_FUNCTION_GRAPH_TRACER static int irqsoff_display_graph(struct trace_array *tr, int set); -# define is_graph(tr) ((tr)->trace_flags & TRACE_ITER_DISPLAY_GRAPH) +# define is_graph(tr) ((tr)->trace_flags & TRACE_ITER(DISPLAY_GRAPH)) #else static inline int irqsoff_display_graph(struct trace_array *tr, int set) { @@ -485,8 +485,8 @@ static int register_irqsoff_function(struct trace_array= *tr, int graph, int set) { int ret; =20 - /* 'set' is set if TRACE_ITER_FUNCTION is about to be set */ - if (function_enabled || (!set && !(tr->trace_flags & TRACE_ITER_FUNCTION)= )) + /* 'set' is set if TRACE_ITER(FUNCTION) is about to be set */ + if (function_enabled || (!set && !(tr->trace_flags & TRACE_ITER(FUNCTION)= ))) return 0; =20 if (graph) @@ -515,7 +515,7 @@ static void unregister_irqsoff_function(struct trace_ar= ray *tr, int graph) =20 static int irqsoff_function_set(struct trace_array *tr, u32 mask, int set) { - if (!(mask & TRACE_ITER_FUNCTION)) + if (!(mask & TRACE_ITER(FUNCTION))) return 0; =20 if (set) @@ -536,7 +536,7 @@ static inline int irqsoff_function_set(struct trace_arr= ay *tr, u32 mask, int set } #endif /* CONFIG_FUNCTION_TRACER */ =20 -static int irqsoff_flag_changed(struct trace_array *tr, u32 mask, int set) +static int irqsoff_flag_changed(struct trace_array *tr, u64 mask, int set) { struct tracer *tracer =3D tr->current_trace; =20 @@ -544,7 +544,7 @@ static int irqsoff_flag_changed(struct trace_array *tr,= u32 mask, int set) return 0; =20 #ifdef CONFIG_FUNCTION_GRAPH_TRACER - if (mask & TRACE_ITER_DISPLAY_GRAPH) + if (mask & TRACE_ITER(DISPLAY_GRAPH)) return irqsoff_display_graph(tr, set); #endif =20 @@ -582,10 +582,10 @@ static int __irqsoff_tracer_init(struct trace_array *= tr) save_flags =3D tr->trace_flags; =20 /* non overwrite screws up the latency tracers */ - set_tracer_flag(tr, TRACE_ITER_OVERWRITE, 1); - set_tracer_flag(tr, TRACE_ITER_LATENCY_FMT, 1); + set_tracer_flag(tr, TRACE_ITER(OVERWRITE), 1); + set_tracer_flag(tr, TRACE_ITER(LATENCY_FMT), 1); /* without pause, we will produce garbage if another latency occurs */ - set_tracer_flag(tr, TRACE_ITER_PAUSE_ON_TRACE, 1); + set_tracer_flag(tr, TRACE_ITER(PAUSE_ON_TRACE), 1); =20 tr->max_latency =3D 0; irqsoff_trace =3D tr; @@ -605,15 +605,15 @@ static int __irqsoff_tracer_init(struct trace_array *= tr) =20 static void __irqsoff_tracer_reset(struct trace_array *tr) { - int lat_flag =3D save_flags & TRACE_ITER_LATENCY_FMT; - int overwrite_flag =3D save_flags & TRACE_ITER_OVERWRITE; - int pause_flag =3D save_flags & TRACE_ITER_PAUSE_ON_TRACE; + int lat_flag =3D save_flags & TRACE_ITER(LATENCY_FMT); + int overwrite_flag =3D save_flags & TRACE_ITER(OVERWRITE); + int pause_flag =3D save_flags & TRACE_ITER(PAUSE_ON_TRACE); =20 stop_irqsoff_tracer(tr, is_graph(tr)); =20 - set_tracer_flag(tr, TRACE_ITER_LATENCY_FMT, lat_flag); - set_tracer_flag(tr, TRACE_ITER_OVERWRITE, overwrite_flag); - set_tracer_flag(tr, TRACE_ITER_PAUSE_ON_TRACE, pause_flag); + set_tracer_flag(tr, TRACE_ITER(LATENCY_FMT), lat_flag); + set_tracer_flag(tr, TRACE_ITER(OVERWRITE), overwrite_flag); + set_tracer_flag(tr, TRACE_ITER(PAUSE_ON_TRACE), pause_flag); ftrace_reset_array_ops(tr); =20 irqsoff_busy =3D false; diff --git a/kernel/trace/trace_kdb.c b/kernel/trace/trace_kdb.c index 896ff78b8349..b30795f34079 100644 --- a/kernel/trace/trace_kdb.c +++ b/kernel/trace/trace_kdb.c @@ -31,7 +31,7 @@ static void ftrace_dump_buf(int skip_entries, long cpu_fi= le) old_userobj =3D tr->trace_flags; =20 /* don't look at user memory in panic mode */ - tr->trace_flags &=3D ~TRACE_ITER_SYM_USEROBJ; + tr->trace_flags &=3D ~TRACE_ITER(SYM_USEROBJ); =20 kdb_printf("Dumping ftrace buffer:\n"); if (skip_entries) diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c index ee8171b19bee..9953506370a5 100644 --- a/kernel/trace/trace_kprobe.c +++ b/kernel/trace/trace_kprobe.c @@ -1584,7 +1584,7 @@ print_kprobe_event(struct trace_iterator *iter, int f= lags, =20 trace_seq_printf(s, "%s: (", trace_probe_name(tp)); =20 - if (!seq_print_ip_sym(s, field->ip, flags | TRACE_ITER_SYM_OFFSET)) + if (!seq_print_ip_sym_offset(s, field->ip, flags)) goto out; =20 trace_seq_putc(s, ')'); @@ -1614,12 +1614,12 @@ print_kretprobe_event(struct trace_iterator *iter, = int flags, =20 trace_seq_printf(s, "%s: (", trace_probe_name(tp)); =20 - if (!seq_print_ip_sym(s, field->ret_ip, flags | TRACE_ITER_SYM_OFFSET)) + if (!seq_print_ip_sym_offset(s, field->ret_ip, flags)) goto out; =20 trace_seq_puts(s, " <- "); =20 - if (!seq_print_ip_sym(s, field->func, flags & ~TRACE_ITER_SYM_OFFSET)) + if (!seq_print_ip_sym_no_offset(s, field->func, flags)) goto out; =20 trace_seq_putc(s, ')'); diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c index 97db0b0ccf3e..a2403d8f7c39 100644 --- a/kernel/trace/trace_output.c +++ b/kernel/trace/trace_output.c @@ -420,7 +420,7 @@ static int seq_print_user_ip(struct trace_seq *s, struc= t mm_struct *mm, } mmap_read_unlock(mm); } - if (ret && ((sym_flags & TRACE_ITER_SYM_ADDR) || !file)) + if (ret && ((sym_flags & TRACE_ITER(SYM_ADDR)) || !file)) trace_seq_printf(s, " <" IP_FMT ">", ip); return !trace_seq_has_overflowed(s); } @@ -433,9 +433,9 @@ seq_print_ip_sym(struct trace_seq *s, unsigned long ip,= unsigned long sym_flags) goto out; } =20 - trace_seq_print_sym(s, ip, sym_flags & TRACE_ITER_SYM_OFFSET); + trace_seq_print_sym(s, ip, sym_flags & TRACE_ITER(SYM_OFFSET)); =20 - if (sym_flags & TRACE_ITER_SYM_ADDR) + if (sym_flags & TRACE_ITER(SYM_ADDR)) trace_seq_printf(s, " <" IP_FMT ">", ip); =20 out: @@ -569,7 +569,7 @@ static int lat_print_timestamp(struct trace_iterator *iter, u64 next_ts) { struct trace_array *tr =3D iter->tr; - unsigned long verbose =3D tr->trace_flags & TRACE_ITER_VERBOSE; + unsigned long verbose =3D tr->trace_flags & TRACE_ITER(VERBOSE); unsigned long in_ns =3D iter->iter_flags & TRACE_FILE_TIME_IN_NS; unsigned long long abs_ts =3D iter->ts - iter->array_buffer->time_start; unsigned long long rel_ts =3D next_ts - iter->ts; @@ -636,7 +636,7 @@ int trace_print_context(struct trace_iterator *iter) =20 trace_seq_printf(s, "%16s-%-7d ", comm, entry->pid); =20 - if (tr->trace_flags & TRACE_ITER_RECORD_TGID) { + if (tr->trace_flags & TRACE_ITER(RECORD_TGID)) { unsigned int tgid =3D trace_find_tgid(entry->pid); =20 if (!tgid) @@ -647,7 +647,7 @@ int trace_print_context(struct trace_iterator *iter) =20 trace_seq_printf(s, "[%03d] ", iter->cpu); =20 - if (tr->trace_flags & TRACE_ITER_IRQ_INFO) + if (tr->trace_flags & TRACE_ITER(IRQ_INFO)) trace_print_lat_fmt(s, entry); =20 trace_print_time(s, iter, iter->ts); @@ -661,7 +661,7 @@ int trace_print_lat_context(struct trace_iterator *iter) struct trace_entry *entry, *next_entry; struct trace_array *tr =3D iter->tr; struct trace_seq *s =3D &iter->seq; - unsigned long verbose =3D (tr->trace_flags & TRACE_ITER_VERBOSE); + unsigned long verbose =3D (tr->trace_flags & TRACE_ITER(VERBOSE)); u64 next_ts; =20 next_entry =3D trace_find_next_entry(iter, NULL, &next_ts); @@ -1127,7 +1127,7 @@ static void print_fn_trace(struct trace_seq *s, unsig= ned long ip, if (args) print_function_args(s, args, ip); =20 - if ((flags & TRACE_ITER_PRINT_PARENT) && parent_ip) { + if ((flags & TRACE_ITER(PRINT_PARENT)) && parent_ip) { trace_seq_puts(s, " <-"); seq_print_ip_sym(s, parent_ip, flags); } @@ -1417,7 +1417,7 @@ static enum print_line_t trace_user_stack_print(struc= t trace_iterator *iter, =20 trace_seq_puts(s, "\n"); =20 - if (tr->trace_flags & TRACE_ITER_SYM_USEROBJ) { + if (tr->trace_flags & TRACE_ITER(SYM_USEROBJ)) { struct task_struct *task; /* * we do the lookup on the thread group leader, diff --git a/kernel/trace/trace_output.h b/kernel/trace/trace_output.h index 2e305364f2a9..99b676733d46 100644 --- a/kernel/trace/trace_output.h +++ b/kernel/trace/trace_output.h @@ -16,6 +16,17 @@ extern int seq_print_ip_sym(struct trace_seq *s, unsigned long ip, unsigned long sym_flags); =20 +static inline int seq_print_ip_sym_offset(struct trace_seq *s, unsigned lo= ng ip, + unsigned long sym_flags) +{ + return seq_print_ip_sym(s, ip, sym_flags | TRACE_ITER(SYM_OFFSET)); +} +static inline int seq_print_ip_sym_no_offset(struct trace_seq *s, unsigned= long ip, + unsigned long sym_flags) +{ + return seq_print_ip_sym(s, ip, sym_flags & ~TRACE_ITER(SYM_OFFSET)); +} + extern void trace_seq_print_sym(struct trace_seq *s, unsigned long address= , bool offset); extern int trace_print_context(struct trace_iterator *iter); extern int trace_print_lat_context(struct trace_iterator *iter); diff --git a/kernel/trace/trace_sched_wakeup.c b/kernel/trace/trace_sched_w= akeup.c index e3f2e4f56faa..8faa73d3bba1 100644 --- a/kernel/trace/trace_sched_wakeup.c +++ b/kernel/trace/trace_sched_wakeup.c @@ -41,7 +41,7 @@ static void stop_func_tracer(struct trace_array *tr, int = graph); static int save_flags; =20 #ifdef CONFIG_FUNCTION_GRAPH_TRACER -# define is_graph(tr) ((tr)->trace_flags & TRACE_ITER_DISPLAY_GRAPH) +# define is_graph(tr) ((tr)->trace_flags & TRACE_ITER(DISPLAY_GRAPH)) #else # define is_graph(tr) false #endif @@ -247,8 +247,8 @@ static int register_wakeup_function(struct trace_array = *tr, int graph, int set) { int ret; =20 - /* 'set' is set if TRACE_ITER_FUNCTION is about to be set */ - if (function_enabled || (!set && !(tr->trace_flags & TRACE_ITER_FUNCTION)= )) + /* 'set' is set if TRACE_ITER(FUNCTION) is about to be set */ + if (function_enabled || (!set && !(tr->trace_flags & TRACE_ITER(FUNCTION)= ))) return 0; =20 if (graph) @@ -277,7 +277,7 @@ static void unregister_wakeup_function(struct trace_arr= ay *tr, int graph) =20 static int wakeup_function_set(struct trace_array *tr, u32 mask, int set) { - if (!(mask & TRACE_ITER_FUNCTION)) + if (!(mask & TRACE_ITER(FUNCTION))) return 0; =20 if (set) @@ -324,7 +324,7 @@ __trace_function(struct trace_array *tr, trace_function(tr, ip, parent_ip, trace_ctx, NULL); } =20 -static int wakeup_flag_changed(struct trace_array *tr, u32 mask, int set) +static int wakeup_flag_changed(struct trace_array *tr, u64 mask, int set) { struct tracer *tracer =3D tr->current_trace; =20 @@ -332,7 +332,7 @@ static int wakeup_flag_changed(struct trace_array *tr, = u32 mask, int set) return 0; =20 #ifdef CONFIG_FUNCTION_GRAPH_TRACER - if (mask & TRACE_ITER_DISPLAY_GRAPH) + if (mask & TRACE_ITER(DISPLAY_GRAPH)) return wakeup_display_graph(tr, set); #endif =20 @@ -681,8 +681,8 @@ static int __wakeup_tracer_init(struct trace_array *tr) save_flags =3D tr->trace_flags; =20 /* non overwrite screws up the latency tracers */ - set_tracer_flag(tr, TRACE_ITER_OVERWRITE, 1); - set_tracer_flag(tr, TRACE_ITER_LATENCY_FMT, 1); + set_tracer_flag(tr, TRACE_ITER(OVERWRITE), 1); + set_tracer_flag(tr, TRACE_ITER(LATENCY_FMT), 1); =20 tr->max_latency =3D 0; wakeup_trace =3D tr; @@ -725,15 +725,15 @@ static int wakeup_dl_tracer_init(struct trace_array *= tr) =20 static void wakeup_tracer_reset(struct trace_array *tr) { - int lat_flag =3D save_flags & TRACE_ITER_LATENCY_FMT; - int overwrite_flag =3D save_flags & TRACE_ITER_OVERWRITE; + int lat_flag =3D save_flags & TRACE_ITER(LATENCY_FMT); + int overwrite_flag =3D save_flags & TRACE_ITER(OVERWRITE); =20 stop_wakeup_tracer(tr); /* make sure we put back any tasks we are tracing */ wakeup_reset(tr); =20 - set_tracer_flag(tr, TRACE_ITER_LATENCY_FMT, lat_flag); - set_tracer_flag(tr, TRACE_ITER_OVERWRITE, overwrite_flag); + set_tracer_flag(tr, TRACE_ITER(LATENCY_FMT), lat_flag); + set_tracer_flag(tr, TRACE_ITER(OVERWRITE), overwrite_flag); ftrace_reset_array_ops(tr); wakeup_busy =3D false; } diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c index 0f932b22f9ec..e2c679bd7ace 100644 --- a/kernel/trace/trace_syscalls.c +++ b/kernel/trace/trace_syscalls.c @@ -157,7 +157,7 @@ print_syscall_enter(struct trace_iterator *iter, int fl= ags, trace_seq_puts(s, ", "); =20 /* parameter types */ - if (tr && tr->trace_flags & TRACE_ITER_VERBOSE) + if (tr && tr->trace_flags & TRACE_ITER(VERBOSE)) trace_seq_printf(s, "%s ", entry->types[i]); =20 /* parameter values */ --=20 2.51.0 From nobody Fri Dec 19 17:14:27 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 1E069303A3F for ; Thu, 6 Nov 2025 21:03:57 +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=1762463038; cv=none; b=WyZT2IZAICSJOaFRvbt29iAI+6CDJMGuNPc1MhIc/NX2mD5GkkcMs/2d/QjRK63+ZVuqIHX+OMNInPvBFF6XmcUIMIuBou/4TINU+ch37q2Gv+Jj0imjQkjcPoySD4KW0JZ7HRVeDTyze3hyhE+yUyGZx0IXnyp8cqk34vSTm6Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762463038; c=relaxed/simple; bh=XNTfJoDevPl1hb1ZjuSJXLXWay9V6LixMtZD8WcvW+Q=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=hQvOenhBRCHX461u/FZrC5WebF2a7HyExkoGJn4pFrrd843sRapUpWq5lvacvXn/sWTA5jm9C/xI4qnyP1yiJn0xpwW9JrjnE5o0yd1rCoNAsEyM+3REP1/7tSEabN2h+XCf7Bmxf6XgRkN4WDrBzYycfpa75R5pGpjXxKTAKik= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=biKHxE3e; 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="biKHxE3e" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9EA95C4CEF7; Thu, 6 Nov 2025 21:03:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1762463037; bh=XNTfJoDevPl1hb1ZjuSJXLXWay9V6LixMtZD8WcvW+Q=; h=Date:From:To:Cc:Subject:References:From; b=biKHxE3erkHggVyMvU9jrhnq0aWqdgfSiUBBnPf8rxCgdVsjQ9W37hts2Gk/MiizB LfCpaIQ2b/BBuYL0KDN5O7x6+AU5N7P4lHEq6MYLHLv5fS1SaQ56tAoaAXzj30koFp Yk9jYCg+UpXW+nJKHmT8tPNz+h9j235hpQYG/Q3rgbSa1BT+dr77iD+DoEH3nM4u72 QG1MFCJ7d96JSCbXPaeDi1+/eHLbrcsPNEKzsOP0GJrw8Y7mOainYfj3wzkam1iZvG JMPSg6omiXQHa72P7xp7n9g7ojvZQP8hgHCRQLkJBvmFPnVqKTz66JFr34ttxUAqKX MdZUbG85gy/rw== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1vH79B-000000008Bs-1Htm; Thu, 06 Nov 2025 16:03:57 -0500 Message-ID: <20251106210357.157755907@kernel.org> User-Agent: quilt/0.68 Date: Thu, 06 Nov 2025 16:03:33 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton Subject: [for-next][PATCH 2/7] tracing: Add an option to show symbols in _text+offset for function profiler References: <20251106210331.537317097@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: "Masami Hiramatsu (Google)" Function profiler shows the hit count of each function using its symbol name. However, there are some same-name local symbols, which we can not distinguish. To solve this issue, this introduces an option to show the symbols in "_text+OFFSET" format. This can avoid exposing the random shift of KASLR. The functions in modules are shown as "MODNAME+OFFSET" where the offset is from ".text". E.g. for the kernel text symbols, specify vmlinux and the output to addr2line, you can find the actual function and source info; $ addr2line -fie vmlinux _text+3078208 __balance_callbacks kernel/sched/core.c:5064 for modules, specify the module file and .text+OFFSET; $ addr2line -fie samples/trace_events/trace-events-sample.ko .text+8224 do_simple_thread_func samples/trace_events/trace-events-sample.c:23 Link: https://lore.kernel.org/all/176187878064.994619.8878296550240416558.s= tgit@devnote2/ Suggested-by: Steven Rostedt (Google) Signed-off-by: Masami Hiramatsu (Google) --- kernel/trace/ftrace.c | 26 +++++++++++++++++++++++++- kernel/trace/trace.c | 5 +++-- kernel/trace/trace.h | 11 ++++++++++- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index 42bd2ba68a82..ab601cd9638b 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c @@ -534,7 +534,9 @@ static int function_stat_headers(struct seq_file *m) =20 static int function_stat_show(struct seq_file *m, void *v) { + struct trace_array *tr =3D trace_get_global_array(); struct ftrace_profile *rec =3D v; + const char *refsymbol =3D NULL; char str[KSYM_SYMBOL_LEN]; #ifdef CONFIG_FUNCTION_GRAPH_TRACER static struct trace_seq s; @@ -554,7 +556,29 @@ static int function_stat_show(struct seq_file *m, void= *v) return 0; #endif =20 - kallsyms_lookup(rec->ip, NULL, NULL, NULL, str); + if (tr->trace_flags & TRACE_ITER(PROF_TEXT_OFFSET)) { + unsigned long offset; + + if (core_kernel_text(rec->ip)) { + refsymbol =3D "_text"; + offset =3D rec->ip - (unsigned long)_text; + } else { + struct module *mod; + + guard(rcu)(); + mod =3D __module_text_address(rec->ip); + if (mod) { + refsymbol =3D mod->name; + /* Calculate offset from module's text entry address. */ + offset =3D rec->ip - (unsigned long)mod->mem[MOD_TEXT].base; + } + } + if (refsymbol) + snprintf(str, sizeof(str), " %s+%#lx", refsymbol, offset); + } + if (!refsymbol) + kallsyms_lookup(rec->ip, NULL, NULL, NULL, str); + seq_printf(m, " %-30.30s %10lu", str, rec->counter); =20 #ifdef CONFIG_FUNCTION_GRAPH_TRACER diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 14e8703a6a53..e5f186daf007 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -522,7 +522,8 @@ EXPORT_SYMBOL_GPL(unregister_ftrace_export); =20 /* trace_options that are only supported by global_trace */ #define TOP_LEVEL_TRACE_FLAGS (TRACE_ITER(PRINTK) | \ - TRACE_ITER(PRINTK_MSGONLY) | TRACE_ITER(RECORD_CMD)) + TRACE_ITER(PRINTK_MSGONLY) | TRACE_ITER(RECORD_CMD) | \ + TRACE_ITER(PROF_TEXT_OFFSET)) =20 /* trace_flags that are default zero for instances */ #define ZEROED_TRACE_FLAGS \ @@ -11291,7 +11292,7 @@ __init static int tracer_alloc_buffers(void) =20 #ifdef CONFIG_FUNCTION_TRACER /* Used to set module cached ftrace filtering at boot up */ -__init struct trace_array *trace_get_global_array(void) +struct trace_array *trace_get_global_array(void) { return &global_trace; } diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index 8c99136619bf..7d8f4bd9facd 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@ -1359,6 +1359,14 @@ extern int trace_get_user(struct trace_parser *parse= r, const char __user *ubuf, # define STACK_FLAGS #endif =20 +#ifdef CONFIG_FUNCTION_PROFILER +# define PROFILER_FLAGS \ + C(PROF_TEXT_OFFSET, "prof-text-offset"), +#else +# define PROFILER_FLAGS +# define TRACE_ITER_PROF_TEXT_OFFSET_BIT -1 +#endif + /* * trace_iterator_flags is an enumeration that defines bit * positions into trace_flags that controls the output. @@ -1397,7 +1405,8 @@ extern int trace_get_user(struct trace_parser *parser= , const char __user *ubuf, FUNCTION_FLAGS \ FGRAPH_FLAGS \ STACK_FLAGS \ - BRANCH_FLAGS + BRANCH_FLAGS \ + PROFILER_FLAGS =20 /* * By defining C, we can make TRACE_FLAGS a list of bit names --=20 2.51.0 From nobody Fri Dec 19 17:14:27 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 1DFF8303A32 for ; Thu, 6 Nov 2025 21:03:57 +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=1762463038; cv=none; b=KMGIHtZfKj1RF2+p0d+eC+aszff0Dn1OBqh8/8w44+p9JiZAtxZQMpBtQU2XrHJQ7rfvUNi8lu5DqOB2/0YFM+6nrSqMFhfTVtGhdF548kUI71dzn+4SKZvDPYUzLKo2JcxqZIitKLF8u8nIwZUuZWkUMPNtriNZPaPh8TeEfBY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762463038; c=relaxed/simple; bh=nxdKcSMKIeOHIPM+goweIhbi14dqb7tSaevc+KLnwBU=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=BuG6L+CoNQMCgMQT/oWLm7JBqUBUOKLTrPndJDdNuC7ZaFSYWzMK8G62rHLfkCiBKHuMwBgzgotsuI152HmTHnSkq54z2+vdloj3TDlWqcymrwmBilnAf7F1mWeJpc8lG3a2K9Ve5SPzjEv+tckxHeG2H50j13bAFTGqHWFRzjs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kwoqkCWa; 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="kwoqkCWa" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C17D6C113D0; Thu, 6 Nov 2025 21:03:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1762463037; bh=nxdKcSMKIeOHIPM+goweIhbi14dqb7tSaevc+KLnwBU=; h=Date:From:To:Cc:Subject:References:From; b=kwoqkCWawTK16Jbyr6WIWvmwTGy0HMn8G8cGvf3vLIsXkdH1cO5+ZY/8tOzXauAvJ oP/cuvRUVvg2cXa+jtJ53F6Ej2d7qDBCDzYyc+hirx/fnrB2EiPpfoE83TIs+bKhT6 H9d7ioPYSV0ZICBIo589Pklq8FQnzgms8Lkmp/GNrMm+qmrzMLesblrYheioRS45rX 1dQQR+NfoLk2bqMKTXdPr+obJph/Km7/dE1il8A6zvNSITii8kWJi5xMWiU1iPM/EX 83GvMULK47K2hvzkym2NYjLCUrsD7fvLudFm+3bYreeQ7QJBkX78pLXN5frRbVm3h/ zXe0sr1eiBnFg== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1vH79B-000000008CM-20Oa; Thu, 06 Nov 2025 16:03:57 -0500 Message-ID: <20251106210357.328874176@kernel.org> User-Agent: quilt/0.68 Date: Thu, 06 Nov 2025 16:03:34 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton , kernel test robot Subject: [for-next][PATCH 3/7] tracing: Hide __NR_utimensat and _NR_mq_timedsend when not defined References: <20251106210331.537317097@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 architectures (riscv-32) do not define __NR_utimensat and _NR_mq_timedsend, and fails to build when they are used. Hide them in "ifdef"s. Cc: Masami Hiramatsu Cc: Mathieu Desnoyers Link: https://patch.msgid.link/20251104205310.00a1db9a@batman.local.home Reported-by: kernel test robot Closes: https://lore.kernel.org/oe-kbuild-all/202511031239.ZigDcWzY-lkp@int= el.com/ Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace_syscalls.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c index e07c5a3cc7ab..e96d0063cbcf 100644 --- a/kernel/trace/trace_syscalls.c +++ b/kernel/trace/trace_syscalls.c @@ -1072,7 +1072,9 @@ static void check_faultable_syscall(struct trace_even= t_call *call, int nr) switch (nr) { /* user arg 1 with size arg at 2 */ case __NR_write: +#ifdef __NR_mq_timedsend case __NR_mq_timedsend: +#endif case __NR_pwrite64: sys_data->user_mask =3D BIT(1); sys_data->user_arg_size =3D 2; @@ -1186,7 +1188,9 @@ static void check_faultable_syscall(struct trace_even= t_call *call, int nr) case __NR_syslog: case __NR_statx: case __NR_unlinkat: +#ifdef __NR_utimensat case __NR_utimensat: +#endif sys_data->user_mask =3D BIT(1); break; /* user arg at position 2 */ --=20 2.51.0 From nobody Fri Dec 19 17:14:27 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 51770303CA1 for ; Thu, 6 Nov 2025 21:03:58 +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=1762463038; cv=none; b=LkX6Sl7OaZWHq7wVAw3jJf9X4PfZHOpjb8bkU4IHeFFZoM7yXuGCPc7/lOZ6hbKM4apvdquUf+2n4PhvNqJzqTs5D/CT3O5O00H2rgzV996yp6dY9i/17mKxyOgtZ7fV3s9JoqzBbuqOPpZmETwMC9MDqS4yJNE5ZNBzoF8HPOk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762463038; c=relaxed/simple; bh=voCNL6Frp/bCeX0n8ab8z3IJn8JPD5gDRgf0KDYYEA4=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=ONZK2nsCCYMeBTFuF4rEhCcA3ovh1Vrere/RrumH3c71apZHf/kamJP9aO1GhnOg7x0X+UStZMkZCp8/Rx+Ck98SMIjaJZoDrGIHxoTtVxMenrFG1KTcj2l1UeQ9PukyQpAplIJKKWVMxeICAL736aH63o06YJE49zshcLfH1s0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MNOLYOZI; 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="MNOLYOZI" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E1D5CC2BC86; Thu, 6 Nov 2025 21:03:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1762463037; bh=voCNL6Frp/bCeX0n8ab8z3IJn8JPD5gDRgf0KDYYEA4=; h=Date:From:To:Cc:Subject:References:From; b=MNOLYOZIxSABILKahp2sC4pu7ujQbMQLEUaNJbj34g/5wHvDsva3bW6Eua3Q/WyRL y/Ctgs1651DZVDAuzbf1jiGMvvYSXaaGcGhiXDo6ZPsLCrSZ8IFMg/2e6ZShip3NFQ lwTGffGa7acnKCy2Fap7ivfSir/Bn8i8yWVGd9qxHUeYf5QU6AZZF4VFSfVGhJ9uXb cdSFZ/DPVhAJmUZDZW+bTDW8PYmy0XdY13ClhaSkemO7N9+1gvlesRLtgQl/FKM9Mt rsLrQzbMssdLiFOIClMM49fGNGF0s3SsK28jyP7PnzPbBi6lrHL7HFXoZ3FdBK+hC7 F3Cr6jEqZk71A== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1vH79B-000000008Cq-2h6Y; Thu, 06 Nov 2025 16:03:57 -0500 Message-ID: <20251106210357.498967804@kernel.org> User-Agent: quilt/0.68 Date: Thu, 06 Nov 2025 16:03:35 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton Subject: [for-next][PATCH 4/7] tracing: Remove dummy options and flags References: <20251106210331.537317097@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 When a tracer does not define their own flags, dummy options and flags are used so that the values are always valid. There's not that many locations that reference these values so having dummy versions just complicates the code. Remove the dummy values and just check for NULL when appropriate. Cc: Masami Hiramatsu Cc: Mark Rutland Cc: Mathieu Desnoyers Cc: Andrew Morton Link: https://patch.msgid.link/20251105161935.206093132@kernel.org Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace.c | 48 +++++++++++++++----------------------------- 1 file changed, 16 insertions(+), 32 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 0e822db5d9e4..afeaa9a164e9 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -94,17 +94,6 @@ static bool tracepoint_printk_stop_on_boot __initdata; static bool traceoff_after_boot __initdata; static DEFINE_STATIC_KEY_FALSE(tracepoint_printk_key); =20 -/* For tracers that don't implement custom flags */ -static struct tracer_opt dummy_tracer_opt[] =3D { - { } -}; - -static int -dummy_set_flag(struct trace_array *tr, u32 old_flags, u32 bit, int set) -{ - return 0; -} - /* * To prevent the comm cache from being overwritten when no * tracing is active, only save the comm when a trace event @@ -2356,23 +2345,9 @@ int __init register_tracer(struct tracer *type) } } =20 - if (!type->set_flag) - type->set_flag =3D &dummy_set_flag; - if (!type->flags) { - /*allocate a dummy tracer_flags*/ - type->flags =3D kmalloc(sizeof(*type->flags), GFP_KERNEL); - if (!type->flags) { - ret =3D -ENOMEM; - goto out; - } - type->flags->val =3D 0; - type->flags->opts =3D dummy_tracer_opt; - } else - if (!type->flags->opts) - type->flags->opts =3D dummy_tracer_opt; - /* store the tracer for __set_tracer_option */ - type->flags->trace =3D type; + if (type->flags) + type->flags->trace =3D type; =20 ret =3D do_run_tracer_selftest(type); if (ret < 0) @@ -5159,14 +5134,12 @@ static int tracing_trace_options_show(struct seq_fi= le *m, void *v) { struct tracer_opt *trace_opts; struct trace_array *tr =3D m->private; + struct tracer *trace; u32 tracer_flags; int i; =20 guard(mutex)(&trace_types_lock); =20 - tracer_flags =3D tr->current_trace->flags->val; - trace_opts =3D tr->current_trace->flags->opts; - for (i =3D 0; trace_options[i]; i++) { if (tr->trace_flags & (1ULL << i)) seq_printf(m, "%s\n", trace_options[i]); @@ -5174,6 +5147,13 @@ static int tracing_trace_options_show(struct seq_fil= e *m, void *v) seq_printf(m, "no%s\n", trace_options[i]); } =20 + trace =3D tr->current_trace; + if (!trace->flags || !trace->flags->opts) + return 0; + + tracer_flags =3D tr->current_trace->flags->val; + trace_opts =3D tr->current_trace->flags->opts; + for (i =3D 0; trace_opts[i].name; i++) { if (tracer_flags & trace_opts[i].bit) seq_printf(m, "%s\n", trace_opts[i].name); @@ -5189,9 +5169,10 @@ static int __set_tracer_option(struct trace_array *t= r, struct tracer_opt *opts, int neg) { struct tracer *trace =3D tracer_flags->trace; - int ret; + int ret =3D 0; =20 - ret =3D trace->set_flag(tr, tracer_flags->val, opts->bit, !neg); + if (trace->set_flag) + ret =3D trace->set_flag(tr, tracer_flags->val, opts->bit, !neg); if (ret) return ret; =20 @@ -5210,6 +5191,9 @@ static int set_tracer_option(struct trace_array *tr, = char *cmp, int neg) struct tracer_opt *opts =3D NULL; int i; =20 + if (!tracer_flags || !tracer_flags->opts) + return 0; + for (i =3D 0; tracer_flags->opts[i].name; i++) { opts =3D &tracer_flags->opts[i]; =20 --=20 2.51.0 From nobody Fri Dec 19 17:14:27 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 45438303CA0 for ; Thu, 6 Nov 2025 21:03:58 +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=1762463038; cv=none; b=E+7t74wRsAOGQE3UPoa3peI03BRPFCZA8DJ5p883yw+bY/SBJ53IxM4NUx/DvyhsHJbqaMx2W1RrSPRfj+CcjOt2B2hq5bhPTp8BqSjHtys1ThmDIqOwl0wmuhJWRiV6Gnk+GA+IQGuvZEFPmuV872rLH7RIoqMVphxs4Co5KII= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762463038; c=relaxed/simple; bh=tJVTfvIahPAX1PxDS/vCqXJD0uo0I5JkC53Sw22Tl1Q=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=EGLUCwmfn9m9Cmqd/07Z5H9tS8MizOqsKY7NUaMysHf093TFn1DbefNZE2P4yZXVJX8pE0Vw5dFWlcOucugzfYUj73mLbiV/MFUBxAJCwLZX3Co+dl7mxkYjdUyEyRFlOdKtOd9MLZHa7Zxcx87adToT15+DIde4Y3sQWJ7JcEg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=bHZMFbAD; 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="bHZMFbAD" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2049BC116C6; Thu, 6 Nov 2025 21:03:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1762463038; bh=tJVTfvIahPAX1PxDS/vCqXJD0uo0I5JkC53Sw22Tl1Q=; h=Date:From:To:Cc:Subject:References:From; b=bHZMFbADskIWZrWLOWxe+rUPX2YIoi/AfJF55ev9WpZRnZHJ59mDWieIhw2K5CGpI NwnJKMddLqURIQ75lIKZIyK54hukWk+2z2VRY+VFn0xFY3msBYQpNnrtdsvfnnLehN Tv5nRYzyawXBmVNJHwtGpz7aAfL1C3hqs0hPu6hCNYwBrLhVHk6ml94UcEyASAp+Po iHH1iQjV5AVEvlYkgzzeYQZT8KHJqGVkjrRTAHU+kTMd8mk7Ro7by1cYlHosyftUdw vaFnPUVyIZWlORTkm2ttq38IsbbuaCfGegkqk/qh4qcEAFF0iUxLI2MTJqCAOoP77x 4vUxM5yEEmA9w== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1vH79B-000000008DK-3OAE; Thu, 06 Nov 2025 16:03:57 -0500 Message-ID: <20251106210357.662018725@kernel.org> User-Agent: quilt/0.68 Date: Thu, 06 Nov 2025 16:03:36 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton Subject: [for-next][PATCH 5/7] tracing: Have add_tracer_options() error pass up to callers References: <20251106210331.537317097@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 add_tracer_options() can fail, but currently it is ignored. Pass the status of add_tracer_options() up to adding a new tracer as well as when an instance is created. Have the instance creation fail if the add_tracer_options() fail. Only print a warning for the top level instance, like it does with other failures. Cc: Masami Hiramatsu Cc: Mark Rutland Cc: Mathieu Desnoyers Cc: Andrew Morton Link: https://patch.msgid.link/20251105161935.375299297@kernel.org Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace.c | 55 +++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index afeaa9a164e9..ed929d331e1d 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -2302,7 +2302,7 @@ static inline int do_run_tracer_selftest(struct trace= r *type) } #endif /* CONFIG_FTRACE_STARTUP_TEST */ =20 -static void add_tracer_options(struct trace_array *tr, struct tracer *t); +static int add_tracer_options(struct trace_array *tr, struct tracer *t); =20 static void __init apply_trace_boot_options(void); =20 @@ -2353,9 +2353,14 @@ int __init register_tracer(struct tracer *type) if (ret < 0) goto out; =20 + ret =3D add_tracer_options(&global_trace, type); + if (ret < 0) { + pr_warn("Failed to create tracer options for %s\n", type->name); + goto out; + } + type->next =3D trace_types; trace_types =3D type; - add_tracer_options(&global_trace, type); =20 out: mutex_unlock(&trace_types_lock); @@ -6221,7 +6226,7 @@ int tracing_update_buffers(struct trace_array *tr) =20 struct trace_option_dentry; =20 -static void +static int create_trace_option_files(struct trace_array *tr, struct tracer *tracer); =20 /* @@ -6243,17 +6248,17 @@ static void tracing_set_nop(struct trace_array *tr) =20 static bool tracer_options_updated; =20 -static void add_tracer_options(struct trace_array *tr, struct tracer *t) +static int add_tracer_options(struct trace_array *tr, struct tracer *t) { /* Only enable if the directory has been created already. */ if (!tr->dir && !(tr->flags & TRACE_ARRAY_FL_GLOBAL)) - return; + return 0; =20 /* Only create trace option files after update_tracer_options finish */ if (!tracer_options_updated) - return; + return 0; =20 - create_trace_option_files(tr, t); + return create_trace_option_files(tr, t); } =20 int tracing_set_tracer(struct trace_array *tr, const char *buf) @@ -9585,7 +9590,7 @@ create_trace_option_file(struct trace_array *tr, =20 } =20 -static void +static int create_trace_option_files(struct trace_array *tr, struct tracer *tracer) { struct trace_option_dentry *topts; @@ -9596,24 +9601,24 @@ create_trace_option_files(struct trace_array *tr, s= truct tracer *tracer) int i; =20 if (!tracer) - return; + return 0; =20 flags =3D tracer->flags; =20 if (!flags || !flags->opts) - return; + return 0; =20 /* * If this is an instance, only create flags for tracers * the instance may have. */ if (!trace_ok_for_array(tracer, tr)) - return; + return 0; =20 for (i =3D 0; i < tr->nr_topts; i++) { /* Make sure there's no duplicate flags. */ if (WARN_ON_ONCE(tr->topts[i].tracer->flags =3D=3D tracer->flags)) - return; + return -EINVAL; } =20 opts =3D flags->opts; @@ -9623,13 +9628,13 @@ create_trace_option_files(struct trace_array *tr, s= truct tracer *tracer) =20 topts =3D kcalloc(cnt + 1, sizeof(*topts), GFP_KERNEL); if (!topts) - return; + return 0; =20 tr_topts =3D krealloc(tr->topts, sizeof(*tr->topts) * (tr->nr_topts + 1), GFP_KERNEL); if (!tr_topts) { kfree(topts); - return; + return -ENOMEM; } =20 tr->topts =3D tr_topts; @@ -9644,6 +9649,7 @@ create_trace_option_files(struct trace_array *tr, str= uct tracer *tracer) "Failed to create trace option: %s", opts[cnt].name); } + return 0; } =20 static struct dentry * @@ -10094,15 +10100,18 @@ static void init_trace_flags_index(struct trace_a= rray *tr) tr->trace_flags_index[i] =3D i; } =20 -static void __update_tracer_options(struct trace_array *tr) +static int __update_tracer_options(struct trace_array *tr) { struct tracer *t; + int ret =3D 0; + + for (t =3D trace_types; t && !ret; t =3D t->next) + ret =3D add_tracer_options(tr, t); =20 - for (t =3D trace_types; t; t =3D t->next) - add_tracer_options(tr, t); + return ret; } =20 -static void update_tracer_options(struct trace_array *tr) +static __init void update_tracer_options(struct trace_array *tr) { guard(mutex)(&trace_types_lock); tracer_options_updated =3D true; @@ -10151,9 +10160,13 @@ static int trace_array_create_dir(struct trace_arr= ay *tr) } =20 init_tracer_tracefs(tr, tr->dir); - __update_tracer_options(tr); - - return ret; + ret =3D __update_tracer_options(tr); + if (ret) { + event_trace_del_tracer(tr); + tracefs_remove(tr->dir); + return ret; + } + return 0; } =20 static struct trace_array * --=20 2.51.0 From nobody Fri Dec 19 17:14:27 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 6F4AF3043A4 for ; Thu, 6 Nov 2025 21:03:58 +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=1762463038; cv=none; b=Q8MYUq9JPWdtDPtJtqsU3+cCAcVT5+GioVREmwLy8XIzxDBR2BHZoSpevbrZ7LeeP1ieK14u4Wf2XUbim6FZ/ONuTVhAFmZLk9k4zcEtI/dtUZ19kDlLkLjjoD7uBs6b16eqLmn3qSjLdCqF85wF5MFpQTEv74RVQ9j1timNNZw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762463038; c=relaxed/simple; bh=kxKIMXudkZCzlyuZLzwoFaEjX0gvyg5owrHhnIlfGU8=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=uQnv8cdYMgQdnJgAh7PFTNsPUE0C/2peRAMC6eOp21ZMI2G/fJh5RVkxZnInHh/RQk8inAms3qVFzj+9hpAvU+2CQsEqFDPU1VcEGRWLR/pmxqyXhKgaXt2PTJ+0JupJZytJIyipKlePO373/Dm0PFmCB4cmfsw6p4v5BmVNDBE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ua1DRkgw; 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="ua1DRkgw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4B260C4CEF7; Thu, 6 Nov 2025 21:03:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1762463038; bh=kxKIMXudkZCzlyuZLzwoFaEjX0gvyg5owrHhnIlfGU8=; h=Date:From:To:Cc:Subject:References:From; b=ua1DRkgw5DivVxn9EMW56PtLWgParjmu3I/EEQebC0Is2Tn0hV5s+iuVktd59fOYD APFKJzu6vlmnwGGDkvreQyivPYPVmLXmMb+YUxD28k8cDpcVJZsd7j8yr8Ps+UVaQQ xr9Fm0GM+2zi9q4CPhOBNDKXPMIP2t77Yh/muyLtEPgIHstVklqJV7qQW5cZoRoCBu cWww9gGsSGbPuzB+L3l/IKGcxnbM8CwNxafYvIFZFoGH0Bz1x6RPppfvFyRc8YBAy4 clrIkK5+IPjWrI9gomVpcqllGqg9eC25/yqO0eNUJ1q4XbZZKAGifP+ZWIPHQyS0cE YY5vu4axwuqmw== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1vH79B-000000008Do-45rj; Thu, 06 Nov 2025 16:03:57 -0500 Message-ID: <20251106210357.828237507@kernel.org> User-Agent: quilt/0.68 Date: Thu, 06 Nov 2025 16:03:37 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton Subject: [for-next][PATCH 6/7] tracing: Exit out immediately after update_marker_trace() References: <20251106210331.537317097@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 call to update_marker_trace() in set_tracer_flag() performs the update to the tr->trace_flags. There's no reason to perform it again after it is called. Return immediately instead. Cc: Masami Hiramatsu Cc: Mark Rutland Cc: Mathieu Desnoyers Cc: Andrew Morton Link: https://patch.msgid.link/20251106003501.726406870@kernel.org Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index ed929d331e1d..88234b541b09 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -5254,8 +5254,11 @@ int set_tracer_flag(struct trace_array *tr, u64 mask= , int enabled) } } =20 - if (mask =3D=3D TRACE_ITER(COPY_MARKER)) + if (mask =3D=3D TRACE_ITER(COPY_MARKER)) { update_marker_trace(tr, enabled); + /* update_marker_trace updates the tr->trace_flags */ + return 0; + } =20 if (enabled) tr->trace_flags |=3D mask; --=20 2.51.0 From nobody Fri Dec 19 17:14:27 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 B51FD3043CD for ; Thu, 6 Nov 2025 21:03:58 +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=1762463038; cv=none; b=LNhqPZJuj2vE1BGQLAwFYoZOxbxRI2WxUyMz5ePkMYDOD6fmyDTwGSwXlbkM8DB/zkIxhcqrJjYhTwKJmRYMwsX0AEzIytaQMus2cOmvYXMs+UkN7W8mLB+2BRoHzPCQOJ3ABG7CsOI+bUzvONYaSuPzJIBM17Ygbx9tDrAsUbo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762463038; c=relaxed/simple; bh=WQdlEZLR91pyM/JJhDRZIhhFahmWBrTK9PMzbl3MwYU=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=NZyEZ1N78IFO3izmNaS4azpu0tm1aVOEe5KI2h9EhJTCx8k5KOWXFGxClHemJws2u7fO69FQilqS8fxa/SHyrSEzjLxeOhVyihADQvVFL2EG05qGW5DGXaBi6HJ3GPtTgcbxlcbjM3pYRnQgloW/bbpmrXgwiChHsP82U1+d2MQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=E76R01OU; 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="E76R01OU" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 78E53C113D0; Thu, 6 Nov 2025 21:03:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1762463038; bh=WQdlEZLR91pyM/JJhDRZIhhFahmWBrTK9PMzbl3MwYU=; h=Date:From:To:Cc:Subject:References:From; b=E76R01OUGuL+5mpBoODiYIyO30KnJH2q0n/cHWwhHpWcadHCSg/1vN7YU/tOKlX5q VcfJdf3YwO11rTUm7Z2aN2YCXPQY+WLUOxmHHPPYNfOvvxXHvIITMSPGB5sArJvhbi PodVB/mD1IVAjupEX5VXHto3whMITxomMne/wt3LNcc7q+8sO9y8VYkLTfgX27veTh rxdwUB3ki2hvNHamTgC+Crl8HJy/PpQ0E1CwtIFylIkVrLCodhAcv9dt37Zh6dDrvM NVcUaV+AYpmGdtJXQLk6SL+xuA73iiNiSgxXQM+a/inHP/Cbmf1wYAnNTuWYPRC8k8 u+zIht2spX+Aw== Received: from rostedt by gandalf with local (Exim 4.98.2) (envelope-from ) id 1vH79C-000000008EI-0aa5; Thu, 06 Nov 2025 16:03:58 -0500 Message-ID: <20251106210357.996566505@kernel.org> User-Agent: quilt/0.68 Date: Thu, 06 Nov 2025 16:03:38 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton Subject: [for-next][PATCH 7/7] tracing: Use switch statement instead of ifs in set_tracer_flag() References: <20251106210331.537317097@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 "mask" passed in to set_trace_flag() has a single bit set. The function then checks if the mask is equal to one of the option masks and performs the appropriate function associated to that option. Instead of having a bunch of "if ()" statement, use a "switch ()" statement instead to make it cleaner and a bit more optimal. No function changes. Cc: Masami Hiramatsu Cc: Mark Rutland Cc: Mathieu Desnoyers Cc: Andrew Morton Link: https://patch.msgid.link/20251106003501.890298562@kernel.org Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace.c | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 88234b541b09..0aea9cb84276 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -5220,11 +5220,13 @@ int trace_keep_overwrite(struct tracer *tracer, u64= mask, int set) =20 int set_tracer_flag(struct trace_array *tr, u64 mask, int enabled) { - if ((mask =3D=3D TRACE_ITER(RECORD_TGID)) || - (mask =3D=3D TRACE_ITER(RECORD_CMD)) || - (mask =3D=3D TRACE_ITER(TRACE_PRINTK)) || - (mask =3D=3D TRACE_ITER(COPY_MARKER))) + switch (mask) { + case TRACE_ITER(RECORD_TGID): + case TRACE_ITER(RECORD_CMD): + case TRACE_ITER(TRACE_PRINTK): + case TRACE_ITER(COPY_MARKER): lockdep_assert_held(&event_mutex); + } =20 /* do nothing if flag is already set */ if (!!(tr->trace_flags & mask) =3D=3D !!enabled) @@ -5235,7 +5237,8 @@ int set_tracer_flag(struct trace_array *tr, u64 mask,= int enabled) if (tr->current_trace->flag_changed(tr, mask, !!enabled)) return -EINVAL; =20 - if (mask =3D=3D TRACE_ITER(TRACE_PRINTK)) { + switch (mask) { + case TRACE_ITER(TRACE_PRINTK): if (enabled) { update_printk_trace(tr); } else { @@ -5252,9 +5255,9 @@ int set_tracer_flag(struct trace_array *tr, u64 mask,= int enabled) if (printk_trace =3D=3D tr) update_printk_trace(&global_trace); } - } + break; =20 - if (mask =3D=3D TRACE_ITER(COPY_MARKER)) { + case TRACE_ITER(COPY_MARKER): update_marker_trace(tr, enabled); /* update_marker_trace updates the tr->trace_flags */ return 0; @@ -5265,10 +5268,12 @@ int set_tracer_flag(struct trace_array *tr, u64 mas= k, int enabled) else tr->trace_flags &=3D ~mask; =20 - if (mask =3D=3D TRACE_ITER(RECORD_CMD)) + switch (mask) { + case TRACE_ITER(RECORD_CMD): trace_event_enable_cmd_record(enabled); + break; =20 - if (mask =3D=3D TRACE_ITER(RECORD_TGID)) { + case TRACE_ITER(RECORD_TGID): =20 if (trace_alloc_tgid_map() < 0) { tr->trace_flags &=3D ~TRACE_ITER(RECORD_TGID); @@ -5276,24 +5281,27 @@ int set_tracer_flag(struct trace_array *tr, u64 mas= k, int enabled) } =20 trace_event_enable_tgid_record(enabled); - } + break; =20 - if (mask =3D=3D TRACE_ITER(EVENT_FORK)) + case TRACE_ITER(EVENT_FORK): trace_event_follow_fork(tr, enabled); + break; =20 - if (mask =3D=3D TRACE_ITER(FUNC_FORK)) + case TRACE_ITER(FUNC_FORK): ftrace_pid_follow_fork(tr, enabled); + break; =20 - if (mask =3D=3D TRACE_ITER(OVERWRITE)) { + case TRACE_ITER(OVERWRITE): ring_buffer_change_overwrite(tr->array_buffer.buffer, enabled); #ifdef CONFIG_TRACER_MAX_TRACE ring_buffer_change_overwrite(tr->max_buffer.buffer, enabled); #endif - } + break; =20 - if (mask =3D=3D TRACE_ITER(PRINTK)) { + case TRACE_ITER(PRINTK): trace_printk_start_stop_comm(enabled); trace_printk_control(enabled); + break; } =20 return 0; --=20 2.51.0