From nobody Thu Dec 18 08:58:02 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 57556C77B7C for ; Thu, 27 Apr 2023 10:19:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243523AbjD0KS6 (ORCPT ); Thu, 27 Apr 2023 06:18:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53168 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243513AbjD0KSv (ORCPT ); Thu, 27 Apr 2023 06:18:51 -0400 Received: from esa7.hc1455-7.c3s2.iphmx.com (esa7.hc1455-7.c3s2.iphmx.com [139.138.61.252]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 85CF5E48 for ; Thu, 27 Apr 2023 03:18:50 -0700 (PDT) X-IronPort-AV: E=McAfee;i="6600,9927,10692"; a="93785511" X-IronPort-AV: E=Sophos;i="5.99,230,1677510000"; d="scan'208";a="93785511" Received: from unknown (HELO yto-r2.gw.nic.fujitsu.com) ([218.44.52.218]) by esa7.hc1455-7.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Apr 2023 19:18:47 +0900 Received: from yto-m4.gw.nic.fujitsu.com (yto-nat-yto-m4.gw.nic.fujitsu.com [192.168.83.67]) by yto-r2.gw.nic.fujitsu.com (Postfix) with ESMTP id B2ED7DE50E for ; Thu, 27 Apr 2023 19:18:45 +0900 (JST) Received: from kws-ab1.gw.nic.fujitsu.com (kws-ab1.gw.nic.fujitsu.com [192.51.206.11]) by yto-m4.gw.nic.fujitsu.com (Postfix) with ESMTP id E0C6DD5071 for ; Thu, 27 Apr 2023 19:18:44 +0900 (JST) Received: from FNSTPC.g08.fujitsu.local (unknown [10.167.226.45]) by kws-ab1.gw.nic.fujitsu.com (Postfix) with ESMTP id 090451145FC8; Thu, 27 Apr 2023 19:18:42 +0900 (JST) From: Li Zhijian To: x86@kernel.org, nvdimm@lists.linux.dev, kexec@lists.infradead.org Cc: linux-kernel@vger.kernel.org, y-goto@fujitsu.com, yangx.jy@fujitsu.com, ruansy.fnst@fujitsu.com, Li Zhijian , Baoquan He , Vivek Goyal , Dave Young Subject: [RFC PATCH v2 1/3] crash: export dev memmap header to vmcoreinfo Date: Thu, 27 Apr 2023 18:18:32 +0800 Message-Id: <20230427101838.12267-2-lizhijian@fujitsu.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230427101838.12267-1-lizhijian@fujitsu.com> References: <20230427101838.12267-1-lizhijian@fujitsu.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-TM-AS-Product-Ver: IMSS-9.1.0.1408-9.0.0.1002-27590.006 X-TM-AS-User-Approved-Sender: Yes X-TMASE-Version: IMSS-9.1.0.1408-9.0.1002-27590.006 X-TMASE-Result: 10--8.579600-10.000000 X-TMASE-MatchedRID: NusNVSlhHE3o2ZWMy24DXxFbgtHjUWLyEDnDEqNPdupgPgeggVwCFnOw /jufb+urjx5X3FdI4UDmn3xyPJAJoh2P280ZiGmRFDuTLTe6zcPDCscXmnDN70ekR3VSvOYVfMZ 9Z21cFRwZ+9qD5ZvwhynYQ5Puko8IFIetOq2+pVD/2ZGj3BST5dC1Z3HzBbIHEu7wSQdRGs93I3 P+EY3BjRcfmI3+RkHYnagtny7ZPcQfE8yM4pjsDzXJPZYaymc4xEHRux+uk8h+ICquNi0WJMFcj FTxsO89PnFUB9od7fL1uFbUDrfyNiyqaup2Gcf5ftwZ3X11IV0= X-TMASE-SNAP-Result: 1.821001.0001-0-1-22:0,33:0,34:0-0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Introduce a symbol and export it to vmcoreinfo. Dumping applications such as makedumpfile, with this variable, they are able to restore a linked list which contained the memmap region located in device. With this mechanism, nvdimm/pmem which allows placing memmap in device is able to export the its memmap(page array) to kdump kernel via vmcoreinfo. CC: Baoquan He CC: Vivek Goyal CC: Dave Young Signed-off-by: Li Zhijian --- include/linux/crash_core.h | 8 +++++ kernel/crash_core.c | 61 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/include/linux/crash_core.h b/include/linux/crash_core.h index de62a722431e..05ec2777f4fd 100644 --- a/include/linux/crash_core.h +++ b/include/linux/crash_core.h @@ -84,4 +84,12 @@ int parse_crashkernel_high(char *cmdline, unsigned long = long system_ram, int parse_crashkernel_low(char *cmdline, unsigned long long system_ram, unsigned long long *crash_size, unsigned long long *crash_base); =20 +#ifdef CONFIG_CRASH_CORE +void devm_memmap_vmcore_delete(void *match); +void devm_memmap_vmcore_update(void *match, u64 pfn, u64 npfn, bool dev); +#else +#define devm_memmap_vmcore_delete(match) do {} while (0) +#define devm_memmap_vmcore_update(match, pfn, npfn, dev) do {} while (0) +#endif + #endif /* LINUX_CRASH_CORE_H */ diff --git a/kernel/crash_core.c b/kernel/crash_core.c index 755f5f08ab38..f28cbd98f28b 100644 --- a/kernel/crash_core.c +++ b/kernel/crash_core.c @@ -401,6 +401,61 @@ phys_addr_t __weak paddr_vmcoreinfo_note(void) } EXPORT_SYMBOL(paddr_vmcoreinfo_note); =20 +struct devm_memmap_vmcore { + struct list_head entry; + unsigned long start; + unsigned long end; + void *match; +}; + +static struct devm_memmap_vmcore devm_memmap_vmcore_head =3D { + .entry =3D LIST_HEAD_INIT(devm_memmap_vmcore_head.entry), +}; +static DEFINE_MUTEX(devm_memmap_vmcore_mutex); + +static void devm_memmap_vmcore_add(void *match, u64 pfn, u64 npfn) +{ + struct devm_memmap_vmcore *metadata; + + metadata =3D kzalloc(sizeof(*metadata), GFP_KERNEL); + if (!metadata) { + pr_err("No enough memory"); + return; + } + + metadata->start =3D pfn; + metadata->end =3D pfn + npfn; + metadata->match =3D match; + + mutex_lock(&devm_memmap_vmcore_mutex); + list_add(&metadata->entry, &devm_memmap_vmcore_head.entry); + mutex_unlock(&devm_memmap_vmcore_mutex); +} + +void devm_memmap_vmcore_delete(void *match) +{ + struct devm_memmap_vmcore *metadata; + + mutex_lock(&devm_memmap_vmcore_mutex); + list_for_each_entry(metadata, &devm_memmap_vmcore_head.entry, entry) { + if (metadata->match =3D=3D match) { + list_del(&metadata->entry); + kfree(metadata); + break; + } + } + mutex_unlock(&devm_memmap_vmcore_mutex); +} +EXPORT_SYMBOL_GPL(devm_memmap_vmcore_delete); + +void devm_memmap_vmcore_update(void *match, u64 start_pfn, u64 npfn, bool = dev) +{ + devm_memmap_vmcore_delete(match); + if (dev) + devm_memmap_vmcore_add(match, start_pfn, npfn); +} +EXPORT_SYMBOL_GPL(devm_memmap_vmcore_update); + static int __init crash_save_vmcoreinfo_init(void) { vmcoreinfo_data =3D (unsigned char *)get_zeroed_page(GFP_KERNEL); @@ -436,6 +491,12 @@ static int __init crash_save_vmcoreinfo_init(void) VMCOREINFO_SYMBOL(contig_page_data); #endif #ifdef CONFIG_SPARSEMEM + VMCOREINFO_SYMBOL(devm_memmap_vmcore_head); + VMCOREINFO_STRUCT_SIZE(devm_memmap_vmcore); + VMCOREINFO_OFFSET(devm_memmap_vmcore, entry); + VMCOREINFO_OFFSET(devm_memmap_vmcore, start); + VMCOREINFO_OFFSET(devm_memmap_vmcore, end); + VMCOREINFO_SYMBOL_ARRAY(mem_section); VMCOREINFO_LENGTH(mem_section, NR_SECTION_ROOTS); VMCOREINFO_STRUCT_SIZE(mem_section); --=20 2.29.2 From nobody Thu Dec 18 08:58:02 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9F7CEC77B61 for ; Thu, 27 Apr 2023 10:19:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243554AbjD0KTP (ORCPT ); Thu, 27 Apr 2023 06:19:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53586 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243521AbjD0KTK (ORCPT ); Thu, 27 Apr 2023 06:19:10 -0400 Received: from esa6.hc1455-7.c3s2.iphmx.com (esa6.hc1455-7.c3s2.iphmx.com [68.232.139.139]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 81F765582 for ; Thu, 27 Apr 2023 03:18:59 -0700 (PDT) X-IronPort-AV: E=McAfee;i="6600,9927,10692"; a="116123167" X-IronPort-AV: E=Sophos;i="5.99,230,1677510000"; d="scan'208";a="116123167" Received: from unknown (HELO oym-r4.gw.nic.fujitsu.com) ([210.162.30.92]) by esa6.hc1455-7.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Apr 2023 19:18:57 +0900 Received: from oym-m2.gw.nic.fujitsu.com (oym-nat-oym-m2.gw.nic.fujitsu.com [192.168.87.59]) by oym-r4.gw.nic.fujitsu.com (Postfix) with ESMTP id D7C91DD9A4 for ; Thu, 27 Apr 2023 19:18:54 +0900 (JST) Received: from kws-ab1.gw.nic.fujitsu.com (kws-ab1.gw.nic.fujitsu.com [192.51.206.11]) by oym-m2.gw.nic.fujitsu.com (Postfix) with ESMTP id 12829BCB6F for ; Thu, 27 Apr 2023 19:18:54 +0900 (JST) Received: from FNSTPC.g08.fujitsu.local (unknown [10.167.226.45]) by kws-ab1.gw.nic.fujitsu.com (Postfix) with ESMTP id 71D921145FC8; Thu, 27 Apr 2023 19:18:51 +0900 (JST) From: Li Zhijian To: x86@kernel.org, nvdimm@lists.linux.dev, kexec@lists.infradead.org Cc: linux-kernel@vger.kernel.org, y-goto@fujitsu.com, yangx.jy@fujitsu.com, ruansy.fnst@fujitsu.com, Li Zhijian , Baoquan He , Vivek Goyal , Dave Young Subject: [RFC PATCH v2 makedumpfile 1/3] elf_info.c: Introduce is_pmem_pt_load_range Date: Thu, 27 Apr 2023 18:18:36 +0800 Message-Id: <20230427101838.12267-6-lizhijian@fujitsu.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230427101838.12267-1-lizhijian@fujitsu.com> References: <20230427101838.12267-1-lizhijian@fujitsu.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-TM-AS-Product-Ver: IMSS-9.1.0.1408-9.0.0.1002-27590.006 X-TM-AS-User-Approved-Sender: Yes X-TMASE-Version: IMSS-9.1.0.1408-9.0.1002-27590.006 X-TMASE-Result: 10--6.656400-10.000000 X-TMASE-MatchedRID: g7nni+nG95B15zj/0di3Q2/6CCblACLhCZa9cSpBObnAuQ0xDMaXkH4q tYI9sRE/j6kCfX0Edc4cG6dIciYEQpcLewwAa76fxvp0tuDMx3kXaMhZSeVFDLgbJOZ434BsCeW hs1FY/qX/t6IqZwsJBsYGS5HBZwU4r78SC5iivxwURSScn+QSXt0H8LFZNFG7bkV4e2xSge7fAH kd3wwbgyRebciNZz82XbRAX+BXE40cqC7zaDCQoh/BXqwE9HSW X-TMASE-SNAP-Result: 1.821001.0001-0-1-22:0,33:0,34:0-0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" It checks BIT(4) of Elf64_Phdr, currently only the former 3 bits are used by ELF. In kexec-tool, we extend the BIT(4) to indicate pmem or not. dump_Elf_load: phys_start phys_end virt_start = virt_end is_pmem dump_Elf_load: LOAD[ 0] 6b800000 6e42c000 ffffffffbcc00000 = ffffffffbf82c000 false dump_Elf_load: LOAD[ 1] 1000 9fc00 ffff975980001000 = ffff97598009fc00 false dump_Elf_load: LOAD[ 2] 100000 7f000000 ffff975980100000 = ffff9759ff000000 false dump_Elf_load: LOAD[ 3] bf000000 bffd7000 ffff975a3f000000 = ffff975a3ffd7000 false dump_Elf_load: LOAD[ 4] 100000000 140000000 ffff975a80000000 = ffff975ac0000000 false dump_Elf_load: LOAD[ 5] 140000000 23e200000 ffff975ac0000000 = ffff975bbe200000 true CC: Baoquan He CC: Vivek Goyal CC: Dave Young Signed-off-by: Li Zhijian --- elf_info.c | 31 +++++++++++++++++++++++++++---- elf_info.h | 1 + 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/elf_info.c b/elf_info.c index bc24083655d6..41b36b2804d2 100644 --- a/elf_info.c +++ b/elf_info.c @@ -43,6 +43,7 @@ struct pt_load_segment { unsigned long long phys_end; unsigned long long virt_start; unsigned long long virt_end; + int is_pmem; }; =20 static int nr_cpus; /* number of cpu */ @@ -153,6 +154,8 @@ check_elf_format(int fd, char *filename, int *phnum, un= signed int *num_load) return FALSE; } =20 +#define PF_DEV (1 << 4) + static int dump_Elf_load(Elf64_Phdr *prog, int num_load) { @@ -170,17 +173,37 @@ dump_Elf_load(Elf64_Phdr *prog, int num_load) pls->virt_end =3D pls->virt_start + prog->p_memsz; pls->file_offset =3D prog->p_offset; pls->file_size =3D prog->p_filesz; + pls->is_pmem =3D !!(prog->p_flags & PF_DEV); =20 if (num_load =3D=3D 0) - DEBUG_MSG("%8s %16s %16s %16s %16s\n", "", - "phys_start", "phys_end", "virt_start", "virt_end"); + DEBUG_MSG("%8s %16s %16s %16s %16s %8s\n", "", + "phys_start", "phys_end", "virt_start", "virt_end", + "is_pmem"); =20 - DEBUG_MSG("LOAD[%2d] %16llx %16llx %16llx %16llx\n", num_load, - pls->phys_start, pls->phys_end, pls->virt_start, pls->virt_end); + DEBUG_MSG("LOAD[%2d] %16llx %16llx %16llx %16llx %8s\n", num_load, + pls->phys_start, pls->phys_end, pls->virt_start, pls->virt_end, + pls->is_pmem ? "true": "false"); =20 return TRUE; } =20 +int is_pmem_pt_load_range(unsigned long long start, unsigned long long end) +{ + int i; + struct pt_load_segment *pls; + + for (i =3D 0; i < num_pt_loads; i++) { + pls =3D &pt_loads[i]; + if (pls->is_pmem && pls->phys_start =3D=3D NOT_PADDR) + return TRUE; + if (pls->is_pmem && pls->phys_start !=3D NOT_PADDR && + pls->phys_start <=3D start && pls->phys_end >=3D end) + return TRUE; + } + + return FALSE; +} + static off_t offset_next_note(void *note) { diff --git a/elf_info.h b/elf_info.h index d5416b32cdd7..a08d59a331f6 100644 --- a/elf_info.h +++ b/elf_info.h @@ -64,6 +64,7 @@ int get_pt_load_extents(int idx, off_t *file_offset, off_t *file_size); unsigned int get_num_pt_loads(void); +int is_pmem_pt_load_range(unsigned long long start, unsigned long long end= ); =20 void set_nr_cpus(int num); int get_nr_cpus(void); --=20 2.29.2 From nobody Thu Dec 18 08:58:02 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 91D34C77B73 for ; Thu, 27 Apr 2023 10:19:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243539AbjD0KTT (ORCPT ); Thu, 27 Apr 2023 06:19:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53278 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243524AbjD0KTK (ORCPT ); Thu, 27 Apr 2023 06:19:10 -0400 Received: from esa9.hc1455-7.c3s2.iphmx.com (esa9.hc1455-7.c3s2.iphmx.com [139.138.36.223]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2354A55A8 for ; Thu, 27 Apr 2023 03:19:01 -0700 (PDT) X-IronPort-AV: E=McAfee;i="6600,9927,10692"; a="103296175" X-IronPort-AV: E=Sophos;i="5.99,230,1677510000"; d="scan'208";a="103296175" Received: from unknown (HELO oym-r2.gw.nic.fujitsu.com) ([210.162.30.90]) by esa9.hc1455-7.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Apr 2023 19:18:58 +0900 Received: from oym-m3.gw.nic.fujitsu.com (oym-nat-oym-m3.gw.nic.fujitsu.com [192.168.87.60]) by oym-r2.gw.nic.fujitsu.com (Postfix) with ESMTP id 9E607D4322 for ; Thu, 27 Apr 2023 19:18:56 +0900 (JST) Received: from kws-ab1.gw.nic.fujitsu.com (kws-ab1.gw.nic.fujitsu.com [192.51.206.11]) by oym-m3.gw.nic.fujitsu.com (Postfix) with ESMTP id BD5EED55C6 for ; Thu, 27 Apr 2023 19:18:55 +0900 (JST) Received: from FNSTPC.g08.fujitsu.local (unknown [10.167.226.45]) by kws-ab1.gw.nic.fujitsu.com (Postfix) with ESMTP id EC5511146B81; Thu, 27 Apr 2023 19:18:53 +0900 (JST) From: Li Zhijian To: x86@kernel.org, nvdimm@lists.linux.dev, kexec@lists.infradead.org Cc: linux-kernel@vger.kernel.org, y-goto@fujitsu.com, yangx.jy@fujitsu.com, ruansy.fnst@fujitsu.com, Li Zhijian , Baoquan He , Vivek Goyal , Dave Young Subject: [RFC PATCH v2 makedumpfile 2/3] makedumpfile.c: Exclude all pmem pages Date: Thu, 27 Apr 2023 18:18:37 +0800 Message-Id: <20230427101838.12267-7-lizhijian@fujitsu.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230427101838.12267-1-lizhijian@fujitsu.com> References: <20230427101838.12267-1-lizhijian@fujitsu.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-TM-AS-Product-Ver: IMSS-9.1.0.1408-9.0.0.1002-27590.006 X-TM-AS-User-Approved-Sender: Yes X-TMASE-Version: IMSS-9.1.0.1408-9.0.1002-27590.006 X-TMASE-Result: 10--5.941800-10.000000 X-TMASE-MatchedRID: cV8N6dznfzuBgK4uB6zi2wI0yP/uoH+DwTlc9CcHMZerwqxtE531VIPc XuILVCbaWUOTJnYsQa2lRWSx/oj7ExHdGMlurS250e7jfBjhB8f0swHSFcVJ6NWO4MK8ycTFg4T d/DBNkVPuCkRfzEi2wgclwOc+5StklXlA6F65Sc32TS1YFaI5/xZSD+Gbjz3IqgHTw5IkXxgJfh 8gHD4nu42rc3rXpVKc4QeSIpZv9OkfE8yM4pjsDwtuKBGekqUpI/NGWt0UYPDcGMULvOV2rQ7tl vwzkBcKWTZ/RLlgCAbttAMkwZFFNAg1EEshzuUS X-TMASE-SNAP-Result: 1.821001.0001-0-1-22:0,33:0,34:0-0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Generally, the pmem is too large to suitable to be dumped. Further, only the namespace of the pmem is dumpable, but actually currently we have no idea the excatly layout of the namespace in pmem. CC: Baoquan He CC: Vivek Goyal CC: Dave Young Signed-off-by: Li Zhijian --- makedumpfile.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/makedumpfile.c b/makedumpfile.c index f40368364cf3..98c3b8c7ced9 100644 --- a/makedumpfile.c +++ b/makedumpfile.c @@ -100,6 +100,7 @@ mdf_pfn_t pfn_user; mdf_pfn_t pfn_free; mdf_pfn_t pfn_hwpoison; mdf_pfn_t pfn_offline; +mdf_pfn_t pfn_pmem_userdata; mdf_pfn_t pfn_elf_excluded; =20 mdf_pfn_t num_dumped; @@ -6326,6 +6327,7 @@ __exclude_unnecessary_pages(unsigned long mem_map, unsigned int order_offset, dtor_offset; unsigned long flags, mapping, private =3D 0; unsigned long compound_dtor, compound_head =3D 0; + unsigned int is_pmem; =20 /* * If a multi-page exclusion is pending, do it first @@ -6377,6 +6379,13 @@ __exclude_unnecessary_pages(unsigned long mem_map, continue; } =20 + is_pmem =3D is_pmem_pt_load_range(pfn << PAGESHIFT(), (pfn + 1) << PAGES= HIFT()); + if (is_pmem) { + pfn_pmem_userdata++; + clear_bit_on_2nd_bitmap_for_kernel(pfn, cycle); + continue; + } + index_pg =3D pfn % PGMM_CACHED; pcache =3D page_cache + (index_pg * SIZE(page)); =20 @@ -8084,7 +8093,7 @@ write_elf_pages_cyclic(struct cache_data *cd_header, = struct cache_data *cd_page) */ if (info->flag_cyclic) { pfn_zero =3D pfn_cache =3D pfn_cache_private =3D 0; - pfn_user =3D pfn_free =3D pfn_hwpoison =3D pfn_offline =3D 0; + pfn_user =3D pfn_free =3D pfn_hwpoison =3D pfn_offline =3D pfn_pmem_user= data =3D 0; pfn_memhole =3D info->max_mapnr; } =20 @@ -9422,7 +9431,7 @@ write_kdump_pages_and_bitmap_cyclic(struct cache_data= *cd_header, struct cache_d * Reset counter for debug message. */ pfn_zero =3D pfn_cache =3D pfn_cache_private =3D 0; - pfn_user =3D pfn_free =3D pfn_hwpoison =3D pfn_offline =3D 0; + pfn_user =3D pfn_free =3D pfn_hwpoison =3D pfn_offline =3D pfn_pmem_user= data =3D 0; pfn_memhole =3D info->max_mapnr; =20 /* @@ -10370,7 +10379,7 @@ print_report(void) */ pfn_original =3D info->max_mapnr - pfn_memhole; =20 - pfn_excluded =3D pfn_zero + pfn_cache + pfn_cache_private + pfn_excluded =3D pfn_zero + pfn_cache + pfn_cache_private + pfn_pmem_user= data + pfn_user + pfn_free + pfn_hwpoison + pfn_offline; =20 REPORT_MSG("\n"); @@ -10387,6 +10396,7 @@ print_report(void) REPORT_MSG(" Free pages : 0x%016llx\n", pfn_free); REPORT_MSG(" Hwpoison pages : 0x%016llx\n", pfn_hwpoison); REPORT_MSG(" Offline pages : 0x%016llx\n", pfn_offline); + REPORT_MSG(" pmem userdata pages : 0x%016llx\n", pfn_pmem_userdata= ); REPORT_MSG(" Remaining pages : 0x%016llx\n", pfn_original - pfn_excluded); =20 @@ -10426,7 +10436,7 @@ print_mem_usage(void) */ pfn_original =3D info->max_mapnr - pfn_memhole; =20 - pfn_excluded =3D pfn_zero + pfn_cache + pfn_cache_private + pfn_excluded =3D pfn_zero + pfn_cache + pfn_cache_private + pfn_pmem_user= data + pfn_user + pfn_free + pfn_hwpoison + pfn_offline; shrinking =3D (pfn_original - pfn_excluded) * 100; shrinking =3D shrinking / pfn_original; --=20 2.29.2 From nobody Thu Dec 18 08:58:02 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 153A0C77B61 for ; Thu, 27 Apr 2023 10:20:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243478AbjD0KUe (ORCPT ); Thu, 27 Apr 2023 06:20:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54606 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243534AbjD0KUH (ORCPT ); Thu, 27 Apr 2023 06:20:07 -0400 X-Greylist: delayed 64 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Thu, 27 Apr 2023 03:19:56 PDT Received: from esa2.hc1455-7.c3s2.iphmx.com (esa2.hc1455-7.c3s2.iphmx.com [207.54.90.48]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C09695583 for ; Thu, 27 Apr 2023 03:19:56 -0700 (PDT) X-IronPort-AV: E=McAfee;i="6600,9927,10692"; a="115055335" X-IronPort-AV: E=Sophos;i="5.99,230,1677510000"; d="scan'208";a="115055335" Received: from unknown (HELO yto-r1.gw.nic.fujitsu.com) ([218.44.52.217]) by esa2.hc1455-7.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Apr 2023 19:18:51 +0900 Received: from yto-m2.gw.nic.fujitsu.com (yto-nat-yto-m2.gw.nic.fujitsu.com [192.168.83.65]) by yto-r1.gw.nic.fujitsu.com (Postfix) with ESMTP id A4D94D66A2 for ; Thu, 27 Apr 2023 19:18:47 +0900 (JST) Received: from kws-ab1.gw.nic.fujitsu.com (kws-ab1.gw.nic.fujitsu.com [192.51.206.11]) by yto-m2.gw.nic.fujitsu.com (Postfix) with ESMTP id E58A5D35EC for ; Thu, 27 Apr 2023 19:18:46 +0900 (JST) Received: from FNSTPC.g08.fujitsu.local (unknown [10.167.226.45]) by kws-ab1.gw.nic.fujitsu.com (Postfix) with ESMTP id AE45F114626A; Thu, 27 Apr 2023 19:18:44 +0900 (JST) From: Li Zhijian To: x86@kernel.org, nvdimm@lists.linux.dev, kexec@lists.infradead.org Cc: linux-kernel@vger.kernel.org, y-goto@fujitsu.com, yangx.jy@fujitsu.com, ruansy.fnst@fujitsu.com, Li Zhijian , Dan Williams , Vishal Verma , Dave Jiang , Ira Weiny Subject: [RFC PATCH v2 2/3] drivers/nvdimm: export memmap of namespace to vmcoreinfo Date: Thu, 27 Apr 2023 18:18:33 +0800 Message-Id: <20230427101838.12267-3-lizhijian@fujitsu.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230427101838.12267-1-lizhijian@fujitsu.com> References: <20230427101838.12267-1-lizhijian@fujitsu.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-TM-AS-Product-Ver: IMSS-9.1.0.1408-9.0.0.1002-27590.006 X-TM-AS-User-Approved-Sender: Yes X-TMASE-Version: IMSS-9.1.0.1408-9.0.1002-27590.006 X-TMASE-Result: 10--5.296600-10.000000 X-TMASE-MatchedRID: mJ3yV3MWQwmUkDPUhpX2vh1kSRHxj+Z5A81piVnI+HU1SqhT+J6xsUbg XczvLJKOjx5X3FdI4UDmn3xyPJAJoh2P280ZiGmRfiKzBf4Yf9iOVGny5q72hp4Q+L3BXIWuyL5 QmWOgMfBI7ocMJBgR6/WV3EhAhFD6Sry0z8DqbhLNgrlT5Ajc7n0tCKdnhB589yM15V5aWpj6C0 ePs7A07Xi4XEoPXecxVvpTJmXb4dua6fR6Q+5OxeYzpCWDqqUZ3tGV3hp+Y+4= X-TMASE-SNAP-Result: 1.821001.0001-0-1-22:0,33:0,34:0-0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Each namespace has its own memmap, it will be udpated when namespace initializing/creating, updating, and deleting. CC: Dan Williams CC: Vishal Verma CC: Dave Jiang CC: Ira Weiny Signed-off-by: Li Zhijian --- drivers/nvdimm/namespace_devs.c | 2 ++ drivers/nvdimm/pfn_devs.c | 3 +++ 2 files changed, 5 insertions(+) diff --git a/drivers/nvdimm/namespace_devs.c b/drivers/nvdimm/namespace_dev= s.c index c60ec0b373c5..096203e6203f 100644 --- a/drivers/nvdimm/namespace_devs.c +++ b/drivers/nvdimm/namespace_devs.c @@ -8,6 +8,7 @@ #include #include #include +#include #include "nd-core.h" #include "pmem.h" #include "pfn.h" @@ -853,6 +854,7 @@ static ssize_t size_store(struct device *dev, if (rc =3D=3D 0 && val =3D=3D 0 && is_namespace_pmem(dev)) { struct nd_namespace_pmem *nspm =3D to_nd_namespace_pmem(dev); =20 + devm_memmap_vmcore_delete(to_ndns(dev)); kfree(nspm->uuid); nspm->uuid =3D NULL; } diff --git a/drivers/nvdimm/pfn_devs.c b/drivers/nvdimm/pfn_devs.c index af7d9301520c..80076996b2da 100644 --- a/drivers/nvdimm/pfn_devs.c +++ b/drivers/nvdimm/pfn_devs.c @@ -9,6 +9,7 @@ #include #include #include +#include #include "nd-core.h" #include "pfn.h" #include "nd.h" @@ -716,6 +717,8 @@ static int __nvdimm_setup_pfn(struct nd_pfn *nd_pfn, st= ruct dev_pagemap *pgmap) } else return -ENXIO; =20 + devm_memmap_vmcore_update(ndns, altmap->base_pfn, PHYS_PFN(offset), + nd_pfn->mode =3D=3D PFN_MODE_PMEM); return 0; } =20 --=20 2.29.2 From nobody Thu Dec 18 08:58:02 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D03B5C77B61 for ; Thu, 27 Apr 2023 10:20:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243556AbjD0KUs (ORCPT ); Thu, 27 Apr 2023 06:20:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53622 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243535AbjD0KUK (ORCPT ); Thu, 27 Apr 2023 06:20:10 -0400 Received: from esa12.hc1455-7.c3s2.iphmx.com (esa12.hc1455-7.c3s2.iphmx.com [139.138.37.100]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E74C959CA for ; Thu, 27 Apr 2023 03:20:06 -0700 (PDT) X-IronPort-AV: E=McAfee;i="6600,9927,10692"; a="94534352" X-IronPort-AV: E=Sophos;i="5.99,230,1677510000"; d="scan'208";a="94534352" Received: from unknown (HELO oym-r3.gw.nic.fujitsu.com) ([210.162.30.91]) by esa12.hc1455-7.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Apr 2023 19:19:01 +0900 Received: from oym-m3.gw.nic.fujitsu.com (oym-nat-oym-m3.gw.nic.fujitsu.com [192.168.87.60]) by oym-r3.gw.nic.fujitsu.com (Postfix) with ESMTP id 66CADD6473 for ; Thu, 27 Apr 2023 19:18:59 +0900 (JST) Received: from kws-ab1.gw.nic.fujitsu.com (kws-ab1.gw.nic.fujitsu.com [192.51.206.11]) by oym-m3.gw.nic.fujitsu.com (Postfix) with ESMTP id 89E0CD55C6 for ; Thu, 27 Apr 2023 19:18:58 +0900 (JST) Received: from FNSTPC.g08.fujitsu.local (unknown [10.167.226.45]) by kws-ab1.gw.nic.fujitsu.com (Postfix) with ESMTP id 8D6B01145FC8; Thu, 27 Apr 2023 19:18:55 +0900 (JST) From: Li Zhijian To: x86@kernel.org, nvdimm@lists.linux.dev, kexec@lists.infradead.org Cc: linux-kernel@vger.kernel.org, y-goto@fujitsu.com, yangx.jy@fujitsu.com, ruansy.fnst@fujitsu.com, Li Zhijian , Baoquan He , Vivek Goyal , Dave Young Subject: [RFC PATCH v2 makedumpfile 3/3] makedumpfile.c: Allow excluding metadata of pmem region Date: Thu, 27 Apr 2023 18:18:38 +0800 Message-Id: <20230427101838.12267-8-lizhijian@fujitsu.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230427101838.12267-1-lizhijian@fujitsu.com> References: <20230427101838.12267-1-lizhijian@fujitsu.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-TM-AS-Product-Ver: IMSS-9.1.0.1408-9.0.0.1002-27590.006 X-TM-AS-User-Approved-Sender: Yes X-TMASE-Version: IMSS-9.1.0.1408-9.0.1002-27590.006 X-TMASE-Result: 10--17.343100-10.000000 X-TMASE-MatchedRID: 9L013dfUpyvvnOSC+jk4DioiRKlBVkYI2+EDPw+8xrc6FHRWx2FGsL8F Hrw7frluf146W0iUu2uCJEtlOxU1W01QH6PUk2DDutvHF25zoU+u2GmdldmiUHH5y9+1Ef464rl +FHG3VoCuNMNPg+YVh/Na/9C36NYhcxNXyOjdrDtYUconbBJWJBeK/B+WKxKsuzdiHYg4JjNOyY xJZlS6a2+74QBQ4LHTNyno03YkG3nS5A6Ae0UgqqzGfgakLdjaoR62RNvkvOuysPB8dBBorUX1x YMqj/2QjNfBKGsNCNcr9TEMd9mL1I0TO6yT9XrPAoNa2r+Edw2061diBteN175TVqwOzxj8o6yI pLdrAfigzMqEdGA7shh6q/5LKwqLlwV2iaAfSWcURSScn+QSXt0H8LFZNFG7JQhrLH5KSJ0= X-TMASE-SNAP-Result: 1.821001.0001-0-1-22:0,33:0,34:0-0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Extend -d option(BIT(5)) to allow user excluding metadata CC: Baoquan He CC: Vivek Goyal CC: Dave Young Signed-off-by: Li Zhijian --- makedumpfile.c | 143 ++++++++++++++++++++++++++++++++++++++++++++++--- makedumpfile.h | 10 +++- 2 files changed, 145 insertions(+), 8 deletions(-) diff --git a/makedumpfile.c b/makedumpfile.c index 98c3b8c7ced9..e4d036505311 100644 --- a/makedumpfile.c +++ b/makedumpfile.c @@ -100,6 +100,7 @@ mdf_pfn_t pfn_user; mdf_pfn_t pfn_free; mdf_pfn_t pfn_hwpoison; mdf_pfn_t pfn_offline; +mdf_pfn_t pfn_pmem_metadata; mdf_pfn_t pfn_pmem_userdata; mdf_pfn_t pfn_elf_excluded; =20 @@ -1623,6 +1624,7 @@ get_symbol_info(void) SYMBOL_INIT(mem_map, "mem_map"); SYMBOL_INIT(vmem_map, "vmem_map"); SYMBOL_INIT(mem_section, "mem_section"); + SYMBOL_INIT(devm_memmap_vmcore_head, "devm_memmap_vmcore_head"); SYMBOL_INIT(pkmap_count, "pkmap_count"); SYMBOL_INIT_NEXT(pkmap_count_next, "pkmap_count"); SYMBOL_INIT(system_utsname, "system_utsname"); @@ -1727,6 +1729,11 @@ get_structure_info(void) info->flag_use_count =3D FALSE; } =20 + SIZE_INIT(devm_memmap_vmcore, "devm_memmap_vmcore"); + OFFSET_INIT(devm_memmap_vmcore.entry, "devm_memmap_vmcore", "entry"); + OFFSET_INIT(devm_memmap_vmcore.start, "devm_memmap_vmcore", "start"); + OFFSET_INIT(devm_memmap_vmcore.end, "devm_memmap_vmcore", "end"); + OFFSET_INIT(page.mapping, "page", "mapping"); OFFSET_INIT(page._mapcount, "page", "_mapcount"); OFFSET_INIT(page.private, "page", "private"); @@ -2757,6 +2764,7 @@ read_vmcoreinfo(void) READ_SYMBOL("mem_map", mem_map); READ_SYMBOL("vmem_map", vmem_map); READ_SYMBOL("mem_section", mem_section); + READ_SYMBOL("devm_memmap_vmcore_head", devm_memmap_vmcore_head); READ_SYMBOL("pkmap_count", pkmap_count); READ_SYMBOL("pkmap_count_next", pkmap_count_next); READ_SYMBOL("system_utsname", system_utsname); @@ -2805,6 +2813,7 @@ read_vmcoreinfo(void) READ_STRUCTURE_SIZE("pageflags", pageflags); READ_STRUCTURE_SIZE("vmemmap_backing", vmemmap_backing); READ_STRUCTURE_SIZE("mmu_psize_def", mmu_psize_def); + READ_STRUCTURE_SIZE("devm_memmap_vmcore", devm_memmap_vmcore); =20 =20 READ_MEMBER_OFFSET("page.flags", page.flags); @@ -2852,6 +2861,9 @@ read_vmcoreinfo(void) READ_MEMBER_OFFSET("mmu_psize_def.shift", mmu_psize_def.shift); READ_MEMBER_OFFSET("cpu_spec.mmu_features", cpu_spec.mmu_features); READ_MEMBER_OFFSET("uts_namespace.name", uts_namespace.name); + READ_MEMBER_OFFSET("devm_memmap_vmcore.entry", devm_memmap_vmcore.entry); + READ_MEMBER_OFFSET("devm_memmap_vmcore.start", devm_memmap_vmcore.start); + READ_MEMBER_OFFSET("devm_memmap_vmcore.end", devm_memmap_vmcore.end); =20 READ_STRUCTURE_SIZE("printk_log", printk_log); READ_STRUCTURE_SIZE("printk_ringbuffer", printk_ringbuffer); @@ -3210,6 +3222,88 @@ pgdat4: return SYMBOL(contig_page_data); } =20 +struct devm_memmap_entry { + unsigned long start, end; + struct devm_memmap_entry *next; +}; + +static struct devm_memmap_entry *devm_memmap; + +static void pmem_add_next(unsigned long start, unsigned long end) +{ + struct devm_memmap_entry *tail =3D devm_memmap, *node; + + node =3D calloc(1, sizeof(*node)); + if (!node) + return; + + node->start =3D start; + node->end =3D end; + node->next =3D NULL; + + if (!devm_memmap) { + devm_memmap =3D node; + return; + } + + while (tail->next) + tail =3D tail->next; + + tail->next =3D node; +} + +static void dump_pmem_metadata(int i) +{ + long head_next; + long entry, head =3D SYMBOL(devm_memmap_vmcore_head); + long devm_entry, start_p, end_p; + unsigned long start, end; + static int cnt =3D 0; + + entry =3D head; + + if (head =3D=3D NOT_FOUND_SYMBOL || + OFFSET(list_head.next) =3D=3D NOT_FOUND_STRUCTURE || + OFFSET(devm_memmap_vmcore.start) =3D=3D NOT_FOUND_STRUCTURE || + OFFSET(devm_memmap_vmcore.end) =3D=3D NOT_FOUND_STRUCTURE || + OFFSET(devm_memmap_vmcore.entry) =3D=3D NOT_FOUND_STRUCTURE) + return; + + MSG("list_head.next: %ld\n", OFFSET(list_head.next)); + MSG("devm_memmap_vmcore.start: %ld\n", OFFSET(devm_memmap_vmcore.start)); + MSG("devm_memmap_vmcore.end: %ld\n", OFFSET(devm_memmap_vmcore.end)); + MSG("devm_memmap_vmcore.entry: %ld\n", OFFSET(devm_memmap_vmcore.entry)); + +again: + if (!readmem(VADDR, entry + OFFSET(list_head.next), &head_next, sizeof(he= ad_next))) + return; + + if (head_next =3D=3D head) { + return; + } + + entry =3D head_next; + + devm_entry =3D entry - OFFSET(devm_memmap_vmcore.entry); + start_p =3D devm_entry + OFFSET(devm_memmap_vmcore.start); + end_p =3D devm_entry + OFFSET(devm_memmap_vmcore.end); + + if (!readmem(VADDR, start_p, &start, sizeof(unsigned long))) { + goto fail; + } + + if (!readmem(VADDR, end_p, &end, sizeof(unsigned long))) { + goto fail; + } + + MSG("devm_memmap_vmcore[%d]: addr: %lx, [%lx - %lx )\n", cnt++, devm_entr= y, start, end); + pmem_add_next(start, end); + goto again; + +fail: + return; +} + void dump_mem_map(mdf_pfn_t pfn_start, mdf_pfn_t pfn_end, unsigned long mem_map, int num_mm) @@ -3728,6 +3822,7 @@ get_mem_section(unsigned int mem_section_size, unsign= ed long *mem_maps, return FALSE; } =20 + dump_pmem_metadata(1); /* * There was a report that the first validation wrongly returned TRUE * with -x vmlinux and SPARSEMEM_EXTREME v2 on s390x, so skip it. @@ -6311,6 +6406,30 @@ exclude_range(mdf_pfn_t *counter, mdf_pfn_t pfn, mdf= _pfn_t endpfn, } } =20 +static int is_pmem_metadata_range(unsigned long start, unsigned long end) +{ + struct devm_memmap_entry *head =3D devm_memmap; + + while (head) { + if (head->start <=3D start && head->end >=3D end) + return TRUE; + head =3D head->next; + } + + return FALSE; +} + +static void cleanup_pmem_metadata(void) +{ + struct devm_memmap_entry *head =3D devm_memmap; + + while (head) { + struct devm_memmap_entry *next =3D head->next; + free(head); + head =3D next; + } +} + int __exclude_unnecessary_pages(unsigned long mem_map, mdf_pfn_t pfn_start, mdf_pfn_t pfn_end, struct cycle *cycle) @@ -6381,9 +6500,17 @@ __exclude_unnecessary_pages(unsigned long mem_map, =20 is_pmem =3D is_pmem_pt_load_range(pfn << PAGESHIFT(), (pfn + 1) << PAGES= HIFT()); if (is_pmem) { - pfn_pmem_userdata++; - clear_bit_on_2nd_bitmap_for_kernel(pfn, cycle); - continue; + if (is_pmem_metadata_range(pfn, pfn + 1)) { + if (info->dump_level & DL_EXCLUDE_PMEM_META) { + pfn_pmem_metadata++; + clear_bit_on_2nd_bitmap_for_kernel(pfn, cycle); + continue; + } + } else { + pfn_pmem_userdata++; + clear_bit_on_2nd_bitmap_for_kernel(pfn, cycle); + continue; + } } =20 index_pg =3D pfn % PGMM_CACHED; @@ -8092,7 +8219,7 @@ write_elf_pages_cyclic(struct cache_data *cd_header, = struct cache_data *cd_page) * Reset counter for debug message. */ if (info->flag_cyclic) { - pfn_zero =3D pfn_cache =3D pfn_cache_private =3D 0; + pfn_zero =3D pfn_cache =3D pfn_cache_private =3D pfn_pmem_metadata =3D 0; pfn_user =3D pfn_free =3D pfn_hwpoison =3D pfn_offline =3D pfn_pmem_user= data =3D 0; pfn_memhole =3D info->max_mapnr; } @@ -9430,7 +9557,7 @@ write_kdump_pages_and_bitmap_cyclic(struct cache_data= *cd_header, struct cache_d /* * Reset counter for debug message. */ - pfn_zero =3D pfn_cache =3D pfn_cache_private =3D 0; + pfn_zero =3D pfn_cache =3D pfn_cache_private =3D pfn_pmem_metadata =3D 0; pfn_user =3D pfn_free =3D pfn_hwpoison =3D pfn_offline =3D pfn_pmem_user= data =3D 0; pfn_memhole =3D info->max_mapnr; =20 @@ -10380,7 +10507,7 @@ print_report(void) pfn_original =3D info->max_mapnr - pfn_memhole; =20 pfn_excluded =3D pfn_zero + pfn_cache + pfn_cache_private + pfn_pmem_user= data - + pfn_user + pfn_free + pfn_hwpoison + pfn_offline; + + pfn_user + pfn_free + pfn_hwpoison + pfn_offline + pfn_pmem_metadat= a; =20 REPORT_MSG("\n"); REPORT_MSG("Original pages : 0x%016llx\n", pfn_original); @@ -10396,6 +10523,7 @@ print_report(void) REPORT_MSG(" Free pages : 0x%016llx\n", pfn_free); REPORT_MSG(" Hwpoison pages : 0x%016llx\n", pfn_hwpoison); REPORT_MSG(" Offline pages : 0x%016llx\n", pfn_offline); + REPORT_MSG(" pmem metadata pages : 0x%016llx\n", pfn_pmem_metadata= ); REPORT_MSG(" pmem userdata pages : 0x%016llx\n", pfn_pmem_userdata= ); REPORT_MSG(" Remaining pages : 0x%016llx\n", pfn_original - pfn_excluded); @@ -10437,7 +10565,7 @@ print_mem_usage(void) pfn_original =3D info->max_mapnr - pfn_memhole; =20 pfn_excluded =3D pfn_zero + pfn_cache + pfn_cache_private + pfn_pmem_user= data - + pfn_user + pfn_free + pfn_hwpoison + pfn_offline; + + pfn_user + pfn_free + pfn_hwpoison + pfn_offline + pfn_pmem_metadat= a; shrinking =3D (pfn_original - pfn_excluded) * 100; shrinking =3D shrinking / pfn_original; total_size =3D info->page_size * pfn_original; @@ -12403,6 +12531,7 @@ out: } } free_elf_info(); + cleanup_pmem_metadata(); =20 return retcd; } diff --git a/makedumpfile.h b/makedumpfile.h index 21dec7d1145c..790fa698bb0e 100644 --- a/makedumpfile.h +++ b/makedumpfile.h @@ -206,7 +206,7 @@ test_bit(int nr, unsigned long addr) * Dump Level */ #define MIN_DUMP_LEVEL (0) -#define MAX_DUMP_LEVEL (31) +#define MAX_DUMP_LEVEL (63) #define NUM_ARRAY_DUMP_LEVEL (MAX_DUMP_LEVEL + 1) /* enough to allocate all the dump_level */ #define DL_EXCLUDE_ZERO (0x001) /* Exclude Pages filled with Zeros */ @@ -216,6 +216,7 @@ test_bit(int nr, unsigned long addr) with Private Pages */ #define DL_EXCLUDE_USER_DATA (0x008) /* Exclude UserProcessData Pages */ #define DL_EXCLUDE_FREE (0x010) /* Exclude Free Pages */ +#define DL_EXCLUDE_PMEM_META (0x020) /* Exclude pmem metadata Pages */ =20 =20 /* @@ -1711,6 +1712,7 @@ struct symbol_table { unsigned long long mem_map; unsigned long long vmem_map; unsigned long long mem_section; + unsigned long long devm_memmap_vmcore_head; unsigned long long pkmap_count; unsigned long long pkmap_count_next; unsigned long long system_utsname; @@ -1817,6 +1819,7 @@ struct size_table { long node_memblk_s; long nodemask_t; long printk_log; + long devm_memmap_vmcore; =20 /* * for lockless printk ringbuffer @@ -1896,6 +1899,11 @@ struct offset_table { long next; long prev; } list_head; + struct devm_memmap_vmcore { + long entry; + long start; + long end; + } devm_memmap_vmcore; struct node_memblk_s { long start_paddr; long size; --=20 2.29.2 From nobody Thu Dec 18 08:58:02 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D86A8C77B73 for ; Thu, 27 Apr 2023 10:20:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243538AbjD0KUj (ORCPT ); Thu, 27 Apr 2023 06:20:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53442 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243521AbjD0KUI (ORCPT ); Thu, 27 Apr 2023 06:20:08 -0400 X-Greylist: delayed 63 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Thu, 27 Apr 2023 03:19:58 PDT Received: from esa12.hc1455-7.c3s2.iphmx.com (esa12.hc1455-7.c3s2.iphmx.com [139.138.37.100]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B04CD4696 for ; Thu, 27 Apr 2023 03:19:58 -0700 (PDT) X-IronPort-AV: E=McAfee;i="6600,9927,10692"; a="94534338" X-IronPort-AV: E=Sophos;i="5.99,230,1677510000"; d="scan'208";a="94534338" Received: from unknown (HELO yto-r1.gw.nic.fujitsu.com) ([218.44.52.217]) by esa12.hc1455-7.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Apr 2023 19:18:52 +0900 Received: from yto-m3.gw.nic.fujitsu.com (yto-nat-yto-m3.gw.nic.fujitsu.com [192.168.83.66]) by yto-r1.gw.nic.fujitsu.com (Postfix) with ESMTP id C76A5D66A1 for ; Thu, 27 Apr 2023 19:18:50 +0900 (JST) Received: from kws-ab1.gw.nic.fujitsu.com (kws-ab1.gw.nic.fujitsu.com [192.51.206.11]) by yto-m3.gw.nic.fujitsu.com (Postfix) with ESMTP id 0811ED969C for ; Thu, 27 Apr 2023 19:18:50 +0900 (JST) Received: from FNSTPC.g08.fujitsu.local (unknown [10.167.226.45]) by kws-ab1.gw.nic.fujitsu.com (Postfix) with ESMTP id B3D861145FC8; Thu, 27 Apr 2023 19:18:46 +0900 (JST) From: Li Zhijian To: x86@kernel.org, nvdimm@lists.linux.dev, kexec@lists.infradead.org Cc: linux-kernel@vger.kernel.org, y-goto@fujitsu.com, yangx.jy@fujitsu.com, ruansy.fnst@fujitsu.com, Li Zhijian , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , "H. Peter Anvin" , Eric Biederman , Takashi Iwai , Baoquan He , Vlastimil Babka , Sean Christopherson , Jonathan Cameron , Greg Kroah-Hartman , Andy Shevchenko , Dan Williams , "Rafael J. Wysocki" , Ira Weiny , Raul E Rangel , Colin Foster , Vishal Verma Subject: [RFC PATCH v2 3/3] resource, crash: Make kexec_file_load support pmem Date: Thu, 27 Apr 2023 18:18:34 +0800 Message-Id: <20230427101838.12267-4-lizhijian@fujitsu.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230427101838.12267-1-lizhijian@fujitsu.com> References: <20230427101838.12267-1-lizhijian@fujitsu.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-TM-AS-Product-Ver: IMSS-9.1.0.1408-9.0.0.1002-27590.006 X-TM-AS-User-Approved-Sender: Yes X-TMASE-Version: IMSS-9.1.0.1408-9.0.1002-27590.006 X-TMASE-Result: 10--7.728400-10.000000 X-TMASE-MatchedRID: +Dq5+AB/HWKUG5QaGlcSvSFcmxL76KeOwMc7ZZ8e7/dgPgeggVwCFnOw /jufb+urjx5X3FdI4UDmn3xyPJAJoh2P280ZiGmRutvHF25zoU8YH39vFLryE7rfxlRjqBJ3k8q tQTvc3FF+J/o+y9+xUrCUXHFFjdR48ZTibkDR5X0JGwniUXM+M9Y3ddD/vCxPaskqKES/kfLiuX 4UcbdWgHeRkG9uGhVN3B7MhNx6/YcfE8yM4pjsDwtuKBGekqUpI/NGWt0UYPCqPXzIJWKFRWTxV nPsfXK/2KFWEl0RCT8sKsYTWZ7DajkOabXnQVrB X-TMASE-SNAP-Result: 1.821001.0001-0-1-22:0,33:0,34:0-0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" It does: 1. Add pmem region into PT_LOADs of vmcore 2. Mark pmem region's p_flags as PF_DEV CC: Thomas Gleixner CC: Ingo Molnar CC: Borislav Petkov CC: Dave Hansen CC: "H. Peter Anvin" CC: Eric Biederman CC: Takashi Iwai CC: Baoquan He CC: Vlastimil Babka CC: Sean Christopherson CC: Jonathan Cameron CC: Greg Kroah-Hartman CC: Andy Shevchenko CC: Dan Williams CC: "Rafael J. Wysocki" CC: Ira Weiny CC: Raul E Rangel CC: Colin Foster CC: Vishal Verma CC: x86@kernel.org Signed-off-by: Li Zhijian --- arch/x86/kernel/crash.c | 2 ++ include/linux/ioport.h | 3 +++ kernel/kexec_file.c | 10 ++++++++++ kernel/resource.c | 11 +++++++++++ 4 files changed, 26 insertions(+) diff --git a/arch/x86/kernel/crash.c b/arch/x86/kernel/crash.c index cdd92ab43cda..dc9d03083565 100644 --- a/arch/x86/kernel/crash.c +++ b/arch/x86/kernel/crash.c @@ -178,6 +178,7 @@ static struct crash_mem *fill_up_crash_elf_data(void) if (!nr_ranges) return NULL; =20 + walk_pmem_res(0, -1, &nr_ranges, get_nr_ram_ranges_callback); /* * Exclusion of crash region and/or crashk_low_res may cause * another range split. So add extra two slots here. @@ -243,6 +244,7 @@ static int prepare_elf_headers(struct kimage *image, vo= id **addr, ret =3D walk_system_ram_res(0, -1, cmem, prepare_elf64_ram_headers_callba= ck); if (ret) goto out; + walk_pmem_res(0, -1, cmem, prepare_elf64_ram_headers_callback); =20 /* Exclude unwanted mem ranges */ ret =3D elf_header_exclude_ranges(cmem); diff --git a/include/linux/ioport.h b/include/linux/ioport.h index 25d768d48970..bde88a47cc1a 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h @@ -331,6 +331,9 @@ extern int walk_system_ram_res(u64 start, u64 end, void *arg, int (*func)(struct resource *, void *)); extern int +walk_pmem_res(u64 start, u64 end, void *arg, + int (*func)(struct resource *, void *)); +extern int walk_iomem_res_desc(unsigned long desc, unsigned long flags, u64 start, u6= 4 end, void *arg, int (*func)(struct resource *, void *)); =20 diff --git a/kernel/kexec_file.c b/kernel/kexec_file.c index f1a0e4e3fb5c..e79ceaee2926 100644 --- a/kernel/kexec_file.c +++ b/kernel/kexec_file.c @@ -29,6 +29,8 @@ #include #include "kexec_internal.h" =20 +#define PF_DEV (1 << 4) + #ifdef CONFIG_KEXEC_SIG static bool sig_enforce =3D IS_ENABLED(CONFIG_KEXEC_SIG_FORCE); =20 @@ -1221,6 +1223,12 @@ int crash_exclude_mem_range(struct crash_mem *mem, return 0; } =20 +static bool is_pmem_range(u64 start, u64 size) +{ + return REGION_INTERSECTS =3D=3D region_intersects(start, size, + IORESOURCE_MEM, IORES_DESC_PERSISTENT_MEMORY); +} + int crash_prepare_elf64_headers(struct crash_mem *mem, int need_kernel_map, void **addr, unsigned long *sz) { @@ -1302,6 +1310,8 @@ int crash_prepare_elf64_headers(struct crash_mem *mem= , int need_kernel_map, =20 phdr->p_type =3D PT_LOAD; phdr->p_flags =3D PF_R|PF_W|PF_X; + if (is_pmem_range(mstart, mend - mstart)) + phdr->p_flags |=3D PF_DEV; phdr->p_offset =3D mstart; =20 phdr->p_paddr =3D mstart; diff --git a/kernel/resource.c b/kernel/resource.c index b1763b2fd7ef..f3f1ce6fc384 100644 --- a/kernel/resource.c +++ b/kernel/resource.c @@ -431,6 +431,17 @@ int walk_system_ram_res(u64 start, u64 end, void *arg, func); } =20 +/* + * This function calls the @func callback against all memory ranges, which + * are ranges marked as IORESOURCE_MEM and IORES_DESC_PERSISTENT_MEMORY. + */ +int walk_pmem_res(u64 start, u64 end, void *arg, + int (*func)(struct resource *, void *)) +{ + return __walk_iomem_res_desc(start, end, IORESOURCE_MEM, + IORES_DESC_PERSISTENT_MEMORY, arg, func); +} + /* * This function calls the @func callback against all memory ranges, which * are ranges marked as IORESOURCE_MEM and IORESOUCE_BUSY. --=20 2.29.2 From nobody Thu Dec 18 08:58:02 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 933F4C77B61 for ; Thu, 27 Apr 2023 10:20:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243451AbjD0KUo (ORCPT ); Thu, 27 Apr 2023 06:20:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53722 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243369AbjD0KUK (ORCPT ); Thu, 27 Apr 2023 06:20:10 -0400 Received: from esa12.hc1455-7.c3s2.iphmx.com (esa12.hc1455-7.c3s2.iphmx.com [139.138.37.100]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2E85255B7 for ; Thu, 27 Apr 2023 03:20:05 -0700 (PDT) X-IronPort-AV: E=McAfee;i="6600,9927,10692"; a="94534342" X-IronPort-AV: E=Sophos;i="5.99,230,1677510000"; d="scan'208";a="94534342" Received: from unknown (HELO yto-r1.gw.nic.fujitsu.com) ([218.44.52.217]) by esa12.hc1455-7.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Apr 2023 19:18:54 +0900 Received: from yto-m3.gw.nic.fujitsu.com (yto-nat-yto-m3.gw.nic.fujitsu.com [192.168.83.66]) by yto-r1.gw.nic.fujitsu.com (Postfix) with ESMTP id 52709D66A0 for ; Thu, 27 Apr 2023 19:18:52 +0900 (JST) Received: from kws-ab1.gw.nic.fujitsu.com (kws-ab1.gw.nic.fujitsu.com [192.51.206.11]) by yto-m3.gw.nic.fujitsu.com (Postfix) with ESMTP id 9DC8F16E60 for ; Thu, 27 Apr 2023 19:18:51 +0900 (JST) Received: from FNSTPC.g08.fujitsu.local (unknown [10.167.226.45]) by kws-ab1.gw.nic.fujitsu.com (Postfix) with ESMTP id 9369C114147F; Thu, 27 Apr 2023 19:18:49 +0900 (JST) From: Li Zhijian To: x86@kernel.org, nvdimm@lists.linux.dev, kexec@lists.infradead.org Cc: linux-kernel@vger.kernel.org, y-goto@fujitsu.com, yangx.jy@fujitsu.com, ruansy.fnst@fujitsu.com, Li Zhijian , Baoquan He , Vivek Goyal , Dave Young Subject: [RFC PATCH v2 kexec-tools] kexec: Add and mark pmem region into PT_LOADs Date: Thu, 27 Apr 2023 18:18:35 +0800 Message-Id: <20230427101838.12267-5-lizhijian@fujitsu.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230427101838.12267-1-lizhijian@fujitsu.com> References: <20230427101838.12267-1-lizhijian@fujitsu.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-TM-AS-Product-Ver: IMSS-9.1.0.1408-9.0.0.1002-27590.006 X-TM-AS-User-Approved-Sender: Yes X-TMASE-Version: IMSS-9.1.0.1408-9.0.1002-27590.006 X-TMASE-Result: 10--6.121700-10.000000 X-TMASE-MatchedRID: JUGAxiLh1cNSuJfEWZSQfBmCYUYerLHrwTlc9CcHMZerwqxtE531VIpb wG9fIuITIqMWro5FhUiisum7bT5AftDFhoVadDNxfUkgDiuGxn/jmgMQ17h56yS30GKAkBxWCu1 ja6drUTmG9aEScwNGm4Ay6p60ZV62yA7duzCw6dLdB/CxWTRRu25FeHtsUoHuUiwP+xLbq3AxYM d1N0VknfHRdUVXE7DT6INmePPYNPFgO21BQaodlQ== X-TMASE-SNAP-Result: 1.821001.0001-0-1-22:0,33:0,34:0-0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" It does: 1. Add pmem region into PT_LOADs of vmcore 2. Mark pmem region's p_flags as PF_DEV CC: Baoquan He CC: Vivek Goyal CC: Dave Young Signed-off-by: Li Zhijian --- kexec/crashdump-elf.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kexec/crashdump-elf.c b/kexec/crashdump-elf.c index b8bb686a17ca..ab257e825187 100644 --- a/kexec/crashdump-elf.c +++ b/kexec/crashdump-elf.c @@ -25,6 +25,8 @@ do { \ } while(0) #endif =20 +#define PF_DEV (1 << 4) + /* Prepares the crash memory headers and stores in supplied buffer. */ int FUNC(struct kexec_info *info, struct crash_elf_info *elf_info, @@ -199,7 +201,7 @@ int FUNC(struct kexec_info *info, * A seprate program header for Backup Region*/ for (i =3D 0; i < ranges; i++, range++) { unsigned long long mstart, mend; - if (range->type !=3D RANGE_RAM) + if (range->type !=3D RANGE_RAM && range->type !=3D RANGE_PMEM) continue; mstart =3D range->start; mend =3D range->end; @@ -209,6 +211,8 @@ int FUNC(struct kexec_info *info, bufp +=3D sizeof(PHDR); phdr->p_type =3D PT_LOAD; phdr->p_flags =3D PF_R|PF_W|PF_X; + if (range->type =3D=3D RANGE_PMEM) + phdr->p_flags |=3D PF_DEV; phdr->p_offset =3D mstart; =20 if (mstart =3D=3D info->backup_src_start --=20 2.29.2