Received: by 2002:a05:7208:c250:b0:86:f851:443 with SMTP id w16csp44850rbd; Tue, 11 Jun 2024 12:29:15 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCXN/xPjc+OAMLjQZEr5x7HnpRngNbRawMsm2J7AmrD7YpPHlXGEW9liDj6fTLEyy20nwjSgNixRsf1DN6VNmfp02qTTyvayh0i2so70XQ== X-Google-Smtp-Source: AGHT+IF9nE4Keh5RA+gV94Ex30nGQjQCo0Vh5c5GXKltle/KBBYsWPoBM/5Sqdmzz7SioYRMOJln X-Received: by 2002:a05:6102:2c7:b0:48d:7926:db64 with SMTP id ada2fe7eead31-48d7926dfa6mr4846529137.14.1718134155160; Tue, 11 Jun 2024 12:29:15 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1718134155; cv=pass; d=google.com; s=arc-20160816; b=wJYDLrwUCIkeENn7YIxBD1mI/myv42V1WYOIgj8fgNFmDIXFDshLN2xRrkB2jVj/g9 tkAsgFasEaj7cTJir0QZVqJpLDz/JtzV0cEA88sWA8VV83IXXW/HBDyQEkXP506uVSCr f0KuHY4/DeWSga3nrM/0GfFl9kQslGaS8PjXgc68xvVGfgVGym1k42pJGlaq8Tcxx570 8LQReIdDyL04d2rDBZa3ByliodyX+Pq0Q+FLon0HK1ypDdj5g1bxsvurpXlOvFO4rLXY cphtTDFxrBGq/HG3L0ZnI5pp2M3pKMA6E3i68JSHhVthOvZA9fMdwytAG3MP1jVLkc+e 09lw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:list-unsubscribe:list-subscribe:list-id:precedence :references:subject:cc:to:from:date:user-agent:message-id; bh=46knycWt0Uq1XltKC7BdtPlSJY9ECh4FlnnpGaLSSKU=; fh=VQi8WXJrSHXxsfwqC9oAfi6LEiQC0Qv/w+aqrHCHJLs=; b=DMEp3hu+laqhClbIlef4D4gbPyz3fv9yp/oMzs6p4XQX9tbJe3jyk+wOjb4FEE8h0k vD5xCdTxXwozXuZMiOsd4py4JJF9y9be/paPAMC4TtumY2Ryvzohl0IvmMu8EYeIVmo/ 4Sqm8hbmWmPvvTvRNoHUSKFvHB4kGPPjPwZwqJmu4NG8FjLgQrAIzo9P7d/RfT7Xhi5f YlyA2j3d3TLU+1xC29X98IrUKGt/AX+JKFvP9NYodfp3QoqeV5m1cvgLg5J9EhJOikE/ zcyAFMMa+Z0GS6rwI1ZOt+KtNOgJSaQKNynMUbPGnZ30KdYr1wG5TmksoOZhjNA4PUkB EWxQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1); spf=pass (google.com: domain of linux-kernel+bounces-210501-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-210501-linux.lists.archive=gmail.com@vger.kernel.org" Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id af79cd13be357-79581331c2fsi699436785a.755.2024.06.11.12.29.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Jun 2024 12:29:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-210501-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; arc=pass (i=1); spf=pass (google.com: domain of linux-kernel+bounces-210501-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-210501-linux.lists.archive=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id E108F1C2244C for ; Tue, 11 Jun 2024 19:29:11 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 41F3814F13D; Tue, 11 Jun 2024 19:28:52 +0000 (UTC) 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 93DA082490; Tue, 11 Jun 2024 19:28:51 +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=1718134131; cv=none; b=XJqUNOIkJ7I1de546U59SHqRV9giun35peXEjNETsFiP+WVAysncobttYi+g3nF/a8y6Uq67NKpD+Lb/GEVvB8GvqZ8WCdxu5bqO5rS6olLkbFg/ELaAIqBdxAX7QMgcQnf1m2WcTaPRCyUjILigeApQFywP3YPVgC8YV0muAvc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718134131; c=relaxed/simple; bh=+Nrr5QPcUeFmKDpIeE4S3vqLr11X9s3E+wEcO1onOJk=; h=Message-ID:Date:From:To:Cc:Subject:References:MIME-Version: Content-Type; b=UrOqBTfC6SGEyDQw0F4lY+zEFq7eeHFWodkCkvvNJDH29zBvLeWIjHQhgtHqKDE1kMMO2SJGMfUw1SVJIAp5afuROfzRDdrWO2cKAnhEvjEj4AK/+Kxh7nf83wtT9SGA83yhvSXINROhT1XN82AI0t6JmH5KVHnK74ZgIxuUd7Y= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 76708C4AF66; Tue, 11 Jun 2024 19:28:51 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.97) (envelope-from ) id 1sH7B6-00000001TrT-04Mk; Tue, 11 Jun 2024 15:29:08 -0400 Message-ID: <20240611192907.877676152@goodmis.org> User-Agent: quilt/0.68 Date: Tue, 11 Jun 2024 15:28:32 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton , Vincent Donnefort , Joel Fernandes , Daniel Bristot de Oliveira , Ingo Molnar , Peter Zijlstra , suleiman@google.com, Thomas Gleixner , Vineeth Pillai , Youssef Esmat , Beau Belgrave , Alexander Graf , Baoquan He , Borislav Petkov , "Paul E. McKenney" , David Howells , Mike Rapoport , Dave Hansen , Tony Luck , Guenter Roeck , Ross Zwisler , Kees Cook Subject: [PATCH v4 04/13] tracing: Implement creating an instance based on a given memory region References: <20240611192828.691638177@goodmis.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 From: "Steven Rostedt (Google)" Allow for creating a new instance by passing in an address and size to map the ring buffer for the instance to. This will allow features like a pstore memory mapped region to be used for an tracing instance ring buffer that can be retrieved from one boot to the next. Signed-off-by: Steven Rostedt (Google) --- kernel/trace/trace.c | 50 +++++++++++++++++++++++++++++++++++--------- kernel/trace/trace.h | 4 ++++ 2 files changed, 44 insertions(+), 10 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 578a49ff5c32..ff2b504fbe00 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -4921,6 +4921,11 @@ static int tracing_open(struct inode *inode, struct file *file) static bool trace_ok_for_array(struct tracer *t, struct trace_array *tr) { +#ifdef CONFIG_TRACER_SNAPSHOT + /* arrays with mapped buffer range do not have snapshots */ + if (tr->range_addr_start && t->use_max_tr) + return false; +#endif return (tr->flags & TRACE_ARRAY_FL_GLOBAL) || t->allow_instances; } @@ -8664,11 +8669,13 @@ tracing_init_tracefs_percpu(struct trace_array *tr, long cpu) tr, cpu, &tracing_entries_fops); #ifdef CONFIG_TRACER_SNAPSHOT - trace_create_cpu_file("snapshot", TRACE_MODE_WRITE, d_cpu, - tr, cpu, &snapshot_fops); + if (!tr->range_addr_start) { + trace_create_cpu_file("snapshot", TRACE_MODE_WRITE, d_cpu, + tr, cpu, &snapshot_fops); - trace_create_cpu_file("snapshot_raw", TRACE_MODE_READ, d_cpu, - tr, cpu, &snapshot_raw_fops); + trace_create_cpu_file("snapshot_raw", TRACE_MODE_READ, d_cpu, + tr, cpu, &snapshot_raw_fops); + } #endif } @@ -9205,7 +9212,18 @@ allocate_trace_buffer(struct trace_array *tr, struct array_buffer *buf, int size buf->tr = tr; - buf->buffer = ring_buffer_alloc(size, rb_flags); + if (tr->range_addr_start && tr->range_addr_size) { + buf->buffer = ring_buffer_alloc_range(size, rb_flags, 0, + tr->range_addr_start, + tr->range_addr_size); + /* + * This is basically the same as a mapped buffer, + * with the same restrictions. + */ + tr->mapped++; + } else { + buf->buffer = ring_buffer_alloc(size, rb_flags); + } if (!buf->buffer) return -ENOMEM; @@ -9242,6 +9260,10 @@ static int allocate_trace_buffers(struct trace_array *tr, int size) return ret; #ifdef CONFIG_TRACER_MAX_TRACE + /* Fix mapped buffer trace arrays do not have snapshot buffers */ + if (tr->range_addr_start) + return 0; + ret = allocate_trace_buffer(tr, &tr->max_buffer, allocate_snapshot ? size : 1); if (MEM_FAIL(ret, "Failed to allocate trace buffer\n")) { @@ -9342,7 +9364,9 @@ static int trace_array_create_dir(struct trace_array *tr) } static struct trace_array * -trace_array_create_systems(const char *name, const char *systems) +trace_array_create_systems(const char *name, const char *systems, + unsigned long range_addr_start, + unsigned long range_addr_size) { struct trace_array *tr; int ret; @@ -9368,6 +9392,10 @@ trace_array_create_systems(const char *name, const char *systems) goto out_free_tr; } + /* Only for boot up memory mapped ring buffers */ + tr->range_addr_start = range_addr_start; + tr->range_addr_size = range_addr_size; + tr->trace_flags = global_trace.trace_flags & ~ZEROED_TRACE_FLAGS; cpumask_copy(tr->tracing_cpumask, cpu_all_mask); @@ -9425,7 +9453,7 @@ trace_array_create_systems(const char *name, const char *systems) static struct trace_array *trace_array_create(const char *name) { - return trace_array_create_systems(name, NULL); + return trace_array_create_systems(name, NULL, 0, 0); } static int instance_mkdir(const char *name) @@ -9479,7 +9507,7 @@ struct trace_array *trace_array_get_by_name(const char *name, const char *system goto out_unlock; } - tr = trace_array_create_systems(name, systems); + tr = trace_array_create_systems(name, systems, 0, 0); if (IS_ERR(tr)) tr = NULL; @@ -9672,8 +9700,10 @@ init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer) MEM_FAIL(1, "Could not allocate function filter files"); #ifdef CONFIG_TRACER_SNAPSHOT - trace_create_file("snapshot", TRACE_MODE_WRITE, d_tracer, - tr, &snapshot_fops); + if (!tr->range_addr_start) { + trace_create_file("snapshot", TRACE_MODE_WRITE, d_tracer, + tr, &snapshot_fops); + } #endif trace_create_file("error_log", TRACE_MODE_WRITE, d_tracer, diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index 749a182dab48..994b86b9bf73 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@ -344,6 +344,10 @@ struct trace_array { struct irq_work fsnotify_irqwork; #endif #endif + /* The below is for memory mapped ring buffer */ + unsigned long range_addr_start; + unsigned long range_addr_size; + struct trace_pid_list __rcu *filtered_pids; struct trace_pid_list __rcu *filtered_no_pids; /* -- 2.43.0