From patchwork Mon Sep 25 21:28:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanislav Kinsburskii X-Patchwork-Id: 13398425 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 BD361CE79A1 for ; Mon, 25 Sep 2023 21:28:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5028C8D0047; Mon, 25 Sep 2023 17:28:20 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 48A9B8D0041; Mon, 25 Sep 2023 17:28:20 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 32B538D0047; Mon, 25 Sep 2023 17:28:20 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 1BA638D0041 for ; Mon, 25 Sep 2023 17:28:20 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id EFB38160733 for ; Mon, 25 Sep 2023 21:28:19 +0000 (UTC) X-FDA: 81276408318.14.0363198 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by imf04.hostedemail.com (Postfix) with ESMTP id 33ED340016 for ; Mon, 25 Sep 2023 21:28:18 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=linux.microsoft.com header.s=default header.b="Fi/3N9OA"; spf=pass (imf04.hostedemail.com: domain of skinsburskii@linux.microsoft.com designates 13.77.154.182 as permitted sender) smtp.mailfrom=skinsburskii@linux.microsoft.com; dmarc=pass (policy=none) header.from=linux.microsoft.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1695677298; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to: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=oG2PUbwyF0nuBD1C3aXahDUjw4ck7gfs8NgK91ItcqM=; b=i8EDqzKBPJcDewJMynoHNFhRFBgSaUq01Rd8st2ivL18vo+TOdQYvNwG+gfcR47UrvubcT d/jUlxWzBuM6R7JmnJPbZjEPBVXlacH91ith0BjXG1xDi7rmPS1nxBgJGYUFHp44BYlNKS I5PEPGJAkcD7MI3WmZVBssUDxpeXKyE= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1695677298; a=rsa-sha256; cv=none; b=QbFevkb7Zib43vuKbX2+SNnchE6pq8CGBWwX72qeyhdE8QvPh/bZiPA8KI1qXVHZea0kRi yb7wg0GuBU1mfwV/btuGYph0dWm7vXDDi1P5txD2wpZhzCt8EVrkuoGDa8jw6+ZoUzalNU wYbKKJBbJs2aOnSXuPVb5spXYYPO9Eo= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=linux.microsoft.com header.s=default header.b="Fi/3N9OA"; spf=pass (imf04.hostedemail.com: domain of skinsburskii@linux.microsoft.com designates 13.77.154.182 as permitted sender) smtp.mailfrom=skinsburskii@linux.microsoft.com; dmarc=pass (policy=none) header.from=linux.microsoft.com Received: from skinsburskii. (c-67-170-100-148.hsd1.wa.comcast.net [67.170.100.148]) by linux.microsoft.com (Postfix) with ESMTPSA id BAA54212C81A; Mon, 25 Sep 2023 14:28:16 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com BAA54212C81A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1695677297; bh=oG2PUbwyF0nuBD1C3aXahDUjw4ck7gfs8NgK91ItcqM=; h=Subject:From:To:Date:In-Reply-To:References:From; b=Fi/3N9OAw/nGt/uwjjhNLNgVqdjSu5ywBK7Yy8dfefOgTdcr/WjZzNrDbHg0WhJ55 Y25/hspsoEK6nJI/6xzI5raCpMqxrjwwOEcPl5ctm31eKl1pZN++J+F1xlrrFqVMmF LTsPS7A3Wi0BG7kILvcMt7YSK0LUmYIm/6B2OlyI= Subject: [RFC PATCH v2 5/7] pmpool: Update device tree on kexec From: Stanislav Kinsburskii To: tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, ebiederm@xmission.com, akpm@linux-foundation.org, stanislav.kinsburskii@gmail.com, corbet@lwn.net, linux-kernel@vger.kernel.org, kexec@lists.infradead.org, linux-mm@kvack.org, kys@microsoft.com, jgowans@amazon.com, wei.liu@kernel.org, arnd@arndb.de, gregkh@linuxfoundation.org, graf@amazon.de, pbonzini@redhat.com Date: Mon, 25 Sep 2023 14:28:16 -0700 Message-ID: <169567729602.19708.7544090989330715724.stgit@skinsburskii.> In-Reply-To: <169567722094.19708.3583735425859054859.stgit@skinsburskii.> References: <169567722094.19708.3583735425859054859.stgit@skinsburskii.> User-Agent: StGit/0.19 MIME-Version: 1.0 X-Rspamd-Queue-Id: 33ED340016 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: k1h6oyeidp46thbn3xyqx1jon6cieuty X-HE-Tag: 1695677298-395776 X-HE-Meta: U2FsdGVkX19Si65EY7N5TEky8/mSGJHmO1furkKxErlPUi/vO9C5suNXXShBBLGH+VWZLiNywKCnIgB0v/SbBUvPBV0V2zO/n6c8u4za0Y32ecbIM8Ch4UIgDF09KSLgqPdaQatAOSQ4YfA3LP+j0nbU6Kx5Sg1RoVNdZmJQMhD6pbiXPuBlz5HmAtt8RuVkaAePaOt9gfCYCAn3cMLvsTwQlPd2LkR+eZG9tkE2DQNxXjR8/cMDkh6FtwnrW7ulVWQze7uzVO4g5ah1T2nnGYR4iWIuKEsY71kQmbF+Vhlp+mK4eRLCheGWfhYZBfjbyaUwsthMbxwVMSWAf56gJgLOL7wWf+LFVlMDdYzV86Q48IPTkIcqw98M6KtqwnviJUCDFl/uH6WeeDI3axOkjEvWCU++9OiaJZ5EhNzY9CVVZ2w/TZLLaglAY8zYdPWZASTg7SoRsLLoXh+JjsQlu4740gEFHte02tA5At7yq7nqpLYB8S53Qz5dfkQmO7W+PhDSNcwIkFNaBTOgNDB4gI00DiddHuWTUYPD/kGCPSZ32cjaaoEvwfeJzBAkyY4EMvRHiA1BBZwcMZwe2BNXM/8Fx2HPDG4sjVUlpgBrwfgQXinkvDlsyk45yDpJKF9G4c1rKz6oaYJfeHe7Ka3EP0Nr0OG3GFLhM0zVI+jEcuCLu3bOA3TKa6nSj4OJnDdDdUUxuQ2T80sSFR5vyfgum/+CuJxSBXDEsbg+F7hwFw2tus/SJxfztGICZ0v4E3zf7gaSqOX1H4884K71tQ+dtkgDegOCjQp1Ep/HBrYuxFHrDf6v67hqJFM1ubmaDQez8hz02D2oywUebZrbMhtN0LE8C54snb5l48bBGH5cq/NmikM0E/XsylvIlrJB1dkBcUnxnV7HCXvIq1swge5mpZFhDJzIY2BX10lQKFMVPzlwvoYEwgHxSG6ooYV2SFgOqeu0BROsMo7zjjU06Aj YivBigB8 zuAkAXz8Wm79eIMrUrdi4apympnJ25nTfO5QXC6zA/9EsA/JtAPQNCe+ZSoozBwQBD5797F7i1sjCK4Pri/9u3HS8GfU+BllB2ElMJDgP06lv6zRfTbqD5ZawuUIWC8xjamVKr/goRacUyWkvBquj7VJ5v3P7Ujkxx3SQ3Lox8bY7b7ZlMyIatPu2amlJYxQaNAlAgN4wNHFZPCfcYdkcTMlER+H8qhCCn0VwwBuCfGHL3rdX2hFNDTWAEdwUD8WDznVdnussem6H0LPL0cgnWt7EYsitGtA3UJp9WHEMY4TRPdo= 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: From: Stanislav Kinsburskii Introduce a pmpool kexec fdt notifier that enables pmpool to pass its metadata, including the bitmap address, to the new kernel during kexec. Signed-off-by: Stanislav Kinsburskii --- mm/Kconfig | 1 + mm/pmpool.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/mm/Kconfig b/mm/Kconfig index e7c10094fb10..1eefdd4c82ba 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -925,6 +925,7 @@ config CMA_AREAS config PMPOOL bool "Persistent memory pool support" select CMA + select LIBFDT help This option adds support for CMA-based persistent memory pool feature, which provides pages allocation and freeing from a set of diff --git a/mm/pmpool.c b/mm/pmpool.c index 12a8cac75558..f2173db782d6 100644 --- a/mm/pmpool.c +++ b/mm/pmpool.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -58,6 +59,59 @@ static int __init default_pmpool_fixup_cma(void) } postcore_initcall(default_pmpool_fixup_cma); +static int pmpool_fdt_update(struct notifier_block *nb, unsigned long val, + void *data) +{ + void *fdt = data; + int node, status; + + if (!fdt) + goto err; + + node = fdt_subnode_offset(fdt, 0, "chosen"); + if (node < 0) { + node = fdt_add_subnode(fdt, 0, "chosen"); + if (node < 0) + goto err; + } + + node = fdt_add_subnode(fdt, node, "default_pmpool"); + if (node == -FDT_ERR_EXISTS) + return 0; + if (node < 0) + goto err; + + status = fdt_setprop(fdt, node, "compatible", + "pmpool", sizeof("pmpool")); + if (status) + goto err; + + status = fdt_setprop_u64(fdt, node, "bitmap", + virt_to_phys(default_pmpool->cma->bitmap)); + if (status) + goto err; + + status = fdt_setprop_u64(fdt, node, "size", + default_pmpool->cma->count << PAGE_SHIFT); + if (status) + goto err; + + status = fdt_setprop_u64(fdt, node, "base", + default_pmpool->cma->base_pfn << PAGE_SHIFT); + if (status) + goto err; + + return NOTIFY_DONE; + +err: + pr_err("failed to update fdt\n"); + return NOTIFY_DONE; +} + +static struct notifier_block pmpool_kexec_fdt_nb = { + .notifier_call = pmpool_fdt_update, +}; + static int __init parse_pmpool_opt(char *str) { static struct pmpool pmpool; @@ -80,10 +134,16 @@ static int __init parse_pmpool_opt(char *str) return 0; } + err = register_kexec_fdt_notifier(&pmpool_kexec_fdt_nb); + if (err) { + pr_err("failed to register kexec fdt notifier: %d\n", err); + goto free_memblock; + } + err = cma_init_reserved_mem(base, size, 0, "pmpool", &pmpool.cma); if (err) { pr_err("failed to initialize CMA: %d\n", err); - goto free_memblock; + goto notifier_unregister; } pr_info("default memory pool is created: %#llx-%#llx\n", @@ -93,6 +153,8 @@ static int __init parse_pmpool_opt(char *str) return 0; +notifier_unregister: + unregister_kexec_fdt_notifier(&pmpool_kexec_fdt_nb); free_memblock: memblock_phys_free(base, size); return 0;