Hi Atsushi,

On Wednesday 19 July 2017 01:16 PM, Atsushi Kumagai wrote:
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 ?

Its fine and works.


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;



--
Regards
Pratyush

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

Reply via email to