[PATCH] handle renamed init_level4_pgt -> init_top_pgt
Atsushi Kumagai
ats-kumagai at wm.jp.nec.com
Fri Dec 8 00:15:30 PST 2017
>>Linux 4.13 renamed init_level4_pgt to init_top_pgt in preparation for
>>introducing 5-level page tables. This patch follows the rename if
>>the lookup for init_level4_pgt fails. It also checks to see if
>>5-level page tables are enabled and bails if it discovers they are.
>
>Thanks Jeff, but could you rebase it on the current devel branch ?
>vtop4 for x86_64 was modified in the commit below:
>
>commit 8c89727155f4994b4e75a659e28e5eff16ff6cbc
>Author: Takao Indoh <indou.takao at jp.fujitsu.com>
>Date: Thu Oct 26 20:32:54 2017 +0900
>
> [PATCH v3 2/4] Introduce vtop4_x86_64_pagetable
>
>Regards,
>Atsushi Kumagai
I rebased that and updated the devel branch:
https://sourceforge.net/p/makedumpfile/code/ci/97e156b493c46fabfc4b136ab834a6495166ac66/
I'll merge it into v1.6.3 if you have no comment.
Thanks,
Atsushi Kumagai
>>Signed-off-by: Jeff Mahoney <jeffm at suse.com>
>>---
>> arch/x86_64.c | 24 +++++++++++++++++++++---
>> makedumpfile.c | 6 ++++++
>> makedumpfile.h | 2 ++
>> 3 files changed, 29 insertions(+), 3 deletions(-)
>>
>>diff --git a/arch/x86_64.c b/arch/x86_64.c
>>index 08dd6b2..9b09035 100644
>>--- a/arch/x86_64.c
>>+++ b/arch/x86_64.c
>>@@ -259,16 +259,26 @@ vtop4_x86_64(unsigned long vaddr)
>> {
>> unsigned long page_dir, pml4, pgd_paddr, pgd_pte, pmd_paddr, pmd_pte;
>> unsigned long pte_paddr, pte;
>>+ unsigned long init_level4_pgt;
>>
>>- if (SYMBOL(init_level4_pgt) == NOT_FOUND_SYMBOL) {
>>+ if (SYMBOL(init_level4_pgt) != NOT_FOUND_SYMBOL)
>>+ init_level4_pgt = SYMBOL(init_level4_pgt);
>>+ else if (SYMBOL(init_top_pgt) != NOT_FOUND_SYMBOL)
>>+ init_level4_pgt = SYMBOL(init_top_pgt);
>>+ else {
>> ERRMSG("Can't get the symbol of init_level4_pgt.\n");
>> return NOT_PADDR;
>> }
>>
>>+ if (SYMBOL(level4_kernel_pgt) != NOT_FOUND_SYMBOL) {
>>+ ERRMSG("Kernel is built with 5-level page tables\n");
>>+ return NOT_PADDR;
>>+ }
>>+
>> /*
>> * Get PGD.
>> */
>>- page_dir = SYMBOL(init_level4_pgt) - __START_KERNEL_map + info->phys_base;
>>+ page_dir = init_level4_pgt - __START_KERNEL_map + info->phys_base;
>> if (is_xen_memory()) {
>> page_dir = ptom_xen(page_dir);
>> if (page_dir == NOT_PADDR)
>>@@ -549,8 +559,16 @@ find_vmemmap_x86_64()
>> struct vmap_pfns *vmapp, *vmaphead = NULL, *cur, *tail;
>>
>> init_level4_pgt = SYMBOL(init_level4_pgt);
>>+ if (init_level4_pgt == NOT_FOUND_SYMBOL)
>>+ init_level4_pgt = SYMBOL(init_top_pgt);
>>+
>> if (init_level4_pgt == NOT_FOUND_SYMBOL) {
>>- ERRMSG("init_level4_pgt not found\n");
>>+ ERRMSG("init_level4_pgt/init_top_pgt not found\n");
>>+ return FAILED;
>>+ }
>>+
>>+ if (SYMBOL(level4_kernel_pgt) != NOT_FOUND_SYMBOL) {
>>+ ERRMSG("kernel is configured for 5-level page tables\n");
>> return FAILED;
>> }
>> pagestructsize = size_table.page;
>>diff --git a/makedumpfile.c b/makedumpfile.c
>>index f85003a..6e5ec34 100644
>>--- a/makedumpfile.c
>>+++ b/makedumpfile.c
>>@@ -1486,6 +1486,8 @@ get_symbol_info(void)
>> SYMBOL_INIT(_stext, "_stext");
>> SYMBOL_INIT(swapper_pg_dir, "swapper_pg_dir");
>> SYMBOL_INIT(init_level4_pgt, "init_level4_pgt");
>>+ SYMBOL_INIT(level4_kernel_pgt, "level4_kernel_pgt");
>>+ SYMBOL_INIT(init_top_pgt, "init_top_pgt");
>> SYMBOL_INIT(vmlist, "vmlist");
>> SYMBOL_INIT(vmap_area_list, "vmap_area_list");
>> SYMBOL_INIT(node_online_map, "node_online_map");
>>@@ -2105,6 +2107,8 @@ write_vmcoreinfo_data(void)
>> WRITE_SYMBOL("_stext", _stext);
>> WRITE_SYMBOL("swapper_pg_dir", swapper_pg_dir);
>> WRITE_SYMBOL("init_level4_pgt", init_level4_pgt);
>>+ WRITE_SYMBOL("level4_kernel_pgt", level4_kernel_pgt);
>>+ WRITE_SYMBOL("init_top_pgt", init_top_pgt);
>> WRITE_SYMBOL("vmlist", vmlist);
>> WRITE_SYMBOL("vmap_area_list", vmap_area_list);
>> WRITE_SYMBOL("node_online_map", node_online_map);
>>@@ -2500,6 +2504,8 @@ read_vmcoreinfo(void)
>> READ_SYMBOL("_stext", _stext);
>> READ_SYMBOL("swapper_pg_dir", swapper_pg_dir);
>> READ_SYMBOL("init_level4_pgt", init_level4_pgt);
>>+ READ_SYMBOL("level4_kernel_pgt", level4_kernel_pgt);
>>+ READ_SYMBOL("init_top_pgt", init_top_pgt);
>> READ_SYMBOL("vmlist", vmlist);
>> READ_SYMBOL("vmap_area_list", vmap_area_list);
>> READ_SYMBOL("node_online_map", node_online_map);
>>diff --git a/makedumpfile.h b/makedumpfile.h
>>index 8a05794..9357e47 100644
>>--- a/makedumpfile.h
>>+++ b/makedumpfile.h
>>@@ -1517,6 +1517,8 @@ struct symbol_table {
>> unsigned long long _stext;
>> unsigned long long swapper_pg_dir;
>> unsigned long long init_level4_pgt;
>>+ unsigned long long level4_kernel_pgt;
>>+ unsigned long long init_top_pgt;
>> unsigned long long vmlist;
>> unsigned long long vmap_area_list;
>> unsigned long long phys_base;
>>
>>
>>--
>>Jeff Mahoney
>>SUSE Labs
>
>
>
>_______________________________________________
>kexec mailing list
>kexec at lists.infradead.org
>http://lists.infradead.org/mailman/listinfo/kexec
More information about the kexec
mailing list