From patchwork Wed Oct 4 22:23:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanislav Kinsburskii X-Patchwork-Id: 13409629 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 7F6A7E936EA for ; Wed, 4 Oct 2023 22:23:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 10B146B0254; Wed, 4 Oct 2023 18:23:32 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0BBE46B0255; Wed, 4 Oct 2023 18:23:32 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E9E0E6B0256; Wed, 4 Oct 2023 18:23:31 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id D7C8A6B0254 for ; Wed, 4 Oct 2023 18:23:31 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id AA5E340126 for ; Wed, 4 Oct 2023 22:23:31 +0000 (UTC) X-FDA: 81309206622.15.8BA7FE4 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by imf18.hostedemail.com (Postfix) with ESMTP id E9B391C001C for ; Wed, 4 Oct 2023 22:23:29 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=linux.microsoft.com header.s=default header.b=axnzA+IE; dmarc=pass (policy=none) header.from=linux.microsoft.com; spf=pass (imf18.hostedemail.com: domain of skinsburskii@linux.microsoft.com designates 13.77.154.182 as permitted sender) smtp.mailfrom=skinsburskii@linux.microsoft.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1696458210; 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=GwlOK8b41ZMX6FlX17PSaZUjynXX2Y2dfZVQs+XIzFQ=; b=3diAJ1QWB60bhyscki9WJyX55Srma6Ty7Ew9LCDyoeyeXTA328gvtlpfYMKsfr44+lxUDW 0P3ZN3Pat1cyXOAOui5gOADiWXGXFwiiQ2VGNrKKau3R4su4fsj65118axl6k0tL/z02be wmHmzYRFPr44kepHI3vLJT8GUVlVPA0= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=linux.microsoft.com header.s=default header.b=axnzA+IE; dmarc=pass (policy=none) header.from=linux.microsoft.com; spf=pass (imf18.hostedemail.com: domain of skinsburskii@linux.microsoft.com designates 13.77.154.182 as permitted sender) smtp.mailfrom=skinsburskii@linux.microsoft.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1696458210; a=rsa-sha256; cv=none; b=5VnMwYpxUNklEyoCtb0KakAoG+HcNcnKCYMzgYNIKDq6DG9cCda2vjtZOsumeRT7eS9VkV GiuJukZ5tpqTG+fyxGblZbo9XLGDf9HrKwKX25nQEhDlP3tDRMRLM3wC+S/g/oKrTNkyII 8Wdo3eWKUWnajaiDshWe789+Bi5WMsU= Received: from skinsburskii. (c-67-170-100-148.hsd1.wa.comcast.net [67.170.100.148]) by linux.microsoft.com (Postfix) with ESMTPSA id 5BE9120B74C2; Wed, 4 Oct 2023 15:23:28 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 5BE9120B74C2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1696458208; bh=GwlOK8b41ZMX6FlX17PSaZUjynXX2Y2dfZVQs+XIzFQ=; h=Subject:From:To:Date:In-Reply-To:References:From; b=axnzA+IECu/ui4Tf2+4LzIpRwRNobJZ7f/opucsDIpIfIY5FHNrKIswtqpqXETsE8 tnvkKFLIw9xy27zm/T2uFcTCyWA7egEgshtkPXI9nGz8ibpV2r0nkd901pNXF1ehLo +NYpWXf+TF4LlsQY2gfr02aV2b5lYXcuLvXId7g8= Subject: [RFC PATCH v3 3/3] pmpool: Mark reserved range as "kernel reserved" in kexec e820 table 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, bhe@redhat.com, dave.hansen@intel.com, kirill.shutemov@intel.com Date: Wed, 04 Oct 2023 15:23:27 -0700 Message-ID: <169645820784.11424.922048380402402210.stgit@skinsburskii.> In-Reply-To: <169645773092.11424.7258549771090599226.stgit@skinsburskii.> References: <169645773092.11424.7258549771090599226.stgit@skinsburskii.> User-Agent: StGit/0.19 MIME-Version: 1.0 X-Rspamd-Queue-Id: E9B391C001C X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: wfg7euypnziknp1ksggj36nao3n7futf X-HE-Tag: 1696458209-758976 X-HE-Meta: U2FsdGVkX1+Jh1xgUKDcaT4j6ZfFrhXMxVSEququ0ivR4fIe/om7mRFnlejitXCTDeppf+e7PlkSJNmd14ol6b63VIEUuWgJcGH0STkEKssYPvx3+XRz3zRaRMYw8vwRrzSgX8hN3H3bMgKk3mjSq0/7JgDscDqJVmLjXHnV240H/XDmG2xaV5sgPeCNPQpX0JPdcg+YpxXaldlCpM/iv1kbnJ2d6JFOqvkSFdbF6IrEHxNiTdB1rA35/LNAfR7YlhM9RoyJUEM58v3QJ4OkoM8DIaYDUd4pWvkSd9bCRjsTeI2zykmtpFWFEhfNSgRNMCucKn7m0qvz/jgLQMKEdVhcHUe/xKyKpQop9yEIJwzxFUttGVsOtz+hF9s+ZLqSPE9+YluESI/NKO5iGZm5X9zOOI7GBcnSp7ZAAilz3W4Oo+PzYzRopIlBtl0TH6V0p9GPBk4/vHQosDIFDJF0Y/UlfG+PuXHPMJT1k/3fY/KhQyEmnH6IjAskOtx3Yk/AwUavb41+3Ak07YlAhQBOk2zgIoQGzHX3YWu0H5F9QmN2lKK4O4ez1avNiyFpCpYDLoLP7KWFAVsQdWyySwS1W/QYI5mhcb42jQi572UceApLLhO51HTYVOi14PZcg6e5qALCy++o7Wv/52DECFHtnF0DdJ8DI0rJKCUaNDvjjxBEOdf512Rbi4E61vJm3oVXS1XqTih2RmVlrqlm2NQrr0xnqU4M5eD7ozxRq3WVO9AzQPuiQQA8EAgvl8yghc0ByQfp3XDJfJmfkHJwC+6bAtWLRoIHToFuw0zGTZlMbCRe7JgDvV6QphbzrhFqubSOW3eK5lXTTZXSnP0J4BpUaDdn2JKGzPMkmde/haSRDknrKdCTwH2wXR1iXLP686l6uvPhI908mipdMgZAP3CxQDipcAqLnhc2mSmYWJPRqoaAVXZmxRI21gKj8hFv8x9TzdL7SzGty6MJEVyY7rB wZVDiHV3 7gJB1JEIdnHzbnuKcNR0C8Bo/vJgfbRcww3dWmAN9QP2a5Ymov2/xdcyWNOM3qdglxwpGLlv6oxZAxtRburTOCkx9diaKpOYYmZaqBgaaEq5iDGbYREp6zlVA73SpDoiOzMJqJ0fWwtpexd4bsoKiZAONMWpv0+1wZjojGVh+7qwu6JAMxSW9pEFk5JeLb09/vnXv0yNEzpQEf1Q+PvJbSmrPAAWpXnjvtvPkTnYn9sC/VO98vidCbnwxRNLwmDQ/pFVN8MwOr5HY4jmf4s9e1tKWsMBIlUTeC5zaEo9zCpY5bvHHcGrF1Wiu1w== 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: Update the logic to classify the persistent memory pool in the kexec e820 table as "kernel reserved" when its corresponding e820 region type is "System RAM". Restore the pool when its type is "kernel reserved". This ensures the persistence of the memory pool across kexec operations. Signed-off-by: Stanislav Kinsburskii --- mm/pmpool.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/mm/pmpool.c b/mm/pmpool.c index c74f09b99283..1e3a2dffc5d3 100644 --- a/mm/pmpool.c +++ b/mm/pmpool.c @@ -11,11 +11,14 @@ #include #include +#include + #include "cma.h" struct pmpool { struct resource resource; struct cma *cma; + bool exists; }; static struct pmpool *default_pmpool; @@ -50,6 +53,18 @@ static void pmpool_cma_accomodate_bitmap(struct cma *cma) pr_info("CMA bitmap moved to %#llx\n", virt_to_phys(cma->bitmap)); } +static void pmpool_cma_restore_bitmap(struct cma *cma) +{ + u64 base; + + base = PFN_PHYS(cma->base_pfn); + + bitmap_free(cma->bitmap); + cma->bitmap = phys_to_virt(base); + + pr_info("CMA bitmap restored to %#llx\n", base); +} + static int __init default_pmpool_fixup(void) { if (!default_pmpool) @@ -58,7 +73,11 @@ static int __init default_pmpool_fixup(void) if (insert_resource(&iomem_resource, &default_pmpool->resource)) pr_err("failed to insert resource\n"); - pmpool_cma_accomodate_bitmap(default_pmpool->cma); + if (default_pmpool->exists) + pmpool_cma_restore_bitmap(default_pmpool->cma); + else + pmpool_cma_accomodate_bitmap(default_pmpool->cma); + return 0; } postcore_initcall(default_pmpool_fixup); @@ -73,7 +92,7 @@ static int __init parse_pmpool_opt(char *str) } }; phys_addr_t base, size, end; - int err; + int err, e820_type; /* Format is pmpool=, */ base = memparse(str, &str); @@ -92,10 +111,33 @@ static int __init parse_pmpool_opt(char *str) return 0; } + e820_type = e820__get_entry_type(base, end); + switch (e820_type) { + case E820_TYPE_RAM: + e820__range_update_kexec(base, size, E820_TYPE_RAM, + E820_TYPE_RESERVED_KERN); + e820__update_table_kexec(); + break; + case E820_TYPE_RESERVED_KERN: + /* + * TODO: there are several assumptions here: + * 1. That the kernel reserved region represents pmpool, + * 2. That the region had the same base and size and + * 3. That the region was properly initialized. + * All these assumptions aren't valid in general case and this + * should be addressed. + */ + pmpool.exists = true; + break; + default: + pr_err("unsupported e820 type: %d\n", e820_type); + 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 remove_e820_kexec_range; } pmpool.resource.start = base; @@ -108,6 +150,8 @@ static int __init parse_pmpool_opt(char *str) return 0; +remove_e820_kexec_range: + e820__range_remove_kexec(base, size, E820_TYPE_RESERVED_KERN, 1); free_memblock: memblock_phys_free(base, size); return 0;