diff --git a/kexec-tools-2.0.4-makedumpfile-Introduce-the-mdf_pfn_t-type.patch b/kexec-tools-2.0.4-makedumpfile-Introduce-the-mdf_pfn_t-type.patch new file mode 100644 index 0000000..14fad22 --- /dev/null +++ b/kexec-tools-2.0.4-makedumpfile-Introduce-the-mdf_pfn_t-type.patch @@ -0,0 +1,738 @@ +From 9dc6440c63320066bc6344c6e3ca3c3af88bcc42 Mon Sep 17 00:00:00 2001 +From: Petr Tesarik +Date: Thu, 24 Apr 2014 10:58:43 +0900 +Subject: [PATCH] [PATCH v3] Introduce the mdf_pfn_t type. + +Replace unsigned long long with mdf_pfn_t where: + + a. the variable denotes a PFN + b. the variable is a number of pages + +The number of pages is converted to a mdf_pfn_t, because it is a result +of subtracting two PFNs or incremented in a loop over a range of PFNs, +so it can get as large as a PFN. + +Note: The mdf_ (i.e. makedumpfile) prefix is used to prevent possible +conflicts with other software that defines a pfn_t type. + +Signed-off-by: Petr Tesarik +Signed-off-by: Baoquan He +--- + makedumpfile.c | 152 ++++++++++++++++++++++++++++++--------------------------- + makedumpfile.h | 48 +++++++++--------- + sadump_info.c | 15 +++--- + sadump_info.h | 4 +- + 4 files changed, 115 insertions(+), 104 deletions(-) + +diff --git a/makedumpfile.c b/makedumpfile.c +index ce4a866..0b31932 100644 +--- a/makedumpfile-1.5.6/makedumpfile.c ++++ b/makedumpfile-1.5.6/makedumpfile.c +@@ -37,7 +37,7 @@ struct DumpInfo *info = NULL; + + char filename_stdout[] = FILENAME_STDOUT; + +-static void first_cycle(unsigned long long start, unsigned long long max, struct cycle *cycle) ++static void first_cycle(mdf_pfn_t start, mdf_pfn_t max, struct cycle *cycle) + { + cycle->start_pfn = round(start, info->pfn_cyclic); + cycle->end_pfn = cycle->start_pfn + info->pfn_cyclic; +@@ -46,7 +46,7 @@ static void first_cycle(unsigned long long start, unsigned long long max, struct + cycle->end_pfn = max; + } + +-static void update_cycle(unsigned long long max, struct cycle *cycle) ++static void update_cycle(mdf_pfn_t max, struct cycle *cycle) + { + cycle->start_pfn= cycle->end_pfn; + cycle->end_pfn= cycle->start_pfn + info->pfn_cyclic; +@@ -55,7 +55,7 @@ static void update_cycle(unsigned long long max, struct cycle *cycle) + cycle->end_pfn = max; + } + +-static int end_cycle(unsigned long long max, struct cycle *cycle) ++static int end_cycle(mdf_pfn_t max, struct cycle *cycle) + { + return (cycle->start_pfn >= max)?TRUE:FALSE; + } +@@ -67,15 +67,15 @@ static int end_cycle(unsigned long long max, struct cycle *cycle) + /* + * The numbers of the excluded pages + */ +-unsigned long long pfn_zero; +-unsigned long long pfn_memhole; +-unsigned long long pfn_cache; +-unsigned long long pfn_cache_private; +-unsigned long long pfn_user; +-unsigned long long pfn_free; +-unsigned long long pfn_hwpoison; ++mdf_pfn_t pfn_zero; ++mdf_pfn_t pfn_memhole; ++mdf_pfn_t pfn_cache; ++mdf_pfn_t pfn_cache_private; ++mdf_pfn_t pfn_user; ++mdf_pfn_t pfn_free; ++mdf_pfn_t pfn_hwpoison; + +-unsigned long long num_dumped; ++mdf_pfn_t num_dumped; + + int retcd = FAILED; /* return code */ + +@@ -122,7 +122,9 @@ unsigned long long + ptom_xen(unsigned long long paddr) + { + unsigned long mfn; +- unsigned long long maddr, pfn, mfn_idx, frame_idx; ++ unsigned long long maddr; ++ mdf_pfn_t pfn; ++ unsigned long long mfn_idx, frame_idx; + + pfn = paddr_to_pfn(paddr); + mfn_idx = pfn / MFNS_PER_FRAME; +@@ -226,12 +228,13 @@ is_in_same_page(unsigned long vaddr1, unsigned long vaddr2) + } + + #define BITMAP_SECT_LEN 4096 +-static inline int is_dumpable(struct dump_bitmap *, unsigned long long); +-static inline int is_dumpable_cyclic(char *bitmap, unsigned long long, struct cycle *cycle); ++static inline int is_dumpable(struct dump_bitmap *, mdf_pfn_t); ++static inline int is_dumpable_cyclic(char *bitmap, mdf_pfn_t, struct cycle *cycle); + unsigned long +-pfn_to_pos(unsigned long long pfn) ++pfn_to_pos(mdf_pfn_t pfn) + { +- unsigned long desc_pos, i; ++ unsigned long desc_pos; ++ mdf_pfn_t i; + + desc_pos = info->valid_pages[pfn / BITMAP_SECT_LEN]; + for (i = round(pfn, BITMAP_SECT_LEN); i < pfn; i++) +@@ -246,7 +249,7 @@ read_page_desc(unsigned long long paddr, page_desc_t *pd) + { + struct disk_dump_header *dh; + unsigned long desc_pos; +- unsigned long long pfn; ++ mdf_pfn_t pfn; + off_t offset; + + /* +@@ -2375,8 +2378,8 @@ pgdat4: + } + + void +-dump_mem_map(unsigned long long pfn_start, +- unsigned long long pfn_end, unsigned long mem_map, int num_mm) ++dump_mem_map(mdf_pfn_t pfn_start, mdf_pfn_t pfn_end, ++ unsigned long mem_map, int num_mm) + { + struct mem_map_data *mmd; + +@@ -2802,7 +2805,7 @@ int + get_mm_sparsemem(void) + { + unsigned int section_nr, mem_section_size, num_section; +- unsigned long long pfn_start, pfn_end; ++ mdf_pfn_t pfn_start, pfn_end; + unsigned long section, mem_map; + unsigned long *mem_sec = NULL; + +@@ -2886,7 +2889,7 @@ get_mem_map_without_mm(void) + int + get_mem_map(void) + { +- unsigned long long max_pfn = 0; ++ mdf_pfn_t max_pfn = 0; + unsigned int i; + int ret; + +@@ -2944,7 +2947,7 @@ initialize_bitmap_memory(void) + struct dump_bitmap *bmp; + off_t bitmap_offset; + off_t bitmap_len, max_sect_len; +- unsigned long pfn; ++ mdf_pfn_t pfn; + int i, j; + long block_size; + +@@ -3309,8 +3312,7 @@ initialize_2nd_bitmap(struct dump_bitmap *bitmap) + } + + int +-set_bitmap(struct dump_bitmap *bitmap, unsigned long long pfn, +- int val) ++set_bitmap(struct dump_bitmap *bitmap, mdf_pfn_t pfn, int val) + { + int byte, bit; + off_t old_offset, new_offset; +@@ -3358,7 +3360,7 @@ set_bitmap(struct dump_bitmap *bitmap, unsigned long long pfn, + } + + int +-set_bitmap_cyclic(char *bitmap, unsigned long long pfn, int val, struct cycle *cycle) ++set_bitmap_cyclic(char *bitmap, mdf_pfn_t pfn, int val, struct cycle *cycle) + { + int byte, bit; + static int warning = 0; +@@ -3425,7 +3427,7 @@ sync_2nd_bitmap(void) + } + + int +-set_bit_on_1st_bitmap(unsigned long long pfn, struct cycle *cycle) ++set_bit_on_1st_bitmap(mdf_pfn_t pfn, struct cycle *cycle) + { + if (info->flag_cyclic) { + return set_bitmap_cyclic(info->partial_bitmap1, pfn, 1, cycle); +@@ -3435,7 +3437,7 @@ set_bit_on_1st_bitmap(unsigned long long pfn, struct cycle *cycle) + } + + int +-clear_bit_on_1st_bitmap(unsigned long long pfn, struct cycle *cycle) ++clear_bit_on_1st_bitmap(mdf_pfn_t pfn, struct cycle *cycle) + { + if (info->flag_cyclic) { + return set_bitmap_cyclic(info->partial_bitmap1, pfn, 0, cycle); +@@ -3445,7 +3447,7 @@ clear_bit_on_1st_bitmap(unsigned long long pfn, struct cycle *cycle) + } + + int +-clear_bit_on_2nd_bitmap(unsigned long long pfn, struct cycle *cycle) ++clear_bit_on_2nd_bitmap(mdf_pfn_t pfn, struct cycle *cycle) + { + if (info->flag_cyclic) { + return set_bitmap_cyclic(info->partial_bitmap2, pfn, 0, cycle); +@@ -3455,7 +3457,7 @@ clear_bit_on_2nd_bitmap(unsigned long long pfn, struct cycle *cycle) + } + + int +-clear_bit_on_2nd_bitmap_for_kernel(unsigned long long pfn, struct cycle *cycle) ++clear_bit_on_2nd_bitmap_for_kernel(mdf_pfn_t pfn, struct cycle *cycle) + { + unsigned long long maddr; + +@@ -3472,7 +3474,7 @@ clear_bit_on_2nd_bitmap_for_kernel(unsigned long long pfn, struct cycle *cycle) + } + + int +-set_bit_on_2nd_bitmap(unsigned long long pfn, struct cycle *cycle) ++set_bit_on_2nd_bitmap(mdf_pfn_t pfn, struct cycle *cycle) + { + if (info->flag_cyclic) { + return set_bitmap_cyclic(info->partial_bitmap2, pfn, 1, cycle); +@@ -3482,7 +3484,7 @@ set_bit_on_2nd_bitmap(unsigned long long pfn, struct cycle *cycle) + } + + int +-set_bit_on_2nd_bitmap_for_kernel(unsigned long long pfn, struct cycle *cycle) ++set_bit_on_2nd_bitmap_for_kernel(mdf_pfn_t pfn, struct cycle *cycle) + { + unsigned long long maddr; + +@@ -3793,11 +3795,11 @@ rearrange_dumpdata(void) + return TRUE; + } + +-unsigned long long ++mdf_pfn_t + page_to_pfn(unsigned long page) + { + unsigned int num; +- unsigned long long pfn = ULONGLONG_MAX; ++ mdf_pfn_t pfn = ULONGLONG_MAX; + unsigned long long index = 0; + struct mem_map_data *mmd; + +@@ -3827,7 +3829,7 @@ reset_bitmap_of_free_pages(unsigned long node_zones, struct cycle *cycle) + int order, i, migrate_type, migrate_types; + unsigned long curr, previous, head, curr_page, curr_prev; + unsigned long addr_free_pages, free_pages = 0, found_free_pages = 0; +- unsigned long long pfn, start_pfn; ++ mdf_pfn_t pfn, start_pfn; + + /* + * On linux-2.6.24 or later, free_list is divided into the array. +@@ -4430,7 +4432,7 @@ create_1st_bitmap(void) + int i; + unsigned int num_pt_loads = get_num_pt_loads(); + char buf[info->page_size]; +- unsigned long long pfn, pfn_start, pfn_end, pfn_bitmap1; ++ mdf_pfn_t pfn, pfn_start, pfn_end, pfn_bitmap1; + unsigned long long phys_start, phys_end; + struct timeval tv_start; + off_t offset_page; +@@ -4502,10 +4504,10 @@ int + create_1st_bitmap_cyclic(struct cycle *cycle) + { + int i; +- unsigned long long pfn, pfn_bitmap1; ++ mdf_pfn_t pfn, pfn_bitmap1; + unsigned long long phys_start, phys_end; +- unsigned long long pfn_start, pfn_end; +- unsigned long long pfn_start_roundup, pfn_end_round; ++ mdf_pfn_t pfn_start, pfn_end; ++ mdf_pfn_t pfn_start_roundup, pfn_end_round; + unsigned long pfn_start_byte, pfn_end_byte; + + /* +@@ -4563,7 +4565,8 @@ create_1st_bitmap_cyclic(struct cycle *cycle) + int + exclude_zero_pages(void) + { +- unsigned long long pfn, paddr; ++ mdf_pfn_t pfn; ++ unsigned long long paddr; + struct dump_bitmap bitmap2; + struct timeval tv_start; + unsigned char buf[info->page_size]; +@@ -4615,10 +4618,10 @@ static int + initialize_2nd_bitmap_cyclic(struct cycle *cycle) + { + int i; +- unsigned long long pfn; ++ mdf_pfn_t pfn; + unsigned long long phys_start, phys_end; +- unsigned long long pfn_start, pfn_end; +- unsigned long long pfn_start_roundup, pfn_end_round; ++ mdf_pfn_t pfn_start, pfn_end; ++ mdf_pfn_t pfn_start_roundup, pfn_end_round; + unsigned long pfn_start_byte, pfn_end_byte; + + /* +@@ -4666,10 +4669,12 @@ initialize_2nd_bitmap_cyclic(struct cycle *cycle) + + int + __exclude_unnecessary_pages(unsigned long mem_map, +- unsigned long long pfn_start, unsigned long long pfn_end, struct cycle *cycle) ++ mdf_pfn_t pfn_start, mdf_pfn_t pfn_end, struct cycle *cycle) + { +- unsigned long long pfn, pfn_mm, maddr; +- unsigned long long pfn_read_start, pfn_read_end, index_pg; ++ mdf_pfn_t pfn; ++ unsigned long index_pg, pfn_mm; ++ unsigned long long maddr; ++ mdf_pfn_t pfn_read_start, pfn_read_end; + unsigned char page_cache[SIZE(page) * PGMM_CACHED]; + unsigned char *pcache; + unsigned int _count, _mapcount = 0; +@@ -5169,7 +5174,7 @@ get_loads_dumpfile(void) + { + int i, phnum, num_new_load = 0; + long page_size = info->page_size; +- unsigned long long pfn, pfn_start, pfn_end, num_excluded; ++ mdf_pfn_t pfn, pfn_start, pfn_end, num_excluded; + unsigned long frac_head, frac_tail; + Elf64_Phdr load; + struct dump_bitmap bitmap2; +@@ -5619,10 +5624,10 @@ out: + return ret; + } + +-unsigned long long ++mdf_pfn_t + get_num_dumpable(void) + { +- unsigned long long pfn, num_dumpable; ++ mdf_pfn_t pfn, num_dumpable; + struct dump_bitmap bitmap2; + + initialize_2nd_bitmap(&bitmap2); +@@ -5634,10 +5639,10 @@ get_num_dumpable(void) + return num_dumpable; + } + +-unsigned long long ++mdf_pfn_t + get_num_dumpable_cyclic(void) + { +- unsigned long long pfn, num_dumpable=0; ++ mdf_pfn_t pfn, num_dumpable=0; + struct cycle cycle = {0}; + + for_each_cycle(0, info->max_mapnr, &cycle) +@@ -5699,8 +5704,9 @@ write_elf_pages(struct cache_data *cd_header, struct cache_data *cd_page) + { + int i, phnum; + long page_size = info->page_size; +- unsigned long long pfn, pfn_start, pfn_end, paddr, num_excluded; +- unsigned long long num_dumpable, per; ++ mdf_pfn_t pfn, pfn_start, pfn_end, num_excluded; ++ unsigned long long paddr; ++ mdf_pfn_t num_dumpable, per; + unsigned long long memsz, filesz; + unsigned long frac_head, frac_tail; + off_t off_seg_load, off_memory; +@@ -5885,7 +5891,7 @@ write_elf_pages(struct cache_data *cd_header, struct cache_data *cd_page) + } + + int +-read_pfn(unsigned long long pfn, unsigned char *buf) ++read_pfn(mdf_pfn_t pfn, unsigned char *buf) + { + unsigned long long paddr; + +@@ -5904,7 +5910,7 @@ get_loads_dumpfile_cyclic(void) + int i, phnum, num_new_load = 0; + long page_size = info->page_size; + unsigned char buf[info->page_size]; +- unsigned long long pfn, pfn_start, pfn_end, num_excluded; ++ mdf_pfn_t pfn, pfn_start, pfn_end, num_excluded; + unsigned long frac_head, frac_tail; + Elf64_Phdr load; + struct cycle cycle = {0}; +@@ -5976,8 +5982,8 @@ write_elf_pages_cyclic(struct cache_data *cd_header, struct cache_data *cd_page) + int i, phnum; + long page_size = info->page_size; + unsigned char buf[info->page_size]; +- unsigned long long pfn, pfn_start, pfn_end, paddr, num_excluded; +- unsigned long long num_dumpable, per; ++ mdf_pfn_t pfn, pfn_start, pfn_end, num_excluded, num_dumpable, per; ++ unsigned long long paddr; + unsigned long long memsz, filesz; + unsigned long frac_head, frac_tail; + off_t off_seg_load, off_memory; +@@ -6197,8 +6203,8 @@ write_elf_pages_cyclic(struct cache_data *cd_header, struct cache_data *cd_page) + int + write_kdump_pages(struct cache_data *cd_header, struct cache_data *cd_page) + { +- unsigned long long pfn, per, num_dumpable; +- unsigned long long start_pfn, end_pfn; ++ mdf_pfn_t pfn, per, num_dumpable; ++ mdf_pfn_t start_pfn, end_pfn; + unsigned long size_out; + struct page_desc pd, pd_zero; + off_t offset_data = 0; +@@ -6404,8 +6410,8 @@ int + write_kdump_pages_cyclic(struct cache_data *cd_header, struct cache_data *cd_page, + struct page_desc *pd_zero, off_t *offset_data, struct cycle *cycle) + { +- unsigned long long pfn, per; +- unsigned long long start_pfn, end_pfn; ++ mdf_pfn_t pfn, per; ++ mdf_pfn_t start_pfn, end_pfn; + unsigned long size_out; + struct page_desc pd; + unsigned char buf[info->page_size], *buf_out = NULL; +@@ -7511,7 +7517,7 @@ read_vmcoreinfo_xen(void) + } + + int +-allocated_in_map(unsigned long long pfn) ++allocated_in_map(mdf_pfn_t pfn) + { + static unsigned long long cur_idx = -1; + static unsigned long cur_word; +@@ -7557,8 +7563,8 @@ exclude_xen3_user_domain(void) + unsigned int num_pt_loads = get_num_pt_loads(); + unsigned long page_info_addr; + unsigned long long phys_start, phys_end; +- unsigned long long pfn, pfn_end; +- unsigned long long j, size; ++ mdf_pfn_t pfn, pfn_end; ++ mdf_pfn_t j, size; + + /* + * NOTE: the first half of bitmap is not used for Xen extraction +@@ -7621,8 +7627,8 @@ exclude_xen4_user_domain(void) + unsigned int num_pt_loads = get_num_pt_loads(); + unsigned long page_info_addr; + unsigned long long phys_start, phys_end; +- unsigned long long pfn, pfn_end; +- unsigned long long j, size; ++ mdf_pfn_t pfn, pfn_end; ++ mdf_pfn_t j, size; + + /* + * NOTE: the first half of bitmap is not used for Xen extraction +@@ -7847,7 +7853,7 @@ print_vtop(void) + void + print_report(void) + { +- unsigned long long pfn_original, pfn_excluded, shrinking; ++ mdf_pfn_t pfn_original, pfn_excluded, shrinking; + + /* + * /proc/vmcore doesn't contain the memory hole area. +@@ -7952,9 +7958,9 @@ int + setup_splitting(void) + { + int i; +- unsigned long long j, pfn_per_dumpfile; +- unsigned long long start_pfn, end_pfn; +- unsigned long long num_dumpable = get_num_dumpable(); ++ mdf_pfn_t j, pfn_per_dumpfile; ++ mdf_pfn_t start_pfn, end_pfn; ++ mdf_pfn_t num_dumpable = get_num_dumpable(); + struct dump_bitmap bitmap2; + + if (info->num_dumpfile <= 1) +@@ -8281,7 +8287,7 @@ void + sort_splitting_info(void) + { + int i, j; +- unsigned long long start_pfn, end_pfn; ++ mdf_pfn_t start_pfn, end_pfn; + char *name_dumpfile; + + /* +@@ -8317,7 +8323,7 @@ int + check_splitting_info(void) + { + int i; +- unsigned long long end_pfn; ++ mdf_pfn_t end_pfn; + + /* + * Check whether there are not lack of /proc/vmcore. +@@ -8544,8 +8550,8 @@ reassemble_kdump_pages(void) + int i, fd = 0, ret = FALSE; + off_t offset_first_ph, offset_ph_org, offset_eraseinfo; + off_t offset_data_new, offset_zero_page = 0; +- unsigned long long pfn, start_pfn, end_pfn; +- unsigned long long num_dumpable; ++ mdf_pfn_t pfn, start_pfn, end_pfn; ++ mdf_pfn_t num_dumpable; + unsigned long size_eraseinfo; + struct dump_bitmap bitmap2; + struct disk_dump_header dh; +diff --git a/makedumpfile.h b/makedumpfile.h +index ad064a4..eb03688 100644 +--- a/makedumpfile-1.5.6/makedumpfile.h ++++ b/makedumpfile-1.5.6/makedumpfile.h +@@ -767,13 +767,15 @@ unsigned long long vaddr_to_paddr_ia64(unsigned long vaddr); + #define VADDR_REGION(X) (((unsigned long)(X)) >> REGION_SHIFT) + #endif /* ia64 */ + ++typedef unsigned long long mdf_pfn_t; ++ + #ifndef ARCH_PFN_OFFSET + #define ARCH_PFN_OFFSET 0 + #endif + #define paddr_to_pfn(X) \ + (((unsigned long long)(X) >> PAGESHIFT()) - ARCH_PFN_OFFSET) + #define pfn_to_paddr(X) \ +- (((unsigned long long)(X) + ARCH_PFN_OFFSET) << PAGESHIFT()) ++ (((mdf_pfn_t)(X) + ARCH_PFN_OFFSET) << PAGESHIFT()) + + /* Format of Xen crash info ELF note */ + typedef struct { +@@ -813,8 +815,8 @@ typedef struct { + } xen_crash_info_v2_t; + + struct mem_map_data { +- unsigned long long pfn_start; +- unsigned long long pfn_end; ++ mdf_pfn_t pfn_start; ++ mdf_pfn_t pfn_end; + unsigned long mem_map; + }; + +@@ -866,8 +868,8 @@ struct makedumpfile_data_header { + struct splitting_info { + char *name_dumpfile; + int fd_bitmap; +- unsigned long long start_pfn; +- unsigned long long end_pfn; ++ mdf_pfn_t start_pfn; ++ mdf_pfn_t end_pfn; + off_t offset_eraseinfo; + unsigned long size_eraseinfo; + } splitting_info_t; +@@ -914,7 +916,7 @@ struct DumpInfo { + unsigned long vaddr_for_vtop; /* virtual address for debugging */ + long page_size; /* size of page */ + long page_shift; +- unsigned long long max_mapnr; /* number of page descriptor */ ++ mdf_pfn_t max_mapnr; /* number of page descriptor */ + unsigned long page_offset; + unsigned long section_size_bits; + unsigned long max_physmem_bits; +@@ -1025,10 +1027,10 @@ struct DumpInfo { + * 1 .. xen_crash_info_t + * 2 .. xen_crash_info_v2_t */ + +- unsigned long long dom0_mapnr; /* The number of page in domain-0. +- * Different from max_mapnr. +- * max_mapnr is the number of page +- * in system. */ ++ mdf_pfn_t dom0_mapnr; /* The number of page in domain-0. ++ * Different from max_mapnr. ++ * max_mapnr is the number of page ++ * in system. */ + unsigned long xen_phys_start; + unsigned long xen_heap_start; /* start mfn of xen heap area */ + unsigned long xen_heap_end; /* end mfn(+1) of xen heap area */ +@@ -1048,15 +1050,15 @@ struct DumpInfo { + /* + * for splitting + */ +- unsigned long long split_start_pfn; +- unsigned long long split_end_pfn; ++ mdf_pfn_t split_start_pfn; ++ mdf_pfn_t split_end_pfn; + + /* + * for cyclic processing + */ + char *partial_bitmap1; + char *partial_bitmap2; +- unsigned long long num_dumpable; ++ mdf_pfn_t num_dumpable; + unsigned long bufsize_cyclic; + unsigned long pfn_cyclic; + +@@ -1453,7 +1455,7 @@ int readmem(int type_addr, unsigned long long addr, void *bufptr, size_t size); + int get_str_osrelease_from_vmlinux(void); + int read_vmcoreinfo_xen(void); + int exclude_xen_user_domain(void); +-unsigned long long get_num_dumpable(void); ++mdf_pfn_t get_num_dumpable(void); + int __read_disk_dump_header(struct disk_dump_header *dh, char *filename); + int read_disk_dump_header(struct disk_dump_header *dh, char *filename); + int read_kdump_sub_header(struct kdump_sub_header *kh, char *filename); +@@ -1589,18 +1591,18 @@ int get_xen_info_ia64(void); + #endif /* s390x */ + + struct cycle { +- unsigned long long start_pfn; +- unsigned long long end_pfn; ++ mdf_pfn_t start_pfn; ++ mdf_pfn_t end_pfn; + }; + + static inline int +-is_on(char *bitmap, unsigned long long i) ++is_on(char *bitmap, mdf_pfn_t i) + { + return bitmap[i>>3] & (1 << (i & 7)); + } + + static inline int +-is_dumpable(struct dump_bitmap *bitmap, unsigned long long pfn) ++is_dumpable(struct dump_bitmap *bitmap, mdf_pfn_t pfn) + { + off_t offset; + if (pfn == 0 || bitmap->no_block != pfn/PFN_BUFBITMAP) { +@@ -1616,7 +1618,7 @@ is_dumpable(struct dump_bitmap *bitmap, unsigned long long pfn) + } + + static inline int +-is_dumpable_cyclic(char *bitmap, unsigned long long pfn, struct cycle *cycle) ++is_dumpable_cyclic(char *bitmap, mdf_pfn_t pfn, struct cycle *cycle) + { + if (pfn < cycle->start_pfn || cycle->end_pfn <= pfn) + return FALSE; +@@ -1625,7 +1627,7 @@ is_dumpable_cyclic(char *bitmap, unsigned long long pfn, struct cycle *cycle) + } + + static inline int +-is_cyclic_region(unsigned long long pfn, struct cycle *cycle) ++is_cyclic_region(mdf_pfn_t pfn, struct cycle *cycle) + { + if (pfn < cycle->start_pfn || cycle->end_pfn <= pfn) + return FALSE; +@@ -1647,8 +1649,8 @@ is_zero_page(unsigned char *buf, long page_size) + } + + void write_vmcoreinfo_data(void); +-int set_bit_on_1st_bitmap(unsigned long long pfn, struct cycle *cycle); +-int clear_bit_on_1st_bitmap(unsigned long long pfn, struct cycle *cycle); ++int set_bit_on_1st_bitmap(mdf_pfn_t pfn, struct cycle *cycle); ++int clear_bit_on_1st_bitmap(mdf_pfn_t pfn, struct cycle *cycle); + + #ifdef __x86__ + +@@ -1759,7 +1761,7 @@ struct elf_prstatus { + /* + * Function Prototype. + */ +-unsigned long long get_num_dumpable_cyclic(void); ++mdf_pfn_t get_num_dumpable_cyclic(void); + int get_loads_dumpfile_cyclic(void); + int initial_xen(void); + unsigned long long get_free_memory_size(void); +diff --git a/sadump_info.c b/sadump_info.c +index f14ffc9..9434ff7 100644 +--- a/makedumpfile-1.5.6/sadump_info.c ++++ b/makedumpfile-1.5.6/sadump_info.c +@@ -94,7 +94,7 @@ static int read_device_diskset(struct sadump_diskset_info *sdi, void *buf, + size_t bytes, ulong *offset); + static int read_sadump_header(char *filename); + static int read_sadump_header_diskset(int diskid, struct sadump_diskset_info *sdi); +-static unsigned long long pfn_to_block(unsigned long long pfn); ++static unsigned long long pfn_to_block(mdf_pfn_t pfn); + static int lookup_diskset(unsigned long long whole_offset, int *diskid, + unsigned long long *disk_offset); + static int max_mask_cpu(void); +@@ -202,7 +202,8 @@ sadump_copy_1st_bitmap_from_memory(void) + * modify bitmap accordingly. + */ + if (si->kdump_backed_up) { +- unsigned long long paddr, pfn, backup_src_pfn; ++ unsigned long long paddr; ++ mdf_pfn_t pfn, backup_src_pfn; + + for (paddr = si->backup_src_start; + paddr < si->backup_src_start + si->backup_src_size; +@@ -754,7 +755,8 @@ sadump_initialize_bitmap_memory(void) + struct sadump_header *sh = si->sh_memory; + struct dump_bitmap *bmp; + unsigned long dumpable_bitmap_offset; +- unsigned long long section, max_section, pfn; ++ unsigned long long section, max_section; ++ mdf_pfn_t pfn; + unsigned long long *block_table; + + dumpable_bitmap_offset = +@@ -901,7 +903,7 @@ sadump_set_timestamp(struct timeval *ts) + return TRUE; + } + +-unsigned long long ++mdf_pfn_t + sadump_get_max_mapnr(void) + { + return si->sh_memory->max_mapnr; +@@ -951,7 +953,8 @@ failed: + int + readpage_sadump(unsigned long long paddr, void *bufptr) + { +- unsigned long long pfn, block, whole_offset, perdisk_offset; ++ mdf_pfn_t pfn; ++ unsigned long long block, whole_offset, perdisk_offset; + int fd_memory; + + if (si->kdump_backed_up && +@@ -1117,7 +1120,7 @@ sadump_check_debug_info(void) + } + + static unsigned long long +-pfn_to_block(unsigned long long pfn) ++pfn_to_block(mdf_pfn_t pfn) + { + unsigned long long block, section, p; + +diff --git a/sadump_info.h b/sadump_info.h +index c0175dd..131687a 100644 +--- a/makedumpfile-1.5.6/sadump_info.h ++++ b/makedumpfile-1.5.6/sadump_info.h +@@ -42,7 +42,7 @@ int sadump_copy_1st_bitmap_from_memory(void); + int sadump_initialize_bitmap_memory(void); + int sadump_num_online_cpus(void); + int sadump_set_timestamp(struct timeval *ts); +-unsigned long long sadump_get_max_mapnr(void); ++mdf_pfn_t sadump_get_max_mapnr(void); + int readpage_sadump(unsigned long long paddr, void *bufptr); + int sadump_check_debug_info(void); + int sadump_generate_vmcoreinfo_from_vmlinux(size_t *vmcoreinfo_size); +@@ -92,7 +92,7 @@ static inline int sadump_set_timestamp(struct timeval *ts) + return FALSE; + } + +-static inline unsigned long long sadump_get_max_mapnr(void) ++static inline mdf_pfn_t sadump_get_max_mapnr(void) + { + return 0; + } +-- +1.8.5.3 + diff --git a/kexec-tools.spec b/kexec-tools.spec index 9230ccf..55a1bdb 100644 --- a/kexec-tools.spec +++ b/kexec-tools.spec @@ -76,6 +76,7 @@ ExcludeArch: aarch64 # Patch601: kexec-tools-2.0.3-disable-kexec-test.patch Patch602: kexec-tools-2.0.4-makedumpfile-Fix-Makefile-for-eppic_makedumpfile.so-build.patch +Patch603: kexec-tools-2.0.4-makedumpfile-Introduce-the-mdf_pfn_t-type.patch %description kexec-tools provides /sbin/kexec binary that facilitates a new @@ -113,6 +114,7 @@ tar -z -x -v -f %{SOURCE23} %patch601 -p1 %patch602 -p1 +%patch603 -p1 tar -z -x -v -f %{SOURCE13}