From patchwork Tue Feb 7 17:28:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 54013 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2979073wrn; Tue, 7 Feb 2023 09:34:07 -0800 (PST) X-Google-Smtp-Source: AK7set8PTqdXEgFbUPz9FzLIZe1qpRdLw9gDxHFWVoXd6vpZjMy+d/VW8FSFzgoDEaz6sGwYF/9q X-Received: by 2002:a05:6a20:7da6:b0:c2:fab0:3cac with SMTP id v38-20020a056a207da600b000c2fab03cacmr89197pzj.0.1675791247663; Tue, 07 Feb 2023 09:34:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675791247; cv=none; d=google.com; s=arc-20160816; b=VyvLAsi43d7AsUR8SZqIKrglih6dfEGukNTR2H9vml1N+QfBS70YxrrvgbSAnA/8nw X4Vlz7mZMioyg8gvxnJjnvzU7PgiCyznmZjJfaZQM5f5Eok/ESFYHOXhQKEnxPJ7LoWP jitzH4ECpQRi/1TA+WJHnG46gdWCYrYT3AYbbvfpPwd4LR1RJ54owsnFZ7LB3I5nnEDc uVvk011MOkD2FuVMmZ+/UgYzch0gldgCpNJEw3irp34C5gBwQEsjqWxgGuYzUi/wl7Kh B+bwOisMGsmjWvR3mXHo04LcJgndmv2IHh7RKmfYZywI8+IBW6fLQEMWhO92/aRYTy2L HXaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:subject:cc:to:from:date :user-agent:message-id; bh=6JIvxit1ABalANZIymDNRcpKkNuXepxzqr+a0KCvue8=; b=RXLmgCCusty/Pi/Y/bkjijR/areuIl7FD8FCgV2fIx4x1RLMqGs6VaQYQrhSixaSMW 3bVN/V2wQF6Ygj7WZTXVlQx+4bZEFTys5e6WGVByWtCGR3WfjPja18HVTZcdgseV9gr2 GWtySDib77nhCtgBrg1X3kEUx6orpD8UqKJWAs89tvnLoz6OPLLvLjqSdrTZor0/7p6U 6EACH43yW9wdgObgspzlWSbu8yp+VDwBIA3pv+Y4N0kvqM1FqhIKbQtkpkiz1gr5FX4F pSownX7tEMY4Cuf+g8uJeNhxJ0eeAmbtGo1vZcFO/HyZBMa/BOCCcepG18WoNZiV2t+m Rk7g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d123-20020a633681000000b00476ca041d89si15199125pga.790.2023.02.07.09.33.54; Tue, 07 Feb 2023 09:34:07 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231743AbjBGRax (ORCPT + 99 others); Tue, 7 Feb 2023 12:30:53 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36264 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231645AbjBGRak (ORCPT ); Tue, 7 Feb 2023 12:30:40 -0500 Received: from sin.source.kernel.org (sin.source.kernel.org [IPv6:2604:1380:40e1:4800::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D499F21A25; Tue, 7 Feb 2023 09:30:30 -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 sin.source.kernel.org (Postfix) with ESMTPS id 0279BCE1E47; Tue, 7 Feb 2023 17:30:29 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6F72FC4339B; Tue, 7 Feb 2023 17:30:27 +0000 (UTC) Received: from rostedt by gandalf.local.home with local (Exim 4.96) (envelope-from ) id 1pPRnW-006Rwl-1B; Tue, 07 Feb 2023 12:30:26 -0500 Message-ID: <20230207173026.186210158@goodmis.org> User-Agent: quilt/0.66 Date: Tue, 07 Feb 2023 12:28:50 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: Masami Hiramatsu , Andrew Morton , Ross Zwisler , Randy Dunlap Subject: [PATCH v2 1/4] tracing: Add creation of instances at boot command line References: <20230207172849.461894073@goodmis.org> MIME-Version: 1.0 X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1757194483222091247?= X-GMAIL-MSGID: =?utf-8?q?1757194483222091247?= From: "Steven Rostedt (Google)" Add kernel command line to add tracing instances. This only creates instances at boot but still does not enable any events to them. Later changes will extend this command line to add enabling of events, filters, and triggers. As well as possibly redirecting trace_printk()! Cc: Randy Dunlap Reviewed-by: Ross Zwisler Signed-off-by: Steven Rostedt (Google) --- Changes since v1: https://lkml.kernel.org/r/20230111145842.376427803@goodmis.org - Fixed document grammar (Randy Dunlap) - Removed extra workqueue.h include (Ross Zwisler) - Use sizeof(boot_instance_info) than using COMMAND_LINE_SIZE) .../admin-guide/kernel-parameters.txt | 6 +++ kernel/trace/trace.c | 50 +++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index 6cfa6e3996cf..9545da5ed849 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -6272,6 +6272,12 @@ comma-separated list of trace events to enable. See also Documentation/trace/events.rst + trace_instance=[instance-info] + [FTRACE] Create a ring buffer instance early in boot up. + This will be listed in: + + /sys/kernel/tracing/instances + trace_options=[option-list] [FTRACE] Enable or disable tracer options at boot. The option-list is a comma delimited list of options diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index b90eecd27dfc..863716fcca49 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -49,6 +49,8 @@ #include #include +#include /* COMMAND_LINE_SIZE */ + #include "trace.h" #include "trace_output.h" @@ -186,6 +188,9 @@ static char *default_bootup_tracer; static bool allocate_snapshot; static bool snapshot_at_boot; +static char boot_instance_info[COMMAND_LINE_SIZE] __initdata; +static int boot_instance_index; + static int __init set_cmdline_ftrace(char *str) { strlcpy(bootup_tracer_buf, str, MAX_TRACER_SIZE); @@ -239,6 +244,23 @@ static int __init boot_snapshot(char *str) __setup("ftrace_boot_snapshot", boot_snapshot); +static int __init boot_instance(char *str) +{ + char *slot = boot_instance_info + boot_instance_index; + int left = sizeof(boot_instance_info) - boot_instance_index; + int ret; + + if (strlen(str) >= left) + return -1; + + ret = snprintf(slot, left, "%s\t", str); + boot_instance_index += ret; + + return 1; +} +__setup("trace_instance=", boot_instance); + + static char trace_boot_options_buf[MAX_TRACER_SIZE] __initdata; static int __init set_trace_boot_options(char *str) @@ -10144,6 +10166,31 @@ ssize_t trace_parse_run_command(struct file *file, const char __user *buffer, return ret; } +__init static void enable_instances(void) +{ + struct trace_array *tr; + char *curr_str; + char *str; + char *tok; + + /* A tab is always appended */ + boot_instance_info[boot_instance_index - 1] = '\0'; + str = boot_instance_info; + + while ((curr_str = strsep(&str, "\t"))) { + + tok = strsep(&curr_str, ","); + + tr = trace_array_get_by_name(tok); + if (!tr) { + pr_warn("Failed to create instance buffer %s\n", curr_str); + continue; + } + /* Allow user space to delete it */ + trace_array_put(tr); + } +} + __init static int tracer_alloc_buffers(void) { int ring_buf_size; @@ -10302,6 +10349,9 @@ void __init early_trace_init(void) void __init trace_init(void) { trace_event_init(); + + if (boot_instance_index) + enable_instances(); } __init static void clear_boot_tracer(void) From patchwork Tue Feb 7 17:28:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 54012 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2978860wrn; Tue, 7 Feb 2023 09:33:40 -0800 (PST) X-Google-Smtp-Source: AK7set8QfD+h3xVpqHGhR4ewSawe9gBeBW1BaUCk553tlEhXJChBGKw+xK4oUqPJRgrKYMfxtX4B X-Received: by 2002:a17:90a:6347:b0:230:3af9:176 with SMTP id v7-20020a17090a634700b002303af90176mr12964835pjs.7.1675791219727; Tue, 07 Feb 2023 09:33:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675791219; cv=none; d=google.com; s=arc-20160816; b=YNw8xFFf80LjzGpSGXRaMquvP/xs7Ty8LA61SuvDNZwyNgDccHxMbQfKvoonznEB2i aR4sIMaLFOUJdbSSqpHd+e6sWWaIY66PnzEoLtT43jeQInPsN0tdh7mClrJnaabMHF6n 7/qlpGqvlJevaJdD89DPwOqldLbKCzEO0Xk2+hgkEbKnGvhYqq99f+WF3YkGxN0DVFQE +2cfFu04jK/005Byln4gEjxcuvla4Qc/LA4VRWNM3HQyKp5+3v3TmfjEAd8tevwaUoJt dnBVpIkxyDwSJiNxGgRaYBKtiUvghuKj/nG6wpI+VHqzFJ7XzMWn+8YsWNm+vpzuNoLq V6gA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:subject:cc:to:from:date :user-agent:message-id; bh=JcIcca+ft5IYTnGxC7vpT6/FaIJqoH/QcnISHVaZ+aY=; b=s3Mwxgja0Nq9C4C95jRMQkGQQzaNWH10te06ocubJythbbqWalXnpg1xc+l8VqtiTA qZVxFBimM6KrWfC5YSWp87VZeFUkBKE6wh2jBzxxHPDvxb7TBLpXsii1qqve6FoTDH3z Erk5VuKgTyaMgh+KqwqjhEIKoDREBhv+f6g3WFwb1txZKggVEbtoChZfyJDn+Ydc4fj9 O485aI0s+udixuYmmYgCtyNOwxrw2KvASWqFHJ8VIpTd6iz4Pxt0zsd9oQuw6x9y+kQj hoVTf+IbAcZh5U2GVJ5QcbVLX9wdBiSByGxvFfnx/MJUpWFE1p1zb8GpzA1E6ROxc3+c rzlw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id kk16-20020a17090b4a1000b00230fada49d6si1564413pjb.76.2023.02.07.09.33.26; Tue, 07 Feb 2023 09:33:39 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231779AbjBGRau (ORCPT + 99 others); Tue, 7 Feb 2023 12:30:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36154 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231618AbjBGRah (ORCPT ); Tue, 7 Feb 2023 12:30:37 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 932B421948; Tue, 7 Feb 2023 09:30:30 -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 DA7B1B81A60; Tue, 7 Feb 2023 17:30:28 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 94954C433A1; Tue, 7 Feb 2023 17:30:27 +0000 (UTC) Received: from rostedt by gandalf.local.home with local (Exim 4.96) (envelope-from ) id 1pPRnW-006RxJ-1o; Tue, 07 Feb 2023 12:30:26 -0500 Message-ID: <20230207173026.386114535@goodmis.org> User-Agent: quilt/0.66 Date: Tue, 07 Feb 2023 12:28:51 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: Masami Hiramatsu , Andrew Morton , Ross Zwisler Subject: [PATCH v2 2/4] tracing: Add enabling of events to boot instances References: <20230207172849.461894073@goodmis.org> MIME-Version: 1.0 X-Spam-Status: No, score=-6.7 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_HI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1757194453575465424?= X-GMAIL-MSGID: =?utf-8?q?1757194453575465424?= From: "Steven Rostedt (Google)" Add the format of: trace_instance=foo,sched:sched_switch,irq_handler_entry,initcall That will create the "foo" instance and enable the sched_switch event (here were the "sched" system is explicitly specified), the irq_handler_entry event, and all events under the system initcall. Reviewed-by: Ross Zwisler Signed-off-by: Steven Rostedt (Google) --- Documentation/admin-guide/kernel-parameters.txt | 14 ++++++++++++++ kernel/trace/trace.c | 4 ++++ kernel/trace/trace.h | 2 ++ kernel/trace/trace_events.c | 9 ++++----- 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index 9545da5ed849..40304dc3d319 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -6278,6 +6278,20 @@ /sys/kernel/tracing/instances + Events can be enabled at the time the instance is created + via: + + trace_instance=,:,: + + Note, the ":" portion is optional if the event is + unique. + + trace_instance=foo,sched:sched_switch,irq_handler_entry,initcall + + will enable the "sched_switch" event (note, the "sched:" is optional, and + the same thing would happen if it was left off). The irq_handler_entry + event, and all events under the "initcall" system. + trace_options=[option-list] [FTRACE] Enable or disable tracer options at boot. The option-list is a comma delimited list of options diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 863716fcca49..5b16af9e7d30 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -10188,6 +10188,10 @@ __init static void enable_instances(void) } /* Allow user space to delete it */ trace_array_put(tr); + + while ((tok = strsep(&curr_str, ","))) { + early_enable_events(tr, tok, true); + } } } diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index d16929dd0f08..f10bf804dd2b 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@ -1334,6 +1334,8 @@ DECLARE_PER_CPU(int, trace_buffered_event_cnt); void trace_buffered_event_disable(void); void trace_buffered_event_enable(void); +void early_enable_events(struct trace_array *tr, char *buf, bool disable_first); + static inline void __trace_event_discard_commit(struct trace_buffer *buffer, struct ring_buffer_event *event) diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index b07931ad97de..cf3fd74fa675 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c @@ -3750,10 +3750,9 @@ static __init int event_trace_memsetup(void) return 0; } -static __init void -early_enable_events(struct trace_array *tr, bool disable_first) +__init void +early_enable_events(struct trace_array *tr, char *buf, bool disable_first) { - char *buf = bootup_event_buf; char *token; int ret; @@ -3806,7 +3805,7 @@ static __init int event_trace_enable(void) */ __trace_early_add_events(tr); - early_enable_events(tr, false); + early_enable_events(tr, bootup_event_buf, false); trace_printk_start_comm(); @@ -3834,7 +3833,7 @@ static __init int event_trace_enable_again(void) if (!tr) return -ENODEV; - early_enable_events(tr, true); + early_enable_events(tr, bootup_event_buf, true); return 0; } From patchwork Tue Feb 7 17:28:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 54014 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2979143wrn; Tue, 7 Feb 2023 09:34:18 -0800 (PST) X-Google-Smtp-Source: AK7set8TJ1gpvwOIHSwktiiwHKT9+4Nw2Ozmh17qZmLfsrH7V1T2cTN9iUnUf1JSPwkp00mCbK30 X-Received: by 2002:a05:6a20:9382:b0:bd:c0c:1e74 with SMTP id x2-20020a056a20938200b000bd0c0c1e74mr4932926pzh.5.1675791257918; Tue, 07 Feb 2023 09:34:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675791257; cv=none; d=google.com; s=arc-20160816; b=lgCUpBt6mAtXH3SjAib8/TODmpymYA8icUv0+7zMoS1kL/CSDIC1/Y0rpKifoGeWwF jMN05dWaFQnJCsTV0F10wLwYiWOllzuV1Z/SzqrCGLBYykNUiY8OeXFrkk1ECpWVmmfy 2IMR5DYOhQA6+muAotv+rY1kwlGP92ryIuq9bvVsDPJNls3jnsaBUfWxUpcxeVFSEFQT n4RBTVqDDKVH7upZy6NQX/hMwQoaAfub4oeeuv9wkUIIjJOKiFGfGltHzlPYiG8k7k/x fZIpI735K747haTSycDbvBNzjoX6d22G3j6zJgoBOcjP8dh2KY4OF87yvch8CtPTrFis 4f3w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:subject:cc:to:from:date :user-agent:message-id; bh=gvQaqjFkLuRnBmcD+KAXZONVeY7Yes07QqsCg31tPWY=; b=qcc4xc7pbJeO6P6iQ/OXPLeliLziZvUwB0LkUcYyGS0HHJiJ/zOGZdsPqMxt3puygW iKSY6yCS7h/eAidf4TkSogX+bE+8HvLcVb3ihVAVaxC1RxDe/HPDQ9avANSCBUxsVwiV jKoEZlclGJJq3kEIlkCZvWvXRrg3zxFXttEam7rnQLX3k5E8vlBkQmSuFDYDYj2nEFJY las7WRoGxaO1xBbAB4tF4gqYU4a8GyOouznmbryRwFVFyR6QoGPMy4iInFGqqlnQIxrZ a07Spy6Li6R2FzMWkJrtfMsa92Hm2isabF3tblWB5p5W1IQLdwjPLLTgCmeWgQFXzCxj XDgw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id r73-20020a632b4c000000b0049f478df3b8si15738990pgr.702.2023.02.07.09.33.34; Tue, 07 Feb 2023 09:34:17 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230048AbjBGRaf (ORCPT + 99 others); Tue, 7 Feb 2023 12:30:35 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36080 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230296AbjBGRad (ORCPT ); Tue, 7 Feb 2023 12:30:33 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 93BB62196E; Tue, 7 Feb 2023 09:30:30 -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 2C018B81A61; Tue, 7 Feb 2023 17:30:29 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D9D60C433A7; Tue, 7 Feb 2023 17:30:27 +0000 (UTC) Received: from rostedt by gandalf.local.home with local (Exim 4.96) (envelope-from ) id 1pPRnW-006Rxr-2U; Tue, 07 Feb 2023 12:30:26 -0500 Message-ID: <20230207173026.584717290@goodmis.org> User-Agent: quilt/0.66 Date: Tue, 07 Feb 2023 12:28:52 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: Masami Hiramatsu , Andrew Morton , Ross Zwisler Subject: [PATCH v2 3/4] tracing: Add trace_array_puts() to write into instance References: <20230207172849.461894073@goodmis.org> MIME-Version: 1.0 X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1757194494221126081?= X-GMAIL-MSGID: =?utf-8?q?1757194494221126081?= From: "Steven Rostedt (Google)" Add a generic trace_array_puts() that can be used to "trace_puts()" into an allocated trace_array instance. This is just another variant of trace_array_printk(). Reviewed-by: Ross Zwisler Signed-off-by: Steven Rostedt (Google) --- Changes since v1: https://lkml.kernel.org/r/20230111145842.694147820@goodmis.org - Remove unneeded @ip in kernel-doc (Ross Zwisler) include/linux/trace.h | 12 ++++++++++++ kernel/trace/trace.c | 27 +++++++++++++++++---------- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/include/linux/trace.h b/include/linux/trace.h index 80ffda871749..2a70a447184c 100644 --- a/include/linux/trace.h +++ b/include/linux/trace.h @@ -33,6 +33,18 @@ struct trace_array; int register_ftrace_export(struct trace_export *export); int unregister_ftrace_export(struct trace_export *export); +/** + * trace_array_puts - write a constant string into the trace buffer. + * @tr: The trace array to write to + * @str: The constant string to write + */ +#define trace_array_puts(tr, str) \ + ({ \ + str ? __trace_array_puts(tr, _THIS_IP_, str, strlen(str)) : -1; \ + }) +int __trace_array_puts(struct trace_array *tr, unsigned long ip, + const char *str, int size); + void trace_printk_init_buffers(void); __printf(3, 4) int trace_array_printk(struct trace_array *tr, unsigned long ip, diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 5b16af9e7d30..9918bf7441ed 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -1023,13 +1023,8 @@ __buffer_unlock_commit(struct trace_buffer *buffer, struct ring_buffer_event *ev ring_buffer_unlock_commit(buffer); } -/** - * __trace_puts - write a constant string into the trace buffer. - * @ip: The address of the caller - * @str: The constant string to write - * @size: The size of the string. - */ -int __trace_puts(unsigned long ip, const char *str, int size) +int __trace_array_puts(struct trace_array *tr, unsigned long ip, + const char *str, int size) { struct ring_buffer_event *event; struct trace_buffer *buffer; @@ -1037,7 +1032,7 @@ int __trace_puts(unsigned long ip, const char *str, int size) unsigned int trace_ctx; int alloc; - if (!(global_trace.trace_flags & TRACE_ITER_PRINTK)) + if (!(tr->trace_flags & TRACE_ITER_PRINTK)) return 0; if (unlikely(tracing_selftest_running || tracing_disabled)) @@ -1046,7 +1041,7 @@ int __trace_puts(unsigned long ip, const char *str, int size) alloc = sizeof(*entry) + size + 2; /* possible \n added */ trace_ctx = tracing_gen_ctx(); - buffer = global_trace.array_buffer.buffer; + buffer = tr->array_buffer.buffer; ring_buffer_nest_start(buffer); event = __trace_buffer_lock_reserve(buffer, TRACE_PRINT, alloc, trace_ctx); @@ -1068,11 +1063,23 @@ int __trace_puts(unsigned long ip, const char *str, int size) entry->buf[size] = '\0'; __buffer_unlock_commit(buffer, event); - ftrace_trace_stack(&global_trace, buffer, trace_ctx, 4, NULL); + ftrace_trace_stack(tr, buffer, trace_ctx, 4, NULL); out: ring_buffer_nest_end(buffer); return size; } +EXPORT_SYMBOL_GPL(__trace_array_puts); + +/** + * __trace_puts - write a constant string into the trace buffer. + * @ip: The address of the caller + * @str: The constant string to write + * @size: The size of the string. + */ +int __trace_puts(unsigned long ip, const char *str, int size) +{ + return __trace_array_puts(&global_trace, ip, str, size); +} EXPORT_SYMBOL_GPL(__trace_puts); /** From patchwork Tue Feb 7 17:28:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 54011 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2978842wrn; Tue, 7 Feb 2023 09:33:37 -0800 (PST) X-Google-Smtp-Source: AK7set+Wkk/qQ640JPiUNG9VMjY0o3BOGo7Fnkthy4+m53Bi6mcib7Camkhio7oq1wMqCBnqKE1V X-Received: by 2002:a17:90a:19c9:b0:22c:4e00:de90 with SMTP id 9-20020a17090a19c900b0022c4e00de90mr4602740pjj.43.1675791217122; Tue, 07 Feb 2023 09:33:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675791217; cv=none; d=google.com; s=arc-20160816; b=okIJXT44ZrVym/5LY0OIoo1xzNMED3Rt/7mgcI/tm6aSv77GXq9xp1ynNHV3ypsSv4 LE/IQxmKKzc0xpzTrNgIJ/lsHYppr2l0QProO+lKeUPKMInhwnXiQ4AMqK/rht/zsdxb QsHSYzPsia6xzNfgKvH10LI5OPyd4OfwYtESUKtW3XVtBG0wmfWOyWzIELZeMRfTq2NV 5kbM3N9pNTLXEZobY/5qMHSbNftSasbjWg1Zh9cegZsc0NQ3NfppoFBr2Wa25wE82f6S O/VY3OLGBJTPLEvX/KFl9R6S/O1zcUGjbJr4nrZZAxVjD0Lrr0X1lZXjlMKik0b4CUmg yWjQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:subject:cc:to:from:date :user-agent:message-id; bh=toSZ07HI3pZJ37edQPqA5c3bAQIYsBTW1D6b4iR9eBg=; b=lQK+rsJfOpDAXjjU/XYeaB7U5z15JYkl4eZSfrAR3/9uzbkZ23KOQcNHlUs7KrpGbv 3kPHEyVKy+iMA9QseaTx6MUqZSsdktk2gzGdAVusF2X2IeHx98LqKCDylbk/06HYea7S K9ExRKcPSlH8C0THtWg9qEOsB/jpziXEavExt4Ozas25jbSR5jsQVdvwN9jQtclDVrpk hpqCHraJ0I5shIoMHfecZ0h8Zh+COJuK54KrJgUu4V4YHyK+RC/WZ0bukVk78xKpeMAA 0TlWnoCBkHpq4vPK2qScbmxxfEa7NiNAeqI46/DpUP3Qt5gJBkKXahMtTCiesJi36jTj ShBg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id gj12-20020a17090b108c00b00230f42f99b4si1893015pjb.63.2023.02.07.09.33.24; Tue, 07 Feb 2023 09:33:37 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231642AbjBGRak (ORCPT + 99 others); Tue, 7 Feb 2023 12:30:40 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36110 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231586AbjBGRag (ORCPT ); Tue, 7 Feb 2023 12:30:36 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D87EF22A1F; Tue, 7 Feb 2023 09:30:30 -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 733DFB81A65; Tue, 7 Feb 2023 17:30:29 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1142FC433AA; Tue, 7 Feb 2023 17:30:28 +0000 (UTC) Received: from rostedt by gandalf.local.home with local (Exim 4.96) (envelope-from ) id 1pPRnW-006RyP-3A; Tue, 07 Feb 2023 12:30:26 -0500 Message-ID: <20230207173026.792774721@goodmis.org> User-Agent: quilt/0.66 Date: Tue, 07 Feb 2023 12:28:53 -0500 From: Steven Rostedt To: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: Masami Hiramatsu , Andrew Morton , Ross Zwisler Subject: [PATCH v2 4/4] tracing: Allow boot instances to have snapshot buffers References: <20230207172849.461894073@goodmis.org> MIME-Version: 1.0 X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1757194450983600455?= X-GMAIL-MSGID: =?utf-8?q?1757194450983600455?= From: "Steven Rostedt (Google)" Add to ftrace_boot_snapshot, "=" name, where the instance will get a snapshot buffer, and will take a snapshot at the end of boot (which will save the boot traces). Reviewed-by: Ross Zwisler Signed-off-by: Steven Rostedt (Google) --- Changes since v1: https://lkml.kernel.org/r/20230111145842.847715402@goodmis.org - Make stub function for do_allocate_snapshot() for !CONFIG_TRACER_MAX_TRACE (kernel test robot) - Compare strstr() to NULL and not zero (kernel test robot) - Use sizeof(boot_snapshot_info) instead of COMMAND_LINE_SIZE (Ross Zwisler) .../admin-guide/kernel-parameters.txt | 9 +++ kernel/trace/trace.c | 79 +++++++++++++++++-- 2 files changed, 81 insertions(+), 7 deletions(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index 40304dc3d319..7fa1ee4ba910 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -1532,6 +1532,15 @@ boot up that is likely to be overridden by user space start up functionality. + Optionally, the snapshot can also be defined for a tracing + instance that was created by the trace_instance= command + line parameter. + + trace_instance=foo,sched_switch ftrace_boot_snapshot=foo + + The above will cause the "foo" tracing instance to trigger + a snapshot at the end of boot up. + ftrace_dump_on_oops[=orig_cpu] [FTRACE] will dump the trace buffers on oops. If no parameter is passed, ftrace will dump diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 9918bf7441ed..97c88711f270 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -191,6 +191,9 @@ static bool snapshot_at_boot; static char boot_instance_info[COMMAND_LINE_SIZE] __initdata; static int boot_instance_index; +static char boot_snapshot_info[COMMAND_LINE_SIZE] __initdata; +static int boot_snapshot_index; + static int __init set_cmdline_ftrace(char *str) { strlcpy(bootup_tracer_buf, str, MAX_TRACER_SIZE); @@ -227,9 +230,22 @@ __setup("traceoff_on_warning", stop_trace_on_warning); static int __init boot_alloc_snapshot(char *str) { - allocate_snapshot = true; - /* We also need the main ring buffer expanded */ - ring_buffer_expanded = true; + char *slot = boot_snapshot_info + boot_snapshot_index; + int left = sizeof(boot_snapshot_info) - boot_snapshot_index; + int ret; + + if (str[0] == '=') { + str++; + if (strlen(str) >= left) + return -1; + + ret = snprintf(slot, left, "%s\t", str); + boot_snapshot_index += ret; + } else { + allocate_snapshot = true; + /* We also need the main ring buffer expanded */ + ring_buffer_expanded = true; + } return 1; } __setup("alloc_snapshot", boot_alloc_snapshot); @@ -9254,10 +9270,6 @@ static int allocate_trace_buffers(struct trace_array *tr, int size) } tr->allocated_snapshot = allocate_snapshot; - /* - * Only the top level trace array gets its snapshot allocated - * from the kernel command line. - */ allocate_snapshot = false; #endif @@ -10173,6 +10185,47 @@ ssize_t trace_parse_run_command(struct file *file, const char __user *buffer, return ret; } +#ifdef CONFIG_TRACER_MAX_TRACE +__init static bool tr_needs_alloc_snapshot(const char *name) +{ + char *test; + int len = strlen(name); + bool ret; + + if (!boot_snapshot_index) + return false; + + if (strncmp(name, boot_snapshot_info, len) == 0 && + boot_snapshot_info[len] == '\t') + return true; + + test = kmalloc(strlen(name) + 3, GFP_KERNEL); + if (!test) + return false; + + sprintf(test, "\t%s\t", name); + ret = strstr(boot_snapshot_info, test) == NULL; + kfree(test); + return ret; +} + +__init static void do_allocate_snapshot(const char *name) +{ + if (!tr_needs_alloc_snapshot(name)) + return; + + /* + * When allocate_snapshot is set, the next call to + * allocate_trace_buffers() (called by trace_array_get_by_name()) + * will allocate the snapshot buffer. That will alse clear + * this flag. + */ + allocate_snapshot = true; +} +#else +static inline void do_allocate_snapshot(const char *name) { } +#endif + __init static void enable_instances(void) { struct trace_array *tr; @@ -10188,6 +10241,9 @@ __init static void enable_instances(void) tok = strsep(&curr_str, ","); + if (IS_ENABLED(CONFIG_TRACER_MAX_TRACE)) + do_allocate_snapshot(tok); + tr = trace_array_get_by_name(tok); if (!tr) { pr_warn("Failed to create instance buffer %s\n", curr_str); @@ -10335,10 +10391,19 @@ __init static int tracer_alloc_buffers(void) void __init ftrace_boot_snapshot(void) { + struct trace_array *tr; + if (snapshot_at_boot) { tracing_snapshot(); internal_trace_puts("** Boot snapshot taken **\n"); } + + list_for_each_entry(tr, &ftrace_trace_arrays, list) { + if (tr == &global_trace) + continue; + trace_array_puts(tr, "** Boot snapshot taken **\n"); + tracing_snapshot_instance(tr); + } } void __init early_trace_init(void)