Signed-off-by: Pratyush Anand <[email protected]>
---
 arch/x86_64.c  | 10 ++++++++--
 makedumpfile.h |  4 ++--
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/arch/x86_64.c b/arch/x86_64.c
index ddf7be6bc57b..3a53b4fa03ed 100644
--- a/arch/x86_64.c
+++ b/arch/x86_64.c
@@ -187,6 +187,12 @@ 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 phys_base;
+
+       if (SYMBOL(phys_base) != NOT_FOUND_SYMBOL)
+               phys_base = info->phys_base;
+       else
+               phys_base = 0;
 
        if (SYMBOL(init_level4_pgt) == NOT_FOUND_SYMBOL) {
                ERRMSG("Can't get the symbol of init_level4_pgt.\n");
@@ -196,9 +202,9 @@ vtop4_x86_64(unsigned long vaddr)
        /*
         * Get PGD.
         */
-       page_dir  = SYMBOL(init_level4_pgt);
+       page_dir = SYMBOL(init_level4_pgt) - __START_KERNEL_map + phys_base;
        page_dir += pml4_index(vaddr) * sizeof(unsigned long);
-       if (!readmem(VADDR, page_dir, &pml4, sizeof pml4)) {
+       if (!readmem(PADDR, page_dir, &pml4, sizeof pml4)) {
                ERRMSG("Can't get pml4 (page_dir:%lx).\n", page_dir);
                return NOT_PADDR;
        }
diff --git a/makedumpfile.h b/makedumpfile.h
index f0154226bcb8..f64652e34901 100644
--- a/makedumpfile.h
+++ b/makedumpfile.h
@@ -876,12 +876,12 @@ int is_vmalloc_addr_x86_64(ulong vaddr);
 int get_phys_base_x86_64(void);
 int get_machdep_info_x86_64(void);
 int get_versiondep_info_x86_64(void);
-unsigned long long vaddr_to_paddr_x86_64(unsigned long vaddr);
+unsigned long long vtop4_x86_64(unsigned long vaddr);
 #define find_vmemmap()         find_vmemmap_x86_64()
 #define get_phys_base()                get_phys_base_x86_64()
 #define get_machdep_info()     get_machdep_info_x86_64()
 #define get_versiondep_info()  get_versiondep_info_x86_64()
-#define vaddr_to_paddr(X)      vaddr_to_paddr_x86_64(X)
+#define vaddr_to_paddr(X)      vtop4_x86_64(X)
 #define is_phys_addr(X)                (!is_vmalloc_addr_x86_64(X))
 #endif /* x86_64 */
 
-- 
2.7.4


_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to