[Crash-utility] handling missing kdump pages in diskdump format

Ken'ichi Ohmichi oomichi at mxs.nes.nec.co.jp
Tue Mar 20 02:18:02 UTC 2007


Hi Bob,

Thank you for the great report.

2007/03/14 08:40:16 +0530, Vivek Goyal <vgoyal at in.ibm.com> wrote:
>> =====================================
>> Can ELF Dumpfiles Solve This Problem?
>> =====================================
>> 
>> To achieve correctness with ELF dumpfiles, one could perhaps remap the
>> four types of pages to the three types of ELF representations so that
>> "A) Not In The Address Space" and "B) Excluded Type" were both mapped
>> to "1) Not In The Address Space".  Then "C) Zero Content" would map
>> to "2) Not In The File, Zero Fill".  You would lose the ability to
>> know if a page were missing because it was never in the address space
>> in the first place, or because it was excluded because of its type.
>> But if you read a zero, you'd know it really was a zero.
>> 
>
>I think this is the way to go. Why would I like to know if a page was
>never present or mkdumpfile filtered it out? I think we can live with that
>and lets just not create any sort of mapping for excluded pages in finally
>generated ELF headers.

In the above way, I worry that the crash utility cannot get the
relocatable information (machdep->machspec->phys_start) on ia64.
At ia64_calc_phys_start(), the crash utility gets phdr->p_paddr
of region 5 memory section as the relocatable information.
If the start of region 5 is excluded, the crash gets different
phdr->p_paddr in the above way.


2007/03/05 16:53:40 -0700, Bob Montgomery <bob.montgomery at hp.com> wrote:
>> In the above patch, a user cannot distinguish between the original
>> unaccessable pages and the excluded pages.
>> I think that the crash utility should display the warning message
>> to mean "These pages are excluded by partial dump" when it accesses 
>> the excluded pages.
>
>I'm not sure how to do this.  I think it will require modifying memory.c
>in crash to accept another type of return value from read_diskdump,
>maybe?

I think that read_diskdump() should display the warning message
before returning SEEK_ERROR.
The following patch is for crash-4.0-3.20:

diff -rpuN crash-4.0-3.20.org/defs.h crash-4.0-3.20/defs.h
--- crash-4.0-3.20.org/defs.h	2007-02-22 05:52:01.000000000 +0900
+++ crash-4.0-3.20/defs.h	2007-03-06 17:06:51.000000000 +0900
@@ -211,6 +211,7 @@ struct number_option {
 
 #define DISKDUMP_LOCAL      (0x1)
 #define KDUMP_CMPRS_LOCAL   (0x2)
+#define NOT_ACCESS_EXCLUDED (0x4)
 #define DISKDUMP_VALID()    (dd->flags & DISKDUMP_LOCAL)
 #define KDUMP_CMPRS_VALID() (dd->flags & KDUMP_CMPRS_LOCAL)
 
diff -rpuN crash-4.0-3.20.org/diskdump.c crash-4.0-3.20/diskdump.c
--- crash-4.0-3.20.org/diskdump.c	2007-02-22 05:52:01.000000000 +0900
+++ crash-4.0-3.20/diskdump.c	2007-03-06 17:10:11.000000000 +0900
@@ -134,6 +134,8 @@ static int read_dump_header(void)
 	} else if (!memcmp(header->signature, KDUMP_SIGNATURE,
 				sizeof(header->signature))) {
 		dd->flags |= KDUMP_CMPRS_LOCAL;
+		if (header->header_version >= 1)
+			dd->flags |= NOT_ACCESS_EXCLUDED;
 	} else {
 		if (CRASHDEBUG(1))
 			error(INFO, "diskdump: dump does not have panic dump header\n");
@@ -452,6 +454,10 @@ read_diskdump(int fd, void *bufptr, int 
 	if ((pfn >= dd->header->max_mapnr) || !page_is_ram(pfn))
 		return SEEK_ERROR;
 	if (!page_is_dumpable(pfn)) {
+		if (dd->flags & NOT_ACCESS_EXCLUDED) {
+			error(INFO, "diskdump: cannot access paddr(%lx) due to the excluded page\n", paddr);
+			return SEEK_ERROR;
+		}
 		memset(bufptr, 0, cnt);
 		return cnt;
 	}
_


Thanks
Ken'ichi Ohmichi




More information about the Crash-utility mailing list