[Patch v2] get MODULES_VADDR by KERNEL_IMAGE_SIZE for x86_64
Atsushi Kumagai
kumagai-atsushi at mxc.nes.nec.co.jp
Mon Oct 20 00:17:55 PDT 2014
>On 09/24/14 at 07:55am, Atsushi Kumagai wrote:
>> >diff --git a/makedumpfile.c b/makedumpfile.c
>> >index b4d43d8..65c893f 100644
>> >--- a/makedumpfile.c
>> >+++ b/makedumpfile.c
>> >@@ -1564,6 +1564,14 @@ get_value_for_old_linux(void)
>> > NUMBER(PAGE_BUDDY_MAPCOUNT_VALUE) =
>> > PAGE_BUDDY_MAPCOUNT_VALUE_v2_6_39_to_latest_version;
>> > }
>> >+#ifdef __x86_64__
>> >+ if (NUMBER(KERNEL_IMAGE_SIZE) == NOT_FOUND_NUMBER) {
>> >+ if (info->kernel_version < KERNEL_VERSION(2, 6, 26))
>> >+ NUMBER(KERNEL_IMAGE_SIZE) = KERNEL_IMAGE_SIZE_ORIG;
>> >+ else
>> >+ NUMBER(KERNEL_IMAGE_SIZE) = KERNEL_IMAGE_SIZE_2_6_26;
>> >+ }
>> >+#endif
I noticed that this fix is incomplete because get_value_for_old_linux() is
too late as shown below:
initial()
+ read_vmcoreinfo_from_vmcore() // get KERNEL_IMAGE_SIZE from VMCOREINFO (only for new kernels)
+ get_mem_map() // refer KERNEL_IMAGE_SIZE via is_vmalloc_addr_x86_64()
+ get_value_for_old_linux() // initialize KERNEL_IMAGE_SIZE for old kernels
So I'll fix this issue with the patch below.
Thanks,
Atsushi Kumagai
From: Atsushi Kumagai <kumagai-atsushi at mxc.nes.nec.co.jp>
Date: Mon, 20 Oct 2014 16:04:57 +0900
Subject: [PATCH] Initialize symbols early for old kernels.
It's best to invoke get_value_for_old_linux() immediately after
reading VMCOREINFO since some functions require the symbols which
are initialized in it.
This change is safe because get_value_for_old_linux() doesn't
overwrite any values.
Signed-off-by: Atsushi Kumagai <kumagai-atsushi at mxc.nes.nec.co.jp>
---
makedumpfile.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/makedumpfile.c b/makedumpfile.c
index 53c3585..b27ea1e 100644
--- a/makedumpfile.c
+++ b/makedumpfile.c
@@ -3203,6 +3203,9 @@ initial(void)
debug_info = TRUE;
}
+ if (!get_value_for_old_linux())
+ return FALSE;
+
out:
if (!info->page_size) {
/*
@@ -3306,9 +3309,6 @@ out:
return FALSE;
}
- if (!get_value_for_old_linux())
- return FALSE;
-
/* use buddy identification of free pages whether cyclic or not */
/* (this can reduce pages scan of 1TB memory from 60sec to 30sec) */
if (info->dump_level & DL_EXCLUDE_FREE)
--
1.9.0
More information about the kexec
mailing list