From nobody Thu Sep 11 20:36:24 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4587CC61DA4 for ; Fri, 17 Feb 2023 00:51:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230258AbjBQAvI (ORCPT ); Thu, 16 Feb 2023 19:51:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57980 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230207AbjBQAu7 (ORCPT ); Thu, 16 Feb 2023 19:50:59 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BD306582AC for ; Thu, 16 Feb 2023 16:50:42 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 5ACE6B82AC1 for ; Fri, 17 Feb 2023 00:50:41 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id EC6AAC4339E; Fri, 17 Feb 2023 00:50:39 +0000 (UTC) Received: from rostedt by gandalf.local.home with local (Exim 4.96) (envelope-from ) id 1pSoxT-000qNi-0A; Thu, 16 Feb 2023 19:50:39 -0500 Message-ID: <20230217005038.870067215@goodmis.org> User-Agent: quilt/0.66 Date: Thu, 16 Feb 2023 19:49:57 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Andrew Morton , Tom Zanussi Subject: [for-next][PATCH 3/5] tracing/histogram: Fix a few problems with stacktrace variable printing References: <20230217004954.719324747@goodmis.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Tom Zanussi Currently, there are a few problems when printing hist triggers and trace output when using stacktrace variables. This fixes the problems seen below: # echo 'hist:keys=3Ddelta.buckets=3D100,stack.stacktrace:sort=3Ddelta' > = /sys/kernel/debug/tracing/events/synthetic/block_lat/trigger # cat /sys/kernel/debug/tracing/events/synthetic/block_lat/trigger hist:keys=3Ddelta.buckets=3D100,stacktrace:vals=3Dhitcount:sort=3Ddelta.b= uckets=3D100:size=3D2048 [active] # echo 'hist:keys=3Dnext_pid:ts=3Dcommon_timestamp.usecs,st=3Dstacktrace = if prev_state =3D=3D 2' >> /sys/kernel/debug/tracing/events/sched/sched_sw= itch/trigger # cat /sys/kernel/debug/tracing/events/sched/sched_switch/trigger hist:keys=3Dnext_pid:vals=3Dhitcount:ts=3Dcommon_timestamp.usecs,st=3Dsta= cktrace.stacktrace:sort=3Dhitcount:size=3D2048:clock=3Dglobal if prev_state= =3D=3D 2 [active] and also in the trace output (should be stack.stacktrace): { delta: ~ 100-199, stacktrace __schedule+0xa19/0x1520 Link: https://lkml.kernel.org/r/60bebd4e546728e012a7a2bcbf58716d48ba6edb.16= 76063532.git.zanussi@kernel.org Signed-off-by: Tom Zanussi Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace_events_hist.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_h= ist.c index 6cef1def1da5..c4f1fe985f6f 100644 --- a/kernel/trace/trace_events_hist.c +++ b/kernel/trace/trace_events_hist.c @@ -1356,9 +1356,12 @@ static const char *hist_field_name(struct hist_field= *field, field_name =3D field->name; } else if (field->flags & HIST_FIELD_FL_TIMESTAMP) field_name =3D "common_timestamp"; - else if (field->flags & HIST_FIELD_FL_STACKTRACE) - field_name =3D "stacktrace"; - else if (field->flags & HIST_FIELD_FL_HITCOUNT) + else if (field->flags & HIST_FIELD_FL_STACKTRACE) { + if (field->field) + field_name =3D field->field->name; + else + field_name =3D "stacktrace"; + } else if (field->flags & HIST_FIELD_FL_HITCOUNT) field_name =3D "hitcount"; =20 if (field_name =3D=3D NULL) @@ -5339,7 +5342,10 @@ static void hist_trigger_print_key(struct seq_file *= m, seq_printf(m, "%s: %-30s[%3llu]", field_name, syscall_name, uval); } else if (key_field->flags & HIST_FIELD_FL_STACKTRACE) { - seq_puts(m, "stacktrace:\n"); + if (key_field->field) + seq_printf(m, "%s.stacktrace", key_field->field->name); + else + seq_puts(m, "stacktrace:\n"); hist_trigger_stacktrace_print(m, key + key_field->offset, HIST_STACKTRACE_DEPTH); @@ -5884,7 +5890,8 @@ static void hist_field_print(struct seq_file *m, stru= ct hist_field *hist_field) =20 if (hist_field->flags) { if (!(hist_field->flags & HIST_FIELD_FL_VAR_REF) && - !(hist_field->flags & HIST_FIELD_FL_EXPR)) { + !(hist_field->flags & HIST_FIELD_FL_EXPR) && + !(hist_field->flags & HIST_FIELD_FL_STACKTRACE)) { const char *flags =3D get_hist_field_flags(hist_field); =20 if (flags) @@ -5917,9 +5924,12 @@ static int event_hist_trigger_print(struct seq_file = *m, if (i > hist_data->n_vals) seq_puts(m, ","); =20 - if (field->flags & HIST_FIELD_FL_STACKTRACE) - seq_puts(m, "stacktrace"); - else + if (field->flags & HIST_FIELD_FL_STACKTRACE) { + if (field->field) + seq_printf(m, "%s.stacktrace", field->field->name); + else + seq_puts(m, "stacktrace"); + } else hist_field_print(m, field); } =20 --=20 2.39.1