From patchwork Fri Jun 14 16:30:23 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steven Rostedt X-Patchwork-Id: 13698960 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 58969C27C79 for ; Fri, 14 Jun 2024 16:36:16 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 98F996B01A9; Fri, 14 Jun 2024 12:30:54 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8F1156B01AA; Fri, 14 Jun 2024 12:30:54 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 792816B01AB; Fri, 14 Jun 2024 12:30:54 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 5817D6B01A9 for ; Fri, 14 Jun 2024 12:30:54 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 0355D140851 for ; Fri, 14 Jun 2024 16:30:53 +0000 (UTC) X-FDA: 82230033228.11.E790931 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf25.hostedemail.com (Postfix) with ESMTP id B0D40A0016 for ; Fri, 14 Jun 2024 16:30:50 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=none; spf=pass (imf25.hostedemail.com: domain of "SRS0=I10Q=NQ=goodmis.org=rostedt@kernel.org" designates 139.178.84.217 as permitted sender) smtp.mailfrom="SRS0=I10Q=NQ=goodmis.org=rostedt@kernel.org"; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1718382649; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding:in-reply-to: references:references; bh=nlmh6bmb78BAyGz8ufjYJ5WvBuv3Os+eBdQ9COom2Aw=; b=pN9apqw1eEtukCuvK3n+I2DayFgs/uXVgJIiWkoA5ri4dJEDlg+m0XUolHbraeKi8ZBE6O i4sYRJbSRy8MQHP+uvHzoaThXt/16Xc+WNTUDNVQ+OUxrkbhLTiWrZbEBavvITZW9vVH1S sAvAnZ3NXI+jzMqNTcfl+8Tr9070jKQ= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=none; spf=pass (imf25.hostedemail.com: domain of "SRS0=I10Q=NQ=goodmis.org=rostedt@kernel.org" designates 139.178.84.217 as permitted sender) smtp.mailfrom="SRS0=I10Q=NQ=goodmis.org=rostedt@kernel.org"; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1718382649; a=rsa-sha256; cv=none; b=Hs11n9Y7eUKHWLLFr4ibcodfzg8n2LWoAvAP27sLvLTOOVis+N0N29DmxHc+6TLL1d2hb7 Ii1CAD5ynFtVDsD3TJVydrxtHl/bn/GivbGuZOwTwIqkGC6uv41bqSFbCuKPZQVPfa/xrf L7Qt07JpgOZhuu9TAaTv8GnQHUNzqZw= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 7182961FA3; Fri, 14 Jun 2024 16:30:49 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 90094C4AF52; Fri, 14 Jun 2024 16:30:48 +0000 (UTC) Received: from rostedt by gandalf with local (Exim 4.97) (envelope-from ) id 1sI9pX-00000001rsv-2ZNr; Fri, 14 Jun 2024 12:31:11 -0400 Message-ID: <20240614163111.473960851@goodmis.org> User-Agent: quilt/0.68 Date: Fri, 14 Jun 2024 12:30:23 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Masami Hiramatsu , Mark Rutland , Mathieu Desnoyers , Andrew Morton , linux-mm@kvack.org, Vincent Donnefort , Joel Fernandes , Daniel Bristot de Oliveira , Ingo Molnar , Peter Zijlstra , 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: [for-next][PATCH 08/13] tracing: Add option to use memmapped memory for trace boot instance References: <20240614163015.456541709@goodmis.org> MIME-Version: 1.0 X-Rspamd-Server: rspam03 X-Rspam-User: X-Rspamd-Queue-Id: B0D40A0016 X-Stat-Signature: rwg8gh5fgqe38drn7481d97yi1k6ydac X-HE-Tag: 1718382650-381069 X-HE-Meta: U2FsdGVkX18B0SEpBOzIHrM0iae/iofpIpPtVyeW8EMbsaVdYatKSmshVOteiRxujP8v8lFmyC3Y4/6Yl7Bxo/CQhvyDwSBvOvajDg1h6IrLV/xVTQEMNm8M6/fxdp8xfkgMe1T4zbBIn6b1+D//C83GPQf359JmKvA/LR15AsgZLbf0WAqow/M5wvfI3wYoSxwwVYF/Amn/N6jPBxZHNcFTTxFbIs8uY2ZjeYepe+DTgKR6Q6qXLxAh6InGeJP/F7bpMLHI4JYQHMMR17RLS8FHIlyugmGuJ2NKDdNyltYyAEoyWBpC3yW6ZXAse6uTgp2pWLwdnbSljd7gM81ZSqEfSrNJOiHxy+ACOpqAGiSRhv11IfS0/EzzehXDVdPNhXR1A5nK3lqiLRxqiehuZVZeW/MnjzptFWrxWjdjGMhgqL48T4BMIC/h2foWEBvP1mgYrLDr/i6OEblN5YwlzhNuXWDOujZ0DR4+eGcpD1wRAxva3nNd+uogaNyGOH7rqEknoKpvbYHuUwu4ukISfq9AZS0lH+TOa1fj/2XfSfnBch7dQvqTBXbUnm6LJh42oWojvKB8yk10Sau+tJnILJ4nfJUbdOiEoe327NpGH1h9Q1qt/ui48f4crz0L++zvvV3nX70hM5KN3+0qedBG50Cd+DtLrsfJ1Tu9NLTWWKVMKnYE1grrlH6T03zRrn5HnjjxatRaMx607b4B/raJPKWCZM4RSr49viGEZu/eAviH+ty05O51Zb3s+BdiWG3wGC6xb9r/jQmqhvR9TaBuc2Iz8h3jsRWe0JiBf5pKKCbuT67mRdew6c4OnN2fqjHQObOK3Ox2EwZbVzT5Tb+rfFN+MgQpJlNgbERbCp6elObjpscoy0auotZ0TGkZ/cX7keXF6rwg2A/0NuM4TBrCQq0vBT2nvt+xutpBNs2EKSh+1N1W3UEkn+ByjxfhBIk7yPJULlezld0yYmU0KZm xFCgOJ8b 16N0Ldn0gpb5CRad40LRmMYLSeu5AZR0H821cfjFTa8080rpNuXeDuzxL1kJMS7qE8lFxWq/jqirjvlN68VcvcEklocHrpXA0GVtGSfxtwkrU2QjAVW+Pk/BKF6BFQStodC47SJUNZhgdPBEQ2Qyk04S1Oj8yPZZ6uu726nC0Gjj5V/MAAZCVgVmyzP5Fvig1DKD07hePs9Gf1UgPKVdZRINZAjzYUEnkbExE719RgqelgUGCj96e8ERSTbhyiaiP3EOvbnXaQq6UalyomkeLDPs98PAfhqggUw8P/GqrWVxVm6nsyxru3EVfe3GFgRKLkrbnG1Ey52lpk9VbZdGJBpnPieVVmUgCmzPJvG9uijmS1E/DeYxUmWHLP0dI1yZBVyhelvMi5ylA2StayJar1H0Ip3EzbInJc0SeswSXbUANPylSv7UGb25en9hElZaWghUChtekQ/AIB9/Ctua8vK1f+8RcATM4TnKPfqH3CEySm+8l28K6SYCVxrHpR4ckkkewz288KMjYkU2Bieq9pWpChVH9MqJfol8vo9YP3kzvlP+zyUw9y5wAbjo5IQpI43mkCOItY693VTv9iZtTkZfZlPBGEfqCVkOwXcGt7YVy8/QFJRTyednWh9mQHLjBcjs/mMAvpBMcq/nmWf/0XjnH1hVbuGDJA+MqNfVuPJyWeIqBd/elCcE9ZEB57zKG8aMHRQ9DWNLVldXpea3Zf6sXcsgwP7wj+ZLbiw54XUdAZo/ykV6v7QWnRT52F9BHEOLqE52Ew7Yz0x8L2PpIz/c4z5soVDUqTYi2N/FuIKIKZvjRAZ74NnlIKMl/iEhrf38DA54AC19gIcxNzSdis69qFYuq9B40RWJ2uly4cnVZhXOmXteQk2hybAfK5tdIB5BINc/tqCl9ptVadHHsq5qgKO5O/j3eeX6HBiCSC0NZTanl6umF98Pdud2OWpsG+K4ZXOHmMrbuMI6srHGn+nagpL/i CCiitB72 i+oWghgOgD36LGVdzDHN7pkqoFi4Nm/BwsAm5vf9d2y3v7OxHXTUrqEgugVq7EFxVrBBSf3KkPya0mnjgdoKIQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: "Steven Rostedt (Google)" Add an option to the trace_instance kernel command line parameter that allows it to use the reserved memory from memmap boot parameter. memmap=12M$0x284500000 trace_instance=boot_mapped@0x284500000:12M The above will reserves 12 megs at the physical address 0x284500000. The second parameter will create a "boot_mapped" instance and use the memory reserved as the memory for the ring buffer. That will create an instance called "boot_mapped": /sys/kernel/tracing/instances/boot_mapped Note, because the ring buffer is using a defined memory ranged, it will act just like a memory mapped ring buffer. It will not have a snapshot buffer, as it can't swap out the buffer. The snapshot files as well as any tracers that uses a snapshot will not be present in the boot_mapped instance. Link: https://lkml.kernel.org/r/20240612232026.329660169@goodmis.org Cc: linux-mm@kvack.org Cc: Masami Hiramatsu Cc: Mark Rutland Cc: Mathieu Desnoyers Cc: Andrew Morton Cc: Vincent Donnefort Cc: Joel Fernandes Cc: Daniel Bristot de Oliveira Cc: Ingo Molnar Cc: Peter Zijlstra Cc: Thomas Gleixner Cc: Vineeth Pillai Cc: Youssef Esmat Cc: Beau Belgrave Cc: Alexander Graf Cc: Baoquan He Cc: Borislav Petkov Cc: "Paul E. McKenney" Cc: David Howells Cc: Mike Rapoport Cc: Dave Hansen Cc: Tony Luck Cc: Guenter Roeck Cc: Ross Zwisler Cc: Kees Cook Signed-off-by: Steven Rostedt (Google) --- .../admin-guide/kernel-parameters.txt | 9 +++ kernel/trace/trace.c | 75 +++++++++++++++++-- 2 files changed, 78 insertions(+), 6 deletions(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index b600df82669d..ff26b6094e79 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -6754,6 +6754,15 @@ the same thing would happen if it was left off). The irq_handler_entry event, and all events under the "initcall" system. + If memory has been reserved (see memmap for x86), the instance + can use that memory: + + memmap=12M$0x284500000 trace_instance=boot_map@0x284500000:12M + + The above will create a "boot_map" instance that uses the physical + memory at 0x284500000 that is 12Megs. The per CPU buffers of that + instance will be split up accordingly. + 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 622fe670949d..dfde26aa3211 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -9504,6 +9504,31 @@ static int instance_mkdir(const char *name) return ret; } +static u64 map_pages(u64 start, u64 size) +{ + struct page **pages; + phys_addr_t page_start; + unsigned int page_count; + unsigned int i; + void *vaddr; + + page_count = DIV_ROUND_UP(size, PAGE_SIZE); + + page_start = start; + pages = kmalloc_array(page_count, sizeof(struct page *), GFP_KERNEL); + if (!pages) + return 0; + + for (i = 0; i < page_count; i++) { + phys_addr_t addr = page_start + i * PAGE_SIZE; + pages[i] = pfn_to_page(addr >> PAGE_SHIFT); + } + vaddr = vmap(pages, page_count, VM_MAP, PAGE_KERNEL); + kfree(pages); + + return (u64)(unsigned long)vaddr; +} + /** * trace_array_get_by_name - Create/Lookup a trace array, given its name. * @name: The name of the trace array to be looked up/created. @@ -10350,6 +10375,7 @@ __init static void enable_instances(void) { struct trace_array *tr; char *curr_str; + char *name; char *str; char *tok; @@ -10358,19 +10384,56 @@ __init static void enable_instances(void) str = boot_instance_info; while ((curr_str = strsep(&str, "\t"))) { + unsigned long start = 0; + unsigned long size = 0; + unsigned long addr = 0; tok = strsep(&curr_str, ","); + name = strsep(&tok, "@"); + if (tok) { + start = memparse(tok, &tok); + if (!start) { + pr_warn("Tracing: Invalid boot instance address for %s\n", + name); + continue; + } + } - if (IS_ENABLED(CONFIG_TRACER_MAX_TRACE)) - do_allocate_snapshot(tok); + if (start) { + if (*tok != ':') { + pr_warn("Tracing: No size specified for instance %s\n", name); + continue; + } + tok++; + size = memparse(tok, &tok); + if (!size) { + pr_warn("Tracing: Invalid boot instance size for %s\n", + name); + continue; + } + addr = map_pages(start, size); + if (addr) { + pr_info("Tracing: mapped boot instance %s at physical memory 0x%lx of size 0x%lx\n", + name, start, size); + } else { + pr_warn("Tracing: Failed to map boot instance %s\n", name); + continue; + } + } else { + /* Only non mapped buffers have snapshot buffers */ + if (IS_ENABLED(CONFIG_TRACER_MAX_TRACE)) + do_allocate_snapshot(name); + } - tr = trace_array_get_by_name(tok, NULL); + tr = trace_array_create_systems(name, NULL, addr, size); if (!tr) { - pr_warn("Failed to create instance buffer %s\n", curr_str); + pr_warn("Tracing: Failed to create instance buffer %s\n", curr_str); continue; } - /* Allow user space to delete it */ - trace_array_put(tr); + + /* Only allow non mapped buffers to be deleted */ + if (!start) + trace_array_put(tr); while ((tok = strsep(&curr_str, ","))) { early_enable_events(tr, tok, true);