Hello Pratyush,

>Call cach_init() before get_kcore_dump_loads(), because latter uses
>cache_search().
>
>Call path is like this :
>get_kcore_dump_loads() -> process_dump_load() -> vaddr_to_paddr() ->
>vtop4_x86_64() -> readmem() -> cache_search()

I found that the current cach_init() is too early, cache_init() should be
called after fallback_to_current_page_size() for older kernel
which doesn't have VMCOREINFO.
Could you confirm that the patch below is fine with you ?

Thanks,
Atsushi Kumagai

From: Atsushi Kumagai <[email protected]>
Date: Wed, 19 Jul 2017 15:05:58 +0900
Subject: [PATCH] Fix the regression caused by moving cache_init() earlier

info->page_size should be set before calling cache_init() since it
allocates some buffers based on info->page_size. However, cache_init()
was moved before fallback_to_current_page_size() while it set
info->page_size for older kernel which doesn't have VMCOREINFO.

This patch moves cache_init() after fallback_to_current_page_size()
and reverts the commit: b98e6e0d2a(sadump: set info->page_size before 
cache_init())

Signed-off-by: Atsushi Kumagai <[email protected]>
---
 makedumpfile.c | 28 ++++++++++++++++------------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/makedumpfile.c b/makedumpfile.c
index a3f0697..f85003a 100644
--- a/makedumpfile.c
+++ b/makedumpfile.c
@@ -3905,15 +3905,6 @@ initial(void)
        if (!get_value_for_old_linux())
                return FALSE;
 
-       if (info->flag_sadump && !set_page_size(sadump_page_size()))
-                       return FALSE;
-
-       if (!is_xen_memory() && !cache_init())
-               return FALSE;
-
-       if (info->flag_mem_usage && !get_kcore_dump_loads())
-               return FALSE;
-
        if (info->flag_refiltering) {
                if (info->flag_elf_dumpfile) {
                        MSG("'-E' option is disable, ");
@@ -3936,6 +3927,9 @@ initial(void)
                        return FALSE;
                }
 
+               if (!set_page_size(sadump_page_size()))
+                       return FALSE;
+
                if (!sadump_initialize_bitmap_memory())
                        return FALSE;
 
@@ -3949,9 +3943,7 @@ initial(void)
                 * postponed until debug information becomes
                 * available.
                 */
-
-       } else if (!get_phys_base())
-               return FALSE;
+       }
 
 out:
        if (!info->page_size) {
@@ -3962,6 +3954,18 @@ out:
                if (!fallback_to_current_page_size())
                        return FALSE;
        }
+
+       if (!is_xen_memory() && !cache_init())
+               return FALSE;
+
+       if (info->flag_mem_usage && !get_kcore_dump_loads())
+               return FALSE;
+
+       if (!info->flag_refiltering && !info->flag_sadump) {
+               if (!get_phys_base())
+                       return FALSE;
+       }
+
        if (!get_max_mapnr())
                return FALSE;
 
-- 
2.7.2


>Signed-off-by: Pratyush Anand <[email protected]>
>---
> makedumpfile.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
>diff --git a/makedumpfile.c b/makedumpfile.c
>index 6942047199de..3b8e9810468d 100644
>--- a/makedumpfile.c
>+++ b/makedumpfile.c
>@@ -3878,6 +3878,9 @@ initial(void)
>       if (!get_value_for_old_linux())
>               return FALSE;
>
>+      if (!is_xen_memory() && !cache_init())
>+              return FALSE;
>+
>       if (info->flag_mem_usage && !get_kcore_dump_loads())
>               return FALSE;
>
>@@ -4000,9 +4003,6 @@ out:
>               }
>       }
>
>-      if (!is_xen_memory() && !cache_init())
>-              return FALSE;
>-
>       if (debug_info && !get_machdep_info())
>               return FALSE;
>
>--
>2.9.3
>



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

Reply via email to