Hello HATAYAMA-san, On Mon, 04 Jun 2012 13:42:12 +0900 (JST) HATAYAMA Daisuke <d.hatayama at jp.fujitsu.com> wrote: > From: Atsushi Kumagai <kumagai-atsushi at mxc.nes.nec.co.jp> > Subject: [RFC PATCH 4/4] makedumpfile: Add main routine of cyclic processing. > Date: Thu, 31 May 2012 13:56:54 +0900 > > > + /* > > + * Write pages and bitmap cyclically. > > + */ > > + for (info->split_start_pfn = 0, info->split_end_pfn = PFN_CYCLIC; > > + info->split_end_pfn <= info->max_mapnr; > > + info->split_start_pfn += PFN_CYCLIC, info->split_end_pfn += PFN_CYCLIC) { > > The cyclic processing is orthogonal to the splitting feature. The > feature of splitting a single vmcore into multiple dumpfiles is an > important feature on large system to reduce dump generation time. They > should exist together. As you pointed out, prototype can't be specified --split and -K at the same time. I will improve the issue in next prototype version if possible. At least, it is needed to change the variable names to clarify their purpose as follows. Thanks Atsushi Kumagai diff --git a/makedumpfile.c b/makedumpfile.c index a211a89..0154851 100644 --- a/makedumpfile.c +++ b/makedumpfile.c @@ -2797,14 +2797,14 @@ set_bitmap_cyclic(char *bitmap, unsigned long long pfn, int val) { int byte, bit; - if (pfn < info->split_start_pfn || info->split_end_pfn < pfn) + if (pfn < info->cyclic_start_pfn || info->cyclic_end_pfn < pfn) return FALSE; /* * If val is 0, clear bit on the bitmap. */ - byte = (pfn - info->split_start_pfn)>>3; - bit = (pfn - info->split_start_pfn) & 7; + byte = (pfn - info->cyclic_start_pfn)>>3; + bit = (pfn - info->cyclic_start_pfn) & 7; if (val) bitmap[byte] |= 1<<bit; else @@ -3659,7 +3659,7 @@ create_1st_bitmap_cyclic() */ pfn_bitmap1 = 0; - for (pfn = info->split_start_pfn; pfn < info->split_end_pfn; pfn++) { + for (pfn = info->cyclic_start_pfn; pfn < info->cyclic_end_pfn; pfn++) { if (is_in_segs(pfn_to_paddr(pfn))) { set_bit_on_1st_bitmap(pfn); pfn_bitmap1++; @@ -3871,7 +3871,7 @@ exclude_unnecessary_pages_cyclic(void) if (mmd->mem_map == NOT_MEMMAP_ADDR) continue; - if (mmd->pfn_end >= info->split_start_pfn || mmd->pfn_start <= info->split_end_pfn) { + if (mmd->pfn_end >= info->cyclic_start_pfn || mmd->pfn_start <= info->cyclic_end_pfn) { if (!__exclude_unnecessary_pages(mmd->mem_map, mmd->pfn_start, mmd->pfn_end)) return FALSE; @@ -4554,7 +4554,7 @@ get_num_dumpable_cyclic(void) if (!exclude_unnecessary_pages_cyclic()) return FALSE; - for (pfn = info->split_start_pfn, num_dumpable = 0; pfn < info->split_end_pfn; pfn++) { + for (pfn = info->cyclic_start_pfn, num_dumpable = 0; pfn < info->cyclic_end_pfn; pfn++) { if (is_dumpable_cyclic(info->partial_bitmap2, pfn)) { num_dumpable++; } @@ -5105,8 +5105,8 @@ write_kdump_pages_cyclic(struct cache_data *cd_header, struct cache_data *cd_pag gettimeofday(&tv_start, NULL); - start_pfn = info->split_start_pfn; - end_pfn = info->split_end_pfn; + start_pfn = info->cyclic_start_pfn; + end_pfn = info->cyclic_end_pfn; for (pfn = start_pfn; pfn < end_pfn; pfn++) { @@ -5507,9 +5507,9 @@ write_kdump_pages_and_bitmap_cyclic(struct cache_data *cd_header, struct cache_d * Get number of dumpable pages. */ d_exclude_start = getdtime(); - for (info->split_start_pfn = 0, info->split_end_pfn = PFN_CYCLIC; - info->split_end_pfn <= info->max_mapnr; - info->split_start_pfn += PFN_CYCLIC, info->split_end_pfn += PFN_CYCLIC) { + for (info->cyclic_start_pfn = 0, info->cyclic_end_pfn = PFN_CYCLIC; + info->cyclic_end_pfn <= info->max_mapnr; + info->cyclic_start_pfn += PFN_CYCLIC, info->cyclic_end_pfn += PFN_CYCLIC) { info->num_dumpable += get_num_dumpable_cyclic(); } @@ -5545,9 +5545,9 @@ write_kdump_pages_and_bitmap_cyclic(struct cache_data *cd_header, struct cache_d /* * Write pages and bitmap cyclically. */ - for (info->split_start_pfn = 0, info->split_end_pfn = PFN_CYCLIC; - info->split_end_pfn <= info->max_mapnr; - info->split_start_pfn += PFN_CYCLIC, info->split_end_pfn += PFN_CYCLIC) { + for (info->cyclic_start_pfn = 0, info->cyclic_end_pfn = PFN_CYCLIC; + info->cyclic_end_pfn <= info->max_mapnr; + info->cyclic_start_pfn += PFN_CYCLIC, info->cyclic_end_pfn += PFN_CYCLIC) { d_exclude_start = getdtime(); if (!create_1st_bitmap_cyclic()) diff --git a/makedumpfile.h b/makedumpfile.h index ca9b100..79a8e41 100644 --- a/makedumpfile.h +++ b/makedumpfile.h @@ -936,6 +936,8 @@ struct DumpInfo { /* * for cyclic */ + unsigned long long cyclic_start_pfn; + unsigned long long cyclic_end_pfn; char *partial_bitmap1; char *partial_bitmap2; unsigned long long num_dumpable; @@ -1412,10 +1414,10 @@ is_dumpable(struct dump_bitmap *bitmap, unsigned long long pfn) static inline int is_dumpable_cyclic(char *bitmap, unsigned long long pfn) { - if (pfn < info->split_start_pfn || info->split_end_pfn < pfn) + if (pfn < info->cyclic_start_pfn || info->cyclic_end_pfn < pfn) return FALSE; else - return is_on(bitmap, pfn - info->split_start_pfn); + return is_on(bitmap, pfn - info->cyclic_start_pfn); } static inline int