From patchwork Tue Feb 18 15:08:58 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: 13980153 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 C90FBC021AA for ; Tue, 18 Feb 2025 15:09:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 62E1F280140; Tue, 18 Feb 2025 10:09:17 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 5DD9628013C; Tue, 18 Feb 2025 10:09:17 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 48337280140; Tue, 18 Feb 2025 10:09:17 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 2A8C528013C for ; Tue, 18 Feb 2025 10:09:17 -0500 (EST) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id A7C20C1D2E for ; Tue, 18 Feb 2025 15:09:05 +0000 (UTC) X-FDA: 83133398250.07.9598896 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf14.hostedemail.com (Postfix) with ESMTP id C19FA100012 for ; Tue, 18 Feb 2025 15:09:03 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=e6dVhIcO; spf=pass (imf14.hostedemail.com: domain of mhiramat@kernel.org designates 139.178.84.217 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=1739891343; 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=/weH51s81AUNhBXpvBiR2tP/oMhSL7MGOr3AHtTzR34=; b=tYuyE60CBb97n7+0JVixz6gpvQEDjd4luCQbVbacCsK2qQMp2PuKyGIgqhHBbazsZYYCfm I0HzxuNj8dkzqlLLbdypvM7qRq0MBYlxHj/aDzkdgnTpZ3O8rsxDCf1TADeCfvPd4WzE9v GYXD1jG9i1Imawzzi/x7RmXFt7ydNeo= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=e6dVhIcO; spf=pass (imf14.hostedemail.com: domain of mhiramat@kernel.org designates 139.178.84.217 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=1739891343; a=rsa-sha256; cv=none; b=5Q3pbpNTm/hjqvmCf8H1YF+aFMSkRiOA83YvGoTZTCDIfswYLFKo3sUH1a5mcs85s75yPt BX/tOg6Pb5I+aenvGxptxj1JbVCb4RuGLLUK+RPkYWXV3g/+305xTdvkdLSIdGyxYyUVNl F1xqYpPf7Ffg1OLar2Chdxc6uoIf1IU= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id CC9B95C554A; Tue, 18 Feb 2025 15:08:23 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D5ADCC4CEE7; Tue, 18 Feb 2025 15:09:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739891342; bh=8v4zZwccKy+E3kLDMp/TBNu5P5+5ygdWnFUDTOV6vhs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=e6dVhIcOxjQStAmdg1frwiYYMzwqNWrkW5KnknEwHxn6tpy53X+QuZUBlpcLgZCf1 CKEhu0DH9fC/Je+UIYpHOPzeiwPitaHanVUV2TRGiHdKr/MFRFPslLVWDEouuekeZX 1PRKaxuasqXI3LWVdzF6hhzr8gJH93z6XH3BwEZEB0FX+PMovWkseGWpUlgTsaX1ZQ ce/usigvzflPg5s2CUSHiT/il3eC3bi6Xw3PXcd+ok8GBdoAez7t5tu9UCAdiAEX43 b1t6ue9XccNUA4FWE4IVLXzP5PnCWTOlfmlahs6HObelUFY4EQCD5F8DYhatYhD2Yu YOO2wMctHY73g== 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 1/2] mm/memblock: Add reserved memory release function Date: Wed, 19 Feb 2025 00:08:58 +0900 Message-ID: <173989133862.230693.14094993331347437600.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-Rspam-User: X-Rspamd-Queue-Id: C19FA100012 X-Stat-Signature: f5cbnqxc35tz8wwncc4i1ficmjgg3oo7 X-Rspamd-Server: rspam03 X-HE-Tag: 1739891343-503479 X-HE-Meta: U2FsdGVkX1+A8qhf+ZZkj68EENQGiNNScoZXeG6lHycvb5C+1xRwG/zH/vzPgCDAHknLAh5ZKd2GwVdYyXNzp4t5SGN513TezSt9nnvFfkc1tzarjVfZFRq/TeAFkMyPWV+JnCYLIo8VpIF/LRc5qvW9tFIc+8355WJEezRO1TDyZrdaLs2oYfnyhmws72GqzBJGLAZ5dgMCnxfj3IT/cI4YKk/ytQ2z2jxVOO/p53VxbcC//tsk8okURs8onRFeVyKQUHZX5LGyJxflxDtblv7YrsPsK6guZIByABYkYzFNs3JL8I9DwZcFrZz+LhQnkykm1Xx+fNprfZOnY4gX6Wdi2DmR4PFLIVN+xNQcN57AK882gVLGESFI7dyRUiF7P/nRTA0Bsm2fHCHWpf/I7DtuiwNHQs7P3bYuSqIDCZdl9s/fHrqL0MHQ/WK/Et7Rnd0b4PikqW7BTbxy8ItXsoLCtZRD2/tn4hCeh6+5iO4oQhkCM6FpUhgxL/ko43AGgv6ny1lAuZ6bqk40P1jEO4+HTyBRG0++8/NdQWFzR+82CNguszq+55pC5o1cFqWP/n0apisrYby+33SgLE5in65kTF9W7D+RQ2+0EutOGem2GD0nwNd0nfSdPuKMA5UuD3Dy+f1QAwR+6TUUQYc7WIVV2yBKpOyr9JpKOTuar3yiZCjMB86kzyIdzBkHBkbKR+LMyMHqSfpHteVqQmlyzVfAo1NMxATpYRtFXpkN7ht2BCINEIzySp1kqy4EiCKKrVHGRkffcZ0cVTWpokZ1u5E2xlAheGkYiyArfFt3JSxUlROaeXXjomPYEn7m9us2w0l6puDYNLhapjw0141olguY8bMLl5gpNrvvwRJIXHm9uWPlI+e+LPtfmrHdtlnh88iIRN90fPj4cjo/SOSZRdP2G4IIcceXv/0Tuf44tlW9w4jINK3ShSepuBYSgvgjooWezWKr+XQqnqC1DvC QOZvPTkh bOzUhk9p3HVVWgJfjoBYdseavf86tuepYzexK2ftmEifkmjXCw/wWUzpZqIWHKaUpZndi3g6I0eNh5zMYpiXKaeqEQkfoKM6Ds7BSwPi73+swQGzC1sF/Ygdm9nYQxcnurms2Vl3wHBaI2/1inXztIoYYfxKlCXIAthSieGZRrfaSPXenVD9VdaeNh8eUWFmp8C1atdtN90WlZd3xg+TkM7q/OfWP7wgNkDmW1o9GPy5cw0bM/0NWBs7fr8vWdHhAeNsZjJmkQ0ZuvAJa7FxCue60PflV8EZs77vVWBxsUp9GTtb9HDqsHcV4UyJwcodCqppUPEoRs08tVvbB63H0bAKfMtHqQYTYlnnZKxTxt1V2O1ay7iqMOKOhI+I8GyX2eOeCMp5aGRbV0ZKyW0Fzk1D+KA== 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) Add reserve_mem_release_by_name() to release a reserved memory region with a given name. This allows us to release reserved memory which is defined by kernel cmdline, after boot. Signed-off-by: Masami Hiramatsu (Google) Acked-by: Mike Rapoport (Microsoft) Cc: Andrew Morton Cc: linux-mm@kvack.org --- Changes in v4: - Use free_reserved_area() according to Mike's comment. Changes in v2: - Rename reserved_mem_* to reserve_mem_*. --- include/linux/mm.h | 1 + mm/memblock.c | 66 +++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 55 insertions(+), 12 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index 7b1068ddcbb7..1ee9e7447485 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -4123,6 +4123,7 @@ void vma_pgtable_walk_begin(struct vm_area_struct *vma); void vma_pgtable_walk_end(struct vm_area_struct *vma); int reserve_mem_find_by_name(const char *name, phys_addr_t *start, phys_addr_t *size); +int reserve_mem_release_by_name(const char *name); #ifdef CONFIG_64BIT int do_mseal(unsigned long start, size_t len_in, unsigned long flags); diff --git a/mm/memblock.c b/mm/memblock.c index 95af35fd1389..8cd95f60015d 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include @@ -2283,6 +2284,7 @@ struct reserve_mem_table { }; static struct reserve_mem_table reserved_mem_table[RESERVE_MEM_MAX_ENTRIES]; static int reserved_mem_count; +static DEFINE_MUTEX(reserve_mem_lock); /* Add wildcard region with a lookup name */ static void __init reserved_mem_add(phys_addr_t start, phys_addr_t size, @@ -2296,6 +2298,21 @@ static void __init reserved_mem_add(phys_addr_t start, phys_addr_t size, strscpy(map->name, name); } +static struct reserve_mem_table *reserve_mem_find_by_name_nolock(const char *name) +{ + struct reserve_mem_table *map; + int i; + + for (i = 0; i < reserved_mem_count; i++) { + map = &reserved_mem_table[i]; + if (!map->size) + continue; + if (strcmp(name, map->name) == 0) + return map; + } + return NULL; +} + /** * reserve_mem_find_by_name - Find reserved memory region with a given name * @name: The name that is attached to a reserved memory region @@ -2309,22 +2326,47 @@ static void __init reserved_mem_add(phys_addr_t start, phys_addr_t size, int reserve_mem_find_by_name(const char *name, phys_addr_t *start, phys_addr_t *size) { struct reserve_mem_table *map; - int i; - for (i = 0; i < reserved_mem_count; i++) { - map = &reserved_mem_table[i]; - if (!map->size) - continue; - if (strcmp(name, map->name) == 0) { - *start = map->start; - *size = map->size; - return 1; - } - } - return 0; + guard(mutex)(&reserve_mem_lock); + map = reserve_mem_find_by_name_nolock(name); + if (!map) + return 0; + + *start = map->start; + *size = map->size; + return 1; } EXPORT_SYMBOL_GPL(reserve_mem_find_by_name); +/** + * reserve_mem_release_by_name - Release reserved memory region with a given name + * @name: The name that is attatched to a reserved memory region + * + * Forcibly release the pages in the reserved memory region so that those memory + * can be used as free memory. After released the reserved region size becomes 0. + * + * Returns: 1 if released or 0 if not found. + */ +int reserve_mem_release_by_name(const char *name) +{ + char buf[RESERVE_MEM_NAME_SIZE + 12]; + struct reserve_mem_table *map; + void *start, *end; + + guard(mutex)(&reserve_mem_lock); + map = reserve_mem_find_by_name_nolock(name); + if (!map) + return 0; + + start = phys_to_virt(map->start); + end = start + map->size - 1; + snprintf(buf, sizeof(buf), "reserve_mem:%s", name); + free_reserved_area(start, end, 0, buf); + map->size = 0; + + return 1; +} + /* * Parse reserve_mem=nn:align:name */ 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;