From mboxrd@z Thu Jan 1 00:00:00 1970 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 D7894C352A8 for ; Wed, 30 Mar 2022 12:06:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347616AbiC3MHQ (ORCPT ); Wed, 30 Mar 2022 08:07:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58732 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345935AbiC3LzN (ORCPT ); Wed, 30 Mar 2022 07:55:13 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8BFD75F7B; Wed, 30 Mar 2022 04:52:59 -0700 (PDT) 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 dfw.source.kernel.org (Postfix) with ESMTPS id 2A4436137A; Wed, 30 Mar 2022 11:52:59 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E0E06C3410F; Wed, 30 Mar 2022 11:52:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1648641178; bh=WI1h3YqIzIgDYXr7FPkqv/Ug+lhYGWBtE+dAGmhDc3g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jDBWdybQs4u7Z/G3HN62UdwT8JHIoXhDLjh4rfNgYe/8xWKQuIR+t1ckzjXkHQQYL 10kUSKF/4brA0NNueAtxI4fNxL3jbqxGMnQAebU3fET02rLHAO5COWgiwN7fbYDkQL llK+9WtI4WYpwIrjairj0m4tYH9cEhnBUIADkRk97vvlxCdDrcF4VVrTnAAxAjZv6N lHgV/SWFzU/b/8wr4tG9ryE13gxk/LIO4CW4xakiVOmRz5LI4Tciiu6WXRQOfi9B5d LuPeEfW7jMIJKmKQIFD6RR84apLyj78OcmIsXy+Dc8ay0B7h9+901EbhvNzyonMYki 50NcHjqujq1wg== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: "Steven Rostedt (Google)" , Ritesh Harjani , Sasha Levin , mingo@redhat.com Subject: [PATCH AUTOSEL 5.4 22/25] tracing: Have TRACE_DEFINE_ENUM affect trace event types as well Date: Wed, 30 Mar 2022 07:52:22 -0400 Message-Id: <20220330115225.1672278-22-sashal@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220330115225.1672278-1-sashal@kernel.org> References: <20220330115225.1672278-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: "Steven Rostedt (Google)" [ Upstream commit b3bc8547d3be60898818885f5bf22d0a62e2eb48 ] The macro TRACE_DEFINE_ENUM is used to convert enums in the kernel to their actual value when they are exported to user space via the trace event format file. Currently only the enums in the "print fmt" (TP_printk in the TRACE_EVENT macro) have the enums converted. But the enums can be used to denote array size: field:unsigned int fc_ineligible_rc[EXT4_FC_REASON_MAX]; offset:12; size:36; signed:0; The EXT4_FC_REASON_MAX has no meaning to userspace but it needs to know that information to know how to parse the array. Have the array indexes also be parsed as well. Link: https://lore.kernel.org/all/cover.1646922487.git.riteshh@linux.ibm.com/ Reported-by: Ritesh Harjani Tested-by: Ritesh Harjani Signed-off-by: Steven Rostedt (Google) Signed-off-by: Sasha Levin --- kernel/trace/trace_events.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index 4acc77e049e5..c1363f9d8d48 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c @@ -2202,6 +2202,33 @@ static void update_event_printk(struct trace_event_call *call, } } +static void update_event_fields(struct trace_event_call *call, + struct trace_eval_map *map) +{ + struct ftrace_event_field *field; + struct list_head *head; + char *ptr; + int len = strlen(map->eval_string); + + head = trace_get_fields(call); + list_for_each_entry(field, head, link) { + ptr = strchr(field->type, '['); + if (!ptr) + continue; + ptr++; + + if (!isalpha(*ptr) && *ptr != '_') + continue; + + if (strncmp(map->eval_string, ptr, len) != 0) + continue; + + ptr = eval_replace(ptr, map, len); + /* enum/sizeof string smaller than value */ + WARN_ON_ONCE(!ptr); + } +} + void trace_event_eval_update(struct trace_eval_map **map, int len) { struct trace_event_call *call, *p; @@ -2237,6 +2264,7 @@ void trace_event_eval_update(struct trace_eval_map **map, int len) first = false; } update_event_printk(call, map[i]); + update_event_fields(call, map[i]); } } } -- 2.34.1