From: Qiao Nuohan <qiaonuohan@xxxxxxxxxxxxxx> 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 <qiaonuohan at cn.fujitsu.com> --- Makefile | 2 ++ makedumpfile.c | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 0 deletions(-) diff --git a/Makefile b/Makefile index fc21a3f..b1daf5b 100644 --- a/Makefile +++ b/Makefile @@ -67,6 +67,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 44c78b4..e15855b 100644 --- a/makedumpfile.c +++ b/makedumpfile.c @@ -6349,6 +6349,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