Hello community,
here is the log from the commit of package makedumpfile
checked in at Sat Apr 14 01:03:13 CEST 2007.
--------
--- makedumpfile/makedumpfile.changes 2007-03-29 17:29:51.000000000 +0200
+++ /mounts/work_src_done/STABLE/makedumpfile/makedumpfile.changes 2007-04-13 19:02:03.000000000 +0200
@@ -1,0 +2,8 @@
+Fri Apr 13 19:00:54 CEST 2007 - tiwai@suse.de
+
+- updated to version 1.1.3:
+ * 2.6.21 kernel support
+ * fix handling of excluded zero-filled pages for crash
+ * crash can display dump_level
+
+-------------------------------------------------------------------
Old:
----
makedumpfile-1.1.2.tar.bz2
New:
----
makedumpfile-1.1.3.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ makedumpfile.spec ++++++
--- /var/tmp/diff_new_pack.j19213/_old 2007-04-14 01:03:07.000000000 +0200
+++ /var/tmp/diff_new_pack.j19213/_new 2007-04-14 01:03:07.000000000 +0200
@@ -1,5 +1,5 @@
#
-# spec file for package makedumpfile (Version 1.1.2)
+# spec file for package makedumpfile (Version 1.1.3)
#
# Copyright (c) 2007 SUSE LINUX Products GmbH, Nuernberg, Germany.
# This file and all modifications and additions to the pristine
@@ -14,8 +14,8 @@
BuildRequires: gcc-c++ zlib-devel
%define elfutils_version 0.124
License: GNU General Public License (GPL)
-Version: 1.1.2
-Release: 5
+Version: 1.1.3
+Release: 1
Summary: Partial kernel dump
Group: System/Kernel
URL: https://sourceforge.net/projects/makedumpfile/
@@ -84,6 +84,11 @@
/bin/*
%changelog
+* Fri Apr 13 2007 - tiwai@suse.de
+- updated to version 1.1.3:
+ * 2.6.21 kernel support
+ * fix handling of excluded zero-filled pages for crash
+ * crash can display dump_level
* Thu Mar 29 2007 - rguenther@suse.de
- add zlib-devel BuildRequires
* Fri Mar 09 2007 - tiwai@suse.de
++++++ makedumpfile-1.1.2.tar.bz2 -> makedumpfile-1.1.3.tar.bz2 ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/makedumpfile/diskdump_mod.h new/makedumpfile/diskdump_mod.h
--- old/makedumpfile/diskdump_mod.h 2007-03-09 03:20:58.000000000 +0100
+++ new/makedumpfile/diskdump_mod.h 2007-04-13 07:32:36.000000000 +0200
@@ -66,6 +66,7 @@
*/
struct kdump_sub_header {
unsigned long phys_base;
+ int dump_level; /* header_version 1 and later */
};
/* page flags */
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/makedumpfile/makedumpfile.c new/makedumpfile/makedumpfile.c
--- old/makedumpfile/makedumpfile.c 2007-03-09 03:21:09.000000000 +0100
+++ new/makedumpfile/makedumpfile.c 2007-04-13 07:32:36.000000000 +0200
@@ -158,6 +158,10 @@
return VERSION_2_6_18;
} else if (!strncmp(release, "2.6.19", strlen("2.6.19"))) {
return VERSION_2_6_19;
+ } else if (!strncmp(release, "2.6.20", strlen("2.6.20"))) {
+ return VERSION_2_6_20;
+ } else if (!strncmp(release, "2.6.21", strlen("2.6.21"))) {
+ return VERSION_2_6_21;
} else {
ERRMSG("The kernel version is not supported.\n");
ERRMSG("makedumpfile considers %s as the kernel version.\n",
@@ -389,29 +393,6 @@
}
int
-open_3rd_bitmap(struct DumpInfo *info)
-{
- int fd;
-
- if ((info->name_3rd_bitmap
- = (char *)malloc(sizeof(FILENAME_3RD_BITMAP))) == NULL) {
- ERRMSG("Can't allocate memory for the filename. %s\n",
- strerror(errno));
- return FALSE;
- }
- strcpy(info->name_3rd_bitmap, FILENAME_3RD_BITMAP);
- if ((fd = open(info->name_3rd_bitmap, O_RDWR|O_CREAT,
- S_IRUSR|S_IWUSR)) < 0) {
- ERRMSG("Can't open the dump file(%s). %s\n",
- FILENAME_3RD_BITMAP, strerror(errno));
- return FALSE;
- }
- unlink(info->name_3rd_bitmap);
- info->fd_3rd_bitmap = fd;
- return TRUE;
-}
-
-int
open_dump_bitmap(struct DumpInfo *info)
{
int fd;
@@ -493,9 +474,6 @@
if (!open_dump_bitmap(info))
return FALSE;
- if (!open_3rd_bitmap(info))
- return FALSE;
-
return TRUE;
}
@@ -773,9 +751,6 @@
tmp = divideup(divideup(info->max_mapnr, BITPERBYTE), info->page_size);
info->len_bitmap = tmp*info->page_size*2;
- if (info->flag_exclude_free)
- info->len_3rd_bitmap = info->len_bitmap / 2;
-
ret = TRUE;
out:
return ret;
@@ -1447,6 +1422,7 @@
SIZE_INIT(zone, "zone");
OFFSET_INIT(zone.free_pages, "zone", "free_pages");
OFFSET_INIT(zone.free_area, "zone", "free_area");
+ OFFSET_INIT(zone.vm_stat, "zone", "vm_stat");
OFFSET_INIT(zone.spanned_pages, "zone", "spanned_pages");
MEMBER_ARRAY_LENGTH_INIT(zone.free_area, "zone", "free_area");
@@ -1598,6 +1574,7 @@
pglist_data.node_spanned_pages);
WRITE_MEMBER_OFFSET("zone.free_pages", zone.free_pages);
WRITE_MEMBER_OFFSET("zone.free_area", zone.free_area);
+ WRITE_MEMBER_OFFSET("zone.vm_stat", zone.vm_stat);
WRITE_MEMBER_OFFSET("zone.spanned_pages", zone.spanned_pages);
WRITE_MEMBER_OFFSET("free_area.free_list", free_area.free_list);
WRITE_MEMBER_OFFSET("list_head.next", list_head.next);
@@ -1764,6 +1741,7 @@
pglist_data.node_spanned_pages);
READ_MEMBER_OFFSET("zone.free_pages", zone.free_pages);
READ_MEMBER_OFFSET("zone.free_area", zone.free_area);
+ READ_MEMBER_OFFSET("zone.vm_stat", zone.vm_stat);
READ_MEMBER_OFFSET("zone.spanned_pages", zone.spanned_pages);
READ_MEMBER_OFFSET("free_area.free_list", free_area.free_list);
READ_MEMBER_OFFSET("list_head.next", list_head.next);
@@ -2610,30 +2588,30 @@
}
int
-reset_3rd_bitmap(struct DumpInfo *info, unsigned long long pfn)
+reset_2nd_bitmap(struct DumpInfo *info, unsigned long long pfn)
{
off_t offset_pfn;
unsigned int buf_size;
- struct cache_data *bm3 = info->bm3;
+ struct cache_data *bm2 = info->bm2;
- offset_pfn = (pfn / PFN_BUFBITMAP) * BUFSIZE_BITMAP;
- bm3->offset = offset_pfn;
- buf_size = info->len_3rd_bitmap - bm3->offset;
+ offset_pfn = (info->len_bitmap/2) + (pfn/PFN_BUFBITMAP)*BUFSIZE_BITMAP;
+ bm2->offset = offset_pfn;
+ buf_size = info->len_bitmap - bm2->offset;
if (buf_size >= BUFSIZE_BITMAP) {
- bm3->cache_size = BUFSIZE_BITMAP;
- bm3->buf_size = BUFSIZE_BITMAP;
+ bm2->cache_size = BUFSIZE_BITMAP;
+ bm2->buf_size = BUFSIZE_BITMAP;
} else {
- bm3->cache_size = buf_size;
- bm3->buf_size = buf_size;
+ bm2->cache_size = buf_size;
+ bm2->buf_size = buf_size;
}
- if (!read_cache(bm3))
+ if (!read_cache(bm2))
return FALSE;
- set_bitmap(bm3->buf, pfn%PFN_BUFBITMAP, 0);
+ set_bitmap(bm2->buf, pfn%PFN_BUFBITMAP, 0);
- bm3->offset = offset_pfn;
- if (!write_cache_bufsz(bm3))
+ bm2->offset = offset_pfn;
+ if (!write_cache_bufsz(bm2))
return FALSE;
return TRUE;
@@ -2644,7 +2622,8 @@
{
int order, free_page_cnt = 0, i;
- unsigned long curr, previous, head, curr_page, curr_prev, free_pages;
+ unsigned long curr, previous, head, curr_page, curr_prev;
+ unsigned long free_pages = 0;
unsigned long long pfn, start_pfn;
for (order = (ARRAY_LENGTH(zone.free_area) - 1); order >= 0; --order) {
@@ -2674,7 +2653,7 @@
}
for (i = 0; i < (1<bm3->buf_size is set at reset_3rd_bitmap().
+ * Flush 2nd-bitmap.
+ * info->bm2->buf_size is set at reset_2nd_bitmap().
*/
- info->bm3->offset -= info->bm3->buf_size;
- if (!write_cache_bufsz(info->bm3))
+ info->bm2->offset -= info->bm2->buf_size;
+ if (!write_cache_bufsz(info->bm2))
return FALSE;
return TRUE;
}
int
-_exclude_free_page(struct DumpInfo *info)
-{
- if (!dump_memory_nodes(info))
- return FALSE;
-
- return TRUE;
-}
-
-int
-cp_cache(struct cache_data *source, struct cache_data *dest, int size)
-{
- while (size > 0) {
- if (size >= BUFSIZE_BITMAP) {
- source->cache_size = BUFSIZE_BITMAP;
- dest->cache_size = BUFSIZE_BITMAP;
- } else {
- source->cache_size = size;
- dest->cache_size = size;
- }
- dest->buf_size = 0;
-
- if(!read_cache(source)) {
- ERRMSG("Can't read the dump cache file(%s). %s\n",
- source->file_name, strerror(errno));
- return FALSE;
- }
- if(!write_cache(dest, source->buf, source->cache_size)) {
- ERRMSG("Can't write the dump cache file(%s). %s\n",
- dest->file_name, strerror(errno));
- return FALSE;
- }
-
- size -= BUFSIZE_BITMAP;
- }
- return TRUE;
-}
-
-int
-exclude_free_page(struct DumpInfo *info, struct cache_data *bm2, struct cache_data *bm3)
+exclude_free_page(struct DumpInfo *info, struct cache_data *bm2)
{
/*
@@ -2813,7 +2767,8 @@
return FALSE;
}
if ((SIZE(zone) == NOT_FOUND_STRUCTURE)
- || (OFFSET(zone.free_pages) == NOT_FOUND_STRUCTURE)
+ || ((OFFSET(zone.free_pages) == NOT_FOUND_STRUCTURE)
+ && (OFFSET(zone.vm_stat) == NOT_FOUND_STRUCTURE))
|| (OFFSET(zone.free_area) == NOT_FOUND_STRUCTURE)
|| (OFFSET(zone.spanned_pages) == NOT_FOUND_STRUCTURE)
|| (OFFSET(pglist_data.node_zones) == NOT_FOUND_STRUCTURE)
@@ -2828,28 +2783,14 @@
return FALSE;
}
- /*
- * Copy bitmap2 to bitmap3.
- */
- info->bm3 = bm3;
- bm2->offset = info->len_bitmap / 2;
- bm3->offset = 0;
- if (!cp_cache(bm2, bm3, info->len_bitmap / 2))
- return FALSE;
+ info->bm2 = bm2;
/*
- * Update bitmap3.
+ * Detect free pages and update 2nd-bitmap.
*/
if (!_exclude_free_page(info))
return FALSE;
- /*
- * Write back bitmap3 to bitmap2.
- */
- bm2->offset = info->len_bitmap / 2;
- bm3->offset = 0;
- if (!cp_cache(bm3, bm2, info->len_bitmap / 2))
- return FALSE;
return TRUE;
}
@@ -2863,7 +2804,7 @@
unsigned char *page_cache = NULL, *buf = NULL, *pcache;
unsigned int _count;
unsigned long flags, mapping;
- struct cache_data bm1, bm2, bm3;
+ struct cache_data bm1, bm2;
struct mem_map_data *mmd;
off_t offset_page;
const off_t failed = (off_t)-1;
@@ -2884,13 +2825,6 @@
bm2.offset = info->len_bitmap/2;
bm2.buf = NULL;
- bm3.fd = info->fd_3rd_bitmap;
- bm3.file_name = info->name_3rd_bitmap;
- bm3.cache_size = BUFSIZE_BITMAP;
- bm3.buf_size = 0;
- bm3.offset = 0;
- bm3.buf = NULL;
-
if ((bm1.buf = calloc(1, BUFSIZE_BITMAP)) == NULL) {
ERRMSG("Can't allocate memory for 1st-bitmap buffer. %s\n",
strerror(errno));
@@ -2901,12 +2835,6 @@
strerror(errno));
goto out;
}
- if (info->flag_exclude_free
- && (bm3.buf = calloc(1, BUFSIZE_BITMAP)) == NULL) {
- ERRMSG("Can't allocate memory for 3rd-bitmap buffer. %s\n",
- strerror(errno));
- goto out;
- }
if ((info->dump_level > DL_EXCLUDE_ZERO)
&& (page_cache = malloc(SIZE(page)*PGMM_CACHED)) == NULL) {
ERRMSG("Can't allocate memory for the pagedesc cache. %s\n",
@@ -2974,12 +2902,20 @@
*/
set_bitmap(bm1.buf, pfn%PFN_BUFBITMAP, val);
+ if (val == 0) {
+ /*
+ * If the bit of 1st-bitmap is 0,
+ * also 2nd-bitmap's must be 0.
+ */
+ set_bitmap(bm2.buf, pfn%PFN_BUFBITMAP, val);
+ continue;
+ }
+
/*
* Exclude the page filled with zero in case of creating
* the elf dumpfile.
*/
if (info->flag_elf_dumpfile
- && (val != 0)
&& (info->dump_level & DL_EXCLUDE_ZERO)) {
offset_page = paddr_to_offset(info, paddr);
if (!offset_page) {
@@ -3066,7 +3002,7 @@
goto out;
if (info->flag_exclude_free)
- if (!exclude_free_page(info, &bm2, &bm3))
+ if (!exclude_free_page(info, &bm2))
goto out;
ret = TRUE;
@@ -3079,8 +3015,6 @@
free(bm1.buf);
if (bm2.buf != NULL)
free(bm2.buf);
- if (bm3.buf != NULL)
- free(bm3.buf);
return ret;
}
@@ -3404,6 +3338,7 @@
* Write common header
*/
strcpy(dh->signature, KDUMP_SIGNATURE);
+ dh->header_version = 1;
dh->block_size = info->page_size;
dh->sub_hdr_size = 1;
dh->max_mapnr = info->max_mapnr;
@@ -3418,7 +3353,8 @@
/*
* Write sub header
*/
- sub_dump_header.phys_base = info->phys_base;
+ sub_dump_header.phys_base = info->phys_base;
+ sub_dump_header.dump_level = info->dump_level;
size = sizeof(struct kdump_sub_header);
if (!write_buffer(info->fd_dumpfile, dh->block_size, &sub_dump_header,
size, info->name_dumpfile))
@@ -3810,10 +3746,9 @@
int
write_kdump_pages(struct DumpInfo *info)
{
- unsigned int flag_change_bitmap = 0;
unsigned long long pfn, per, num_dumpable = 0, num_dumped = 0;
unsigned long size_out;
- struct page_desc pd;
+ struct page_desc pd, pd_zero;
off_t offset_data = 0, offset_memory = 0;
struct disk_dump_header *dh = info->dump_header;
unsigned char *buf = NULL, *buf_out = NULL;
@@ -3924,23 +3859,29 @@
goto out;
}
+ /*
+ * Write the data of zero-filled page.
+ */
+ if (info->dump_level & DL_EXCLUDE_ZERO) {
+ pd_zero.size = info->page_size;
+ pd_zero.flags = 0;
+ pd_zero.offset = offset_data;
+ pd_zero.page_flags = 0;
+ memset(buf, 0, pd_zero.size);
+ if (!write_cache(&pdata, buf, pd_zero.size))
+ goto out;
+ offset_data += pd_zero.size;
+ }
for (pfn = 0; pfn < info->max_mapnr; pfn++) {
if ((num_dumped % per) == 0)
print_progress(num_dumped, num_dumpable);
if ((pfn % PFN_BUFBITMAP) == 0) {
- if (flag_change_bitmap) {
- bm2.buf_size = BUFSIZE_BITMAP;
- bm2.offset -= BUFSIZE_BITMAP;
- if (!write_cache_bufsz(&bm2))
- goto out;
- }
if (info->len_bitmap - bm2.offset < BUFSIZE_BITMAP)
bm2.cache_size = info->len_bitmap - bm2.offset;
if (!read_cache(&bm2))
goto out;
- flag_change_bitmap = 0;
}
/*
@@ -3975,8 +3916,8 @@
*/
if ((info->dump_level & DL_EXCLUDE_ZERO)
&& is_zero_page(buf, info->page_size)) {
- set_bitmap(bm2.buf, pfn%PFN_BUFBITMAP, 0);
- flag_change_bitmap = 1;
+ if (!write_cache(&pdesc, &pd_zero, sizeof(page_desc_t)))
+ goto out;
continue;
}
/*
@@ -4018,12 +3959,7 @@
goto out;
if (!write_cache_bufsz(&pdesc))
goto out;
- if (flag_change_bitmap) {
- bm2.buf_size = BUFSIZE_BITMAP;
- bm2.offset -= BUFSIZE_BITMAP;
- if (!write_cache_bufsz(&bm2))
- goto out;
- }
+
/*
* Print the progress of the end.
*/
@@ -4126,15 +4062,6 @@
}
void
-close_3rd_bitmap(struct DumpInfo *info)
-{
- if ((info->fd_3rd_bitmap = close(info->fd_3rd_bitmap)) < 0)
- ERRMSG("Can't close the bitmap file(%s). %s\n",
- info->name_3rd_bitmap, strerror(errno));
- free(info->name_3rd_bitmap);
-}
-
-void
close_dump_bitmap(struct DumpInfo *info)
{
if ((info->fd_bitmap = close(info->fd_bitmap)) < 0)
@@ -4202,9 +4129,6 @@
close_dump_bitmap(info);
- if (info->flag_exclude_free)
- close_3rd_bitmap(info);
-
return TRUE;
}
@@ -4436,8 +4360,6 @@
close(info->fd_dumpfile);
if (info->fd_bitmap)
close(info->fd_bitmap);
- if (info->fd_3rd_bitmap)
- close(info->fd_3rd_bitmap);
if (info->pt_load_segments != NULL)
free(info->pt_load_segments);
if (info->mem_map_data != NULL)
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/makedumpfile/makedumpfile.h new/makedumpfile/makedumpfile.h
--- old/makedumpfile/makedumpfile.h 2007-03-09 03:21:09.000000000 +0100
+++ new/makedumpfile/makedumpfile.h 2007-04-13 07:32:36.000000000 +0200
@@ -74,10 +74,7 @@
}
#define isLRU(flags) test_bit(PG_lru, flags)
-#define isReserved(flags) test_bit(PG_reserved, flags)
#define isPrivate(flags) test_bit(PG_private, flags)
-#define isNosave(flags) test_bit(PG_nosave, flags)
-#define isCompound(flags) test_bit(PG_compound, flags)
#define isSwapCache(flags) test_bit(PG_swapcache, flags)
static inline int
@@ -139,7 +136,6 @@
#define BUFSIZE_BITMAP (4096)
#define PFN_BUFBITMAP (BITPERBYTE*BUFSIZE_BITMAP)
#define FILENAME_BITMAP "/tmp/kdump_bitmap.tmp"
-#define FILENAME_3RD_BITMAP "/tmp/kdump_3rd_bitmap.tmp"
#define FILENAME_STDOUT "STDOUT"
/*
@@ -279,8 +275,10 @@
#define VERSION_2_6_17 (17)
#define VERSION_2_6_18 (18)
#define VERSION_2_6_19 (19)
-#define LATEST_VERSION VERSION_2_6_19
-#define STR_LATEST_VERSION "linux-2.6.19"
+#define VERSION_2_6_20 (20)
+#define VERSION_2_6_21 (21)
+#define LATEST_VERSION VERSION_2_6_21
+#define STR_LATEST_VERSION "linux-2.6.21"
/*
* field name of config file
@@ -500,7 +498,6 @@
int block_order;
off_t offset_bitmap1;
unsigned long len_bitmap; /* size of bitmap(1st and 2nd) */
- unsigned long len_3rd_bitmap; /* size of bitmap(3rd) */
struct disk_dump_header *dump_header;
/*
@@ -534,10 +531,8 @@
* bitmap info:
*/
int fd_bitmap;
- int fd_3rd_bitmap;
char *name_bitmap;
- char *name_3rd_bitmap;
- struct cache_data *bm3;
+ struct cache_data *bm2;
struct vm_table { /* kernel VM-related data */
int numnodes;
ulong *node_online_map;
@@ -589,6 +584,7 @@
struct zone {
long free_pages;
long free_area;
+ long vm_stat;
long spanned_pages;
} zone;
struct pglist_data {
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/makedumpfile/Makefile new/makedumpfile/Makefile
--- old/makedumpfile/Makefile 2007-03-09 03:21:09.000000000 +0100
+++ new/makedumpfile/Makefile 2007-04-13 07:32:36.000000000 +0200
@@ -1,7 +1,7 @@
# makedumpfile
-VERSION=1.1.2
-DATE=09 March 2007
+VERSION=1.1.3
+DATE=13 April 2007
CC = gcc
CFLAGS = -g -O2 -Wall -D_FILE_OFFSET_BITS=64 \
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/makedumpfile/README new/makedumpfile/README
--- old/makedumpfile/README 2007-03-09 03:21:09.000000000 +0100
+++ new/makedumpfile/README 2007-04-13 07:32:36.000000000 +0200
@@ -14,7 +14,7 @@
# make; make install
* SUPPORTED KERNELS
- makedumpfile (version 1.1.2) supports the following kernels.
+ makedumpfile (version 1.1.3) supports the following kernels.
| FLATMEM | DISCONTIGMEM | SPARSEMEM
|-------------------+-------------------+-------------------
@@ -25,15 +25,16 @@
2.6.16 | OK | OK | -- | | -- | OK | -- | -- | -- | | -- |
2.6.17 | OK | OK | -- | | -- | OK | -- | -- | -- | OK | -- |
2.6.18 | OK | OK | -- | OK | -- | OK |TODO| -- | -- | OK | OK | OK
- 2.6.19 |TODO| OK | -- | OK | OK | OK |TODO| -- | OK | OK | OK | OK
- 2.6.20 |TODO| OK | -- | KP |TODO| OK |TODO| -- |TODO| OK | OK | KP
+ 2.6.19 | OK | OK | -- | OK | OK | OK |TODO| -- | OK | OK | OK | OK
+ 2.6.20 | OK | OK | -- | KP | OK | OK |TODO| -- | OK | OK | OK | KP
+ 21-rc5 | OK | OK | -- | OK | OK | OK |TODO| -- | OK | OK | OK | OK
OK : Support.
-- : Not support.
Empty : Not test yet.
TODO : TODO.
- KP : Both kexec/kdump does not work with PPC64 2.6.20 kernels. This is a
- known problem and a patch is being worked out.
+ KP : Both kexec/kdump does not work with PPC64 2.6.20 kernels.
+ This is a known problem fixed with later kernels.
* USAGE
Please see "man makedumpfile" or "makedumpfile -h".
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
---------------------------------------------------------------------
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org