From: Qiao Nuohan <[email protected]>

read_pfn_parallel is used to enable reading pages from vmcore parallely.
Current supported format is kdump-compressed and elf, mmap elf format
is also supported.

Signed-off-by: Qiao Nuohan <[email protected]>
---
 Makefile       |    2 ++
 makedumpfile.c |   34 ++++++++++++++++++++++++++++++++++
 2 files changed, 36 insertions(+), 0 deletions(-)

diff --git a/Makefile b/Makefile
index 2d2b1b7..0b10312 100644
--- a/Makefile
+++ b/Makefile
@@ -66,6 +66,8 @@ LIBS := -lsnappy $(LIBS)
 CFLAGS += -DUSESNAPPY
 endif
 
+LIBS := -lpthread $(LIBS)
+
 all: makedumpfile
 
 $(OBJ_PART): $(SRC_PART)
diff --git a/makedumpfile.c b/makedumpfile.c
index 9f12865..8a69321 100644
--- a/makedumpfile.c
+++ b/makedumpfile.c
@@ -6667,6 +6667,40 @@ read_pfn(mdf_pfn_t pfn, unsigned char *buf)
 }
 
 int
+read_pfn_parallel(int fd_memory, mdf_pfn_t pfn, unsigned char *buf,
+                 struct dump_bitmap* bitmap_memory_parallel,
+                 struct mmap_cache *mmap_cache)
+{
+       unsigned long long paddr;
+       unsigned long long pgaddr;
+
+       paddr = pfn_to_paddr(pfn);
+
+       pgaddr = PAGEBASE(paddr);
+
+       if (info->flag_refiltering) {
+               if (!readpage_kdump_compressed_parallel(fd_memory, pgaddr, buf,
+                                                     bitmap_memory_parallel)) {
+                       ERRMSG("Can't get the page data.\n");
+                       return FALSE;
+               }
+       } else {
+               char *mapbuf = mappage_elf_parallel(fd_memory, pgaddr,
+                                                   mmap_cache);
+               if (mapbuf) {
+                       memcpy(buf, mapbuf, info->page_size);
+               } else {
+                       if (!readpage_elf_parallel(fd_memory, pgaddr, buf)) {
+                               ERRMSG("Can't get the page data.\n");
+                               return FALSE;
+                       }
+               }
+       }
+
+       return TRUE;
+}
+
+int
 get_loads_dumpfile_cyclic(void)
 {
        int i, phnum, num_new_load = 0;
-- 
1.7.1


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

Reply via email to