From nobody Fri Dec 19 20:10:20 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