From mboxrd@z Thu Jan 1 00:00:00 1970 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 99AD1C54E41 for ; Wed, 6 Mar 2024 10:29:16 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1CBDC6B006E; Wed, 6 Mar 2024 05:29:16 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 17C366B0071; Wed, 6 Mar 2024 05:29:16 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F12396B007E; Wed, 6 Mar 2024 05:29:15 -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 D63DB6B006E for ; Wed, 6 Mar 2024 05:29:15 -0500 (EST) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 7E6611C0E32 for ; Wed, 6 Mar 2024 10:29:15 +0000 (UTC) X-FDA: 81866241870.09.C228919 Received: from esa9.hc1455-7.c3s2.iphmx.com (esa9.hc1455-7.c3s2.iphmx.com [139.138.36.223]) by imf01.hostedemail.com (Postfix) with ESMTP id 0C48940005 for ; Wed, 6 Mar 2024 10:29:12 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=fujitsu.com header.s=fj2 header.b=P6wvBAAJ; dmarc=pass (policy=quarantine) header.from=fujitsu.com; spf=pass (imf01.hostedemail.com: domain of lizhijian@fujitsu.com designates 139.138.36.223 as permitted sender) smtp.mailfrom=lizhijian@fujitsu.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1709720953; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=UVszu2iJVL2KRjF7BNNEY0JqjDiAR4U4cF+zAd3qOPw=; b=Q5Oz6oBZhkDIlaBykWg2M3wmn8njr3GWxJSRmp2NoqZyTPODQdNZAZOkSg260/To99+Y7J S2wwR26xnVvJTh84HwKLkwVfbnHFYFs5HLguBVJoOMYZpRi0ogqudcC2BN5PY9C7gTjEPM nQt7qVV0+wWxUMt57DL0rLtOR3xbub8= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=fujitsu.com header.s=fj2 header.b=P6wvBAAJ; dmarc=pass (policy=quarantine) header.from=fujitsu.com; spf=pass (imf01.hostedemail.com: domain of lizhijian@fujitsu.com designates 139.138.36.223 as permitted sender) smtp.mailfrom=lizhijian@fujitsu.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1709720953; a=rsa-sha256; cv=none; b=guYCZcJezueOS70CGb/BY+e2a6X4YIAGE6QbY5+uwlBPY13/XWA06qRZZGBc0Gsp6/tPfx ++59C7uI5KYdBqtZAj5P9UmoRkDTu/hyqeaBSZJesvcEcMyENeQxtzKED790ziiobBj1yR wfb4i1xKVlgS64IDk9FwlSRbH/4bNpQ= DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj2; t=1709720953; x=1741256953; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ZoN1+liG2Aek8I+8vh1JTxN3rQPUF7ESoET6QRxJG2I=; b=P6wvBAAJ0xOawVOsKoCNMSiJ7M8YDru9mzKGE3q/HbcEgMlJKI5zJhD5 0TqcgRFNhJom7VSa8RBCOdDG/8Oc6XLAOiqts8br1l+dA2DP0NS30Xh0N fPPsjj4ynmF68iQAvCTS+inZdtiJNUYssa+Q2+5qwzcNnEwF2RDPSAGPi PXyvzazz4FNTsL097NSnmYDkDUX/gSRBlarW2IanQkIEMBMpBt12d6TpO 2oMBMA6bnt2/RlmSWhPoJsIZFvYmdYqcRcNJljMdCO325tB9kI1bdwj82 q1KcYOVImLY3xLSIFjJzFkVMe8bxUw4pzDblTvH+J69UyIU9vrFnJ9emt g==; X-IronPort-AV: E=McAfee;i="6600,9927,11004"; a="139869802" X-IronPort-AV: E=Sophos;i="6.06,208,1705330800"; d="scan'208";a="139869802" Received: from unknown (HELO yto-r3.gw.nic.fujitsu.com) ([218.44.52.219]) by esa9.hc1455-7.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Mar 2024 19:29:10 +0900 Received: from yto-m2.gw.nic.fujitsu.com (yto-nat-yto-m2.gw.nic.fujitsu.com [192.168.83.65]) by yto-r3.gw.nic.fujitsu.com (Postfix) with ESMTP id 72DB0E8CE9 for ; Wed, 6 Mar 2024 19:29:08 +0900 (JST) Received: from kws-ab3.gw.nic.fujitsu.com (kws-ab3.gw.nic.fujitsu.com [192.51.206.21]) by yto-m2.gw.nic.fujitsu.com (Postfix) with ESMTP id 9CC40D626D for ; Wed, 6 Mar 2024 19:29:07 +0900 (JST) Received: from edo.cn.fujitsu.com (edo.cn.fujitsu.com [10.167.33.5]) by kws-ab3.gw.nic.fujitsu.com (Postfix) with ESMTP id 25B2C2030C7E0 for ; Wed, 6 Mar 2024 19:29:07 +0900 (JST) Received: from localhost.localdomain (unknown [10.167.226.45]) by edo.cn.fujitsu.com (Postfix) with ESMTP id 30EC21A006D; Wed, 6 Mar 2024 18:29:06 +0800 (CST) From: Li Zhijian To: linux-kernel@vger.kernel.org Cc: y-goto@fujitsu.com, Alison Schofield , Andrew Morton , Baoquan He , Borislav Petkov , Dan Williams , Dave Hansen , Dave Jiang , Greg Kroah-Hartman , hpa@zytor.com, Ingo Molnar , Ira Weiny , Thomas Gleixner , Vishal Verma , linux-cxl@vger.kernel.org, linux-mm@kvack.org, nvdimm@lists.linux.dev, x86@kernel.org, kexec@lists.infradead.org, Li Zhijian Subject: [PATCH v3 1/7] mm: memremap: register/unregister altmap region to a separate resource Date: Wed, 6 Mar 2024 18:28:40 +0800 Message-Id: <20240306102846.1020868-2-lizhijian@fujitsu.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20240306102846.1020868-1-lizhijian@fujitsu.com> References: <20240306102846.1020868-1-lizhijian@fujitsu.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TM-AS-GCONF: 00 X-TM-AS-Product-Ver: IMSS-9.1.0.1417-9.0.0.1002-28234.006 X-TM-AS-User-Approved-Sender: Yes X-TMASE-Version: IMSS-9.1.0.1417-9.0.1002-28234.006 X-TMASE-Result: 10--10.470700-10.000000 X-TMASE-MatchedRID: 1qLRYaNAGIjSQ8oIxmHtSPSG/+sPtZVkP9kI+hf1EuqeEPi9wVyFrt3m 9tpwPB13LMZCJmSjFZdnvY9hxB9vc68zfGxMvR+8KQxHYsCcxGkJlr1xKkE5ucC5DTEMxpeQlAz 5vo1rYQ0JVj6hwZFNaEK3WEb5CMhwJSdQTuiG7Ijjpxdo/JwVm/NYQxCOihTN6hUULKzHRgQTgt 4grpaSCoXqHVXA333ceUDb3nIq9HleMBK5dsaSGQKDWtq/hHcNqLpXV8E1T7zozDhGeQC9EvdyG 0dzM6lz4vM1YF6AJbbCCfuIMF6xLSAHAopEd76vccmxpuUeZs/EDQ/FH4CdWBWn6lb2OMp5WsRb K4+hKATe8vYowW/wKQ== X-TMASE-SNAP-Result: 1.821001.0001-0-1-22:0,33:0,34:0-0 X-Rspamd-Queue-Id: 0C48940005 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: nx4mudt7d6k5m7uy554sbcg5sa85me4b X-HE-Tag: 1709720952-118639 X-HE-Meta: U2FsdGVkX1/NVUP3HwAcjsPp/qEWU46jT7jTWmjLCoNu/oPuqzk2FFMBTkLERYIjtpgmCQE6nzqlRVaq396R3U6KydIcgrT8IPzY3VmMV6iy6DYjsxD8MZDkmK9TTmjYtXzzi8rgfkEUadN5VppCYzSNq2zStVYfJdkJUYiHlG1CbO+Jx3Rfe5mZh3EEsG/o2nDuj1DiDUzAxWODQv22yin/8bzPHJ5WuTxMC3U5L4aqrZ/ZJNMD5fvnhI+zizLLlumGobaWjr9yEhcFJZthLEBkX6U2KqshYiYA5pjwH0ihsl0u11zkvdc5xwnc4zJGFrXytJ5aCFKUyUDzHF2SFaqGz8bAbDXqD967LC9iIcS73+fDhQF1iK/mEOJixKytIgUWbyGJ3JNvPIXYKBAspddfzTXli/XpsCDUJkEIyvc8grHXRyscQpTFbPDRKnrrvVuqivpoHE9yEul2RK0fWpAHWfCCBh2l3wJ9MvRq6bLYkMW4xtVEXhkQ7U3L4+YuFX4HZMX8cWnZWUTdr2VI1UqIIQXwoNsxkc/8jzKLBYyLeVjWtW4Ynot4cgZAHmE+HbQ823nuMRsFmVfLXI5mtbCmmEFgXshgHXg8xDoxAq/YQokwi5YehksIS/2F12yf/zA2ZODJ/3d0uYT4xJ1E3ytzU+oGKrae4unj9QAy+FXGgcflcmBc9/RAHhOkC1kzph0TSAea234fqhuGIW9YnRTHgk+JIn2TPw2dvhuBUxwlLWplf/f2yna4OcV/lizn2rDGq9OpIFgc/yzjTS4/CGVll9LHFtsl0kvBIqgeQdyET0HnHz0+r0rM2pJ5lznEOJk5MmCv2HbmVrVz9IGwXu9g3Z9J2SwFGRIy57PReX+1GJQsBzYkEU74xeywIMke+rY8P5eZG/6cXtffE0/qp/XTPjiRhU2N6fafV784AzaR2mMV8H0ldiJD3XxeQyEmHmM+8gRxaHGh6WRWDQk E1w== 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: The elfcorehdr descirbes the dumpable region in PT_LOADs. Generally, an iomem resource registered with flags (IORESOURCE_SYSTEM_RAM | IORESOUCE_BUSY) will be added to PT_LOADs by kexe_file_load(2). An iomem resource with name prefix "System RAM" will be added to PT_LOADs in kexec-tools by calling kexe_load(2). So a simple way to make the altmap dumpable is to register altmap region as a separate resource with the proper name and resource flags. Here naming it as "Device Backed Vmemmap" plus resource flags (IORESOURCE_DEVICE_BACKED_VMEMMAP and IORESOUCE_BUSY) to make it work first. A /proc/iomem example is as following: $ sudo cat /proc/iomem ... fffc0000-ffffffff : Reserved 100000000-13fffffff : Persistent Memory 100000000-10fffffff : namespace0.0 100000000-1005fffff : Device Backed Vmemmap # fsdax a80000000-b7fffffff : CXL Window 0 a80000000-affffffff : Persistent Memory a80000000-affffffff : region1 a80000000-a811fffff : namespace1.0 a80000000-a811fffff : Device Backed Vmemmap # devdax a81200000-abfffffff : dax1.0 b80000000-c7fffffff : CXL Window 1 c80000000-147fffffff : PCI Bus 0000:00 c80000000-c801fffff : PCI Bus 0000:01 ... CC: Andrew Morton CC: Greg Kroah-Hartman CC: Baoquan He CC: Dan Williams CC: linux-mm@kvack.org Signed-off-by: Li Zhijian --- include/linux/ioport.h | 1 + include/linux/memremap.h | 3 +++ mm/memremap.c | 23 ++++++++++++++++++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/include/linux/ioport.h b/include/linux/ioport.h index db7fe25f3370..3b59e924f531 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h @@ -69,6 +69,7 @@ struct resource { #define IORESOURCE_UNSET 0x20000000 /* No address assigned yet */ #define IORESOURCE_AUTO 0x40000000 #define IORESOURCE_BUSY 0x80000000 /* Driver has marked this resource busy */ +#define IORESOURCE_DEVICE_BACKED_VMEMMAP 0xa0000000 /* device backed vmemmap resource */ /* I/O resource extended types */ #define IORESOURCE_SYSTEM_RAM (IORESOURCE_MEM|IORESOURCE_SYSRAM) diff --git a/include/linux/memremap.h b/include/linux/memremap.h index 744c830f4b13..ca1f12353008 100644 --- a/include/linux/memremap.h +++ b/include/linux/memremap.h @@ -17,6 +17,8 @@ struct device; * @free: free pages set aside in the mapping for memmap storage * @align: pages reserved to meet allocation alignments * @alloc: track pages consumed, private to vmemmap_populate() + * @parent: the parent resource that altmap region belongs to + * @res: altmap region resource */ struct vmem_altmap { unsigned long base_pfn; @@ -25,6 +27,7 @@ struct vmem_altmap { unsigned long free; unsigned long align; unsigned long alloc; + struct resource *parent, *res; }; /* diff --git a/mm/memremap.c b/mm/memremap.c index 9e9fb1972fff..78047157b0ee 100644 --- a/mm/memremap.c +++ b/mm/memremap.c @@ -157,7 +157,17 @@ EXPORT_SYMBOL_GPL(memunmap_pages); static void devm_memremap_pages_release(void *data) { - memunmap_pages(data); + struct dev_pagemap *pgmap = data; + + if (pgmap->flags & PGMAP_ALTMAP_VALID && pgmap->altmap.res) { + resource_size_t start = pgmap->altmap.res->start; + resource_size_t size = pgmap->altmap.res->end - + pgmap->altmap.res->start + 1; + + __release_region(pgmap->altmap.parent, start, size); + } + + memunmap_pages(pgmap); } static void dev_pagemap_percpu_release(struct percpu_ref *ref) @@ -404,11 +414,22 @@ void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap) { int error; void *ret; + struct vmem_altmap *altmap = &pgmap->altmap; ret = memremap_pages(pgmap, dev_to_node(dev)); if (IS_ERR(ret)) return ret; + if (pgmap->flags & PGMAP_ALTMAP_VALID && altmap->parent) { + unsigned long start = altmap->base_pfn << PAGE_SHIFT; + unsigned long size = vmem_altmap_offset(altmap) << PAGE_SHIFT; + int flags = IORESOURCE_DEVICE_BACKED_VMEMMAP | IORESOURCE_BUSY; + + altmap->res = __request_region(altmap->parent, start, size, + "Device Backed Vmemmap", flags); + pr_debug("Insert a separate resource for altmap, %lx-%lx\n", + start, start + size); + } error = devm_add_action_or_reset(dev, devm_memremap_pages_release, pgmap); if (error) -- 2.29.2