From patchwork Tue Feb 18 15:09:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Masami Hiramatsu (Google)" X-Patchwork-Id: 13980152 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 45FD9C02198 for ; Tue, 18 Feb 2025 15:09:16 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D59BE28013F; Tue, 18 Feb 2025 10:09:15 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id D092928013C; Tue, 18 Feb 2025 10:09:15 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BF82528013F; Tue, 18 Feb 2025 10:09:15 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id A1DBA28013C for ; Tue, 18 Feb 2025 10:09:15 -0500 (EST) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 53A6F121BB8 for ; Tue, 18 Feb 2025 15:09:15 +0000 (UTC) X-FDA: 83133398670.16.11F0F19 Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by imf28.hostedemail.com (Postfix) with ESMTP id 8E987C0007 for ; Tue, 18 Feb 2025 15:09:13 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=C1fkO0T9; spf=pass (imf28.hostedemail.com: domain of mhiramat@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=mhiramat@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739891353; a=rsa-sha256; cv=none; b=31HZr4Tj90jh5tWp19Mwc1H/4RZSL8TblxyiqSgobocKIv4+G61B0IT1Rpe8caUHfRu+k8 yVgSNXbKiC71u4Ph/q5b+GRSU1M9NJSe/u51MDO8AZz8CfVTfZHnVuGBkw6t0Nhb6fLceq ixbDBsci9mxysH1+H9spYHOEIGav6QM= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=C1fkO0T9; spf=pass (imf28.hostedemail.com: domain of mhiramat@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=mhiramat@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739891353; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Jcae91FeNT+rE3/EXVmUzlvTetv7Y4Hru3cPbU4eAr8=; b=5Pp2PnEsbYHSia8+r8gHGgFmv7DM+aVCXpqVRDi2RVeA+SxmJ8uArAUk9dABxLjHj/pa3D xvhcLhQwpTU2E/MgtlSBTWJMSYB+H10U7j0NK4ZIDUuf0DHPkrZEog0ObLeNU6HIMA0ZR9 dbnMyZnwBGFzv/2DJbq9SfwBVueOUoQ= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id EB7EFA41068; Tue, 18 Feb 2025 15:07:27 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id AC4C2C4CEE2; Tue, 18 Feb 2025 15:09:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739891352; bh=+d+1VZIgN3LNMc7YVtQVmKawA11NnKwFm+u6wA92Fcc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=C1fkO0T9sHWR/MXhOO4ABi24T1h8CKC/FU+oygEimshbWqP6c5f0Hx1DjsV817Ib3 JCIsIsVKaqVANO7Cn1YcwebdbheZTOnwnc6O+cksvDiIDNYCexR08eiU5+xfDcCu+R eT+AesrWA8SvbkPEdS6jlvQ9PiHCBjy4+B4HsoZH3fUo+Zru4uxz6gO982wRu1ke6i djAv8prKsnouKLIZm8YmJvIgq1rrL5JWfJ07ryo48I6IZMbNJzvlQeR9NxGEkQTayh cVtQfT9PRJuYN4Eg1zZUOhJhjzVtXx+gei1kdpRUBz315UnOxVj+ta/IROKZMtXWqP m4M49YhyS0+TA== From: "Masami Hiramatsu (Google)" To: Steven Rostedt Cc: Masami Hiramatsu , linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org, Mark Rutland , Mathieu Desnoyers , Andrew Morton , Mike Rapoport , linux-mm@kvack.org Subject: [PATCH v4 2/2] tracing: Freeable reserved ring buffer Date: Wed, 19 Feb 2025 00:09:08 +0900 Message-ID: <173989134814.230693.18199312930337815629.stgit@devnote2> X-Mailer: git-send-email 2.43.0 In-Reply-To: <173989132750.230693.15749600013776132201.stgit@devnote2> References: <173989132750.230693.15749600013776132201.stgit@devnote2> User-Agent: StGit/0.19 MIME-Version: 1.0 X-Stat-Signature: i8xnpwxhwpweci6moqgb4tgagbaubtba X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 8E987C0007 X-Rspam-User: X-HE-Tag: 1739891353-551050 X-HE-Meta: U2FsdGVkX1+LtEUJNi94kAMLFFKA2yZKzlgQAWMGVFVbsPktoCCtN2+ciE33dKnCu6Eumjcoa8mg9l4oxHKx0p+jtg9++l06xlAK2+5042vAqwSCvrfKiNy652N4vqmir/Ed+AbCb0YjTj4HXkfl0NfGjfGBpx509pjgTOimfqEu8deH/dIxIE0Wc0rdU4nM2u9829T6vqBKNfB60D6E8p+BpSuVQbCtj8durFCEWAU+8QDYuPRENq+JqxXC9e/DD7h2RXarFyAUJbAdVKkizOjuSeJQ7+A6UXtDgKZ1gFxjRnprVCvhd6aMw5uJl7EPefFujdhRHL2AwfK8yY9j/RY4O8KexUKWjMNDoZrD/NQfYuzliEiFRLJ83V5VYjB++FQ4dO0rIUcsE70MdY8iIEylhdcwcshD0QwEivrk6THYDnmSSyVV4ygHWAHQgfRtBwJbtNGgaG9ZNpbVZFgRbYd2n83vv2NBOo5UxNhsvipTH6l6kugQNdDFdiQKoOJdWlEAjzIpxJIwfkTfvCm+9q4PiFuj/HdVq8zzJrVOZuRzlBwzm+grpGdTqt6nilK/OTOeMbEfe7kAB7e7tjTyzdd0eh6lETad5ZXoqD1Uq+tOxNKqBs3G4oY+xCcH9/HQ4U5Can+TGclkS0jjZDooGwV6ExJ//tw2g+Jwo41pMu+k0DdXxCjQd4/EdgY4iBNW2isVsIuM1ooZz9JygUhTk+65w61LIkeWI42EduMR4gfN++YqFgtJYAga64Pc3wd3xKu2osKZObxn/7C2TOUbFX7Kjg/SQ4W/1Cqss1yRHpGAIRhGyQLf+YED5XP37Pdx9KTZUqW6HR3HrBXKuGNxmCyuW1PTyAZ7jOEussD06c4s9S9JUQC9PDrLcyUihCcJXBdwH5utDydKgfRNL4cj7XuOX0OqU5NIcxKA1jYYQyjse1AXCTNBFJ0TZL27qwtxu00xW0o81LagGhQKO83 K+gbZL3S HFjHwewq6Hh5tiWDtYKv012TGLMaxgMD8TkiOOEmIAiUEaaHyfduDquXoFfsLzVreWQO7kF3SaflKwdJ2h/ktrDt6dv3FE6jqkssz4HXOeYRWQyci69lOJFUaGcT23sirHeuMl+6j2wd9hknzrzysx9OswrlWXEjUguBzsRSkSl12qgz9mUeTjNGw/JymFFir0o9dy/8PvAjJxM5WwSCszP+80Kv0TF8zBiD1nVXfrPkP5ko= 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: Masami Hiramatsu (Google) Make the ring buffer on reserved memory to be freeable. This allows us to free the trace instance on the reserved memory without changing cmdline and rebooting. Even if we can not change the kernel cmdline for security reason, we can release the reserved memory for the ring buffer as free (available) memory. For example, boot kernel with reserved memory; "reserve_mem=20M:2M:trace trace_instance=boot_mapped^traceoff@trace" ~ # free total used free shared buff/cache available Mem: 1995548 50544 1927568 14964 17436 1911480 Swap: 0 0 0 ~ # rmdir /sys/kernel/tracing/instances/boot_mapped/ [ 23.704023] Freeing reserve_mem:trace memory: 20476K ~ # free total used free shared buff/cache available Mem: 2016024 41844 1956740 14968 17440 1940572 Swap: 0 0 0 Signed-off-by: Masami Hiramatsu (Google) --- Changes in v4: - Update the result example in the description. Changes in v3: - Remove debug printk. --- kernel/trace/trace.c | 13 ++++++++++++- kernel/trace/trace.h | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 0e6d517e74e0..cf57c7ac2c55 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -9284,6 +9284,9 @@ static void free_trace_buffers(struct trace_array *tr) #ifdef CONFIG_TRACER_MAX_TRACE free_trace_buffer(&tr->max_buffer); #endif + + if (tr->range_addr_start) + vunmap((void *)tr->range_addr_start); } static void init_trace_flags_index(struct trace_array *tr) @@ -9445,6 +9448,7 @@ trace_array_create_systems(const char *name, const char *systems, free_cpumask_var(tr->pipe_cpumask); free_cpumask_var(tr->tracing_cpumask); kfree_const(tr->system_names); + kfree(tr->range_name); kfree(tr->name); kfree(tr); @@ -9571,6 +9575,11 @@ static int __remove_instance(struct trace_array *tr) free_trace_buffers(tr); clear_tracing_err_log(tr); + if (tr->range_name) { + reserve_mem_release_by_name(tr->range_name); + kfree(tr->range_name); + } + for (i = 0; i < tr->nr_topts; i++) { kfree(tr->topts[i].topts); } @@ -10368,6 +10377,7 @@ __init static void enable_instances(void) bool traceoff = false; char *flag_delim; char *addr_delim; + char *rname __free(kfree) = NULL; tok = strsep(&curr_str, ","); @@ -10424,6 +10434,7 @@ __init static void enable_instances(void) pr_warn("Failed to map boot instance %s to %s\n", name, tok); continue; } + rname = kstrdup(tok, GFP_KERNEL); } if (start) { @@ -10460,7 +10471,7 @@ __init static void enable_instances(void) */ if (start) { tr->flags |= TRACE_ARRAY_FL_BOOT; - tr->ref++; + tr->range_name = no_free_ptr(rname); } while ((tok = strsep(&curr_str, ","))) { diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index 9c21ba45b7af..93b6279d3da4 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@ -348,6 +348,7 @@ struct trace_array { unsigned int mapped; unsigned long range_addr_start; unsigned long range_addr_size; + char *range_name; long text_delta; long data_delta;