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

Ken'ichi Ohmichi oomichi at mxs.nes.nec.co.jp
Fri Apr 6 08:02:28 UTC 2007


Hi Dave,

2007/04/05 09:04:53 -0400, Dave Anderson <anderson at redhat.com> wrote:
>> >If this were to be restricted to kdump only, then it would be
>> >safe to add a field to the kdump_sub_header since it contains
>> >only one field.
>> >
>> >Whether it is necessary for diskdump is up to the diskdump
>> >maintainers to decide.  But if they want to do it, they would
>> >have to come up with different manner of adding it to the
>> >disk_dump_sub_header structure, because of the way
>> >that it's declared, i.e., using "long elf_regs" as a placeholder
>> >to describe the start of the processor-dependent register
>> >set.  They'd need to define a new disk_dump_sub_header
>> >version that alternatively would be used depending upon
>> >the header->version number.
>>
>> We asked the diskdump developers (Indoh-san, Akiyama-san) how
>> to display diskdump's dump_level, and they said that changing
>> of file format is not necessary for displaying the dump_level.
>> And they gave us a good advice that the crash utility can get
>> diskdump's dump_level by using a symbol "dump_level" like the
>> following:
>>
>> int get_dump_level(void)
>> {
>>         if (symbol_exists("dump_level")) {
>>                 int dump_level;
>>                 readmem(symbol_value("dump_level"), KVADDR, &dump_level,
>>                         sizeof(dump_level), "dump_level",
>>                         FAULT_ON_ERROR);
>>                 return dump_level;
>>
>>         }
>>         else
>>         ...
>>
>> I think it is a good way because the crash utility can get diskdump's
>> dump_level of the existing dumpfile. I propose the following way for it.
>> Please let me know your opinion.
>>
>> - If a symbol "dump_level" is present (diskdump), the dump_level is
>>   taken from a symbol "dump_level".
>> - Else if a dumpfile is kdump's and header_version is 1 or more, the
>>   dump_level taken from a new member "kdump_sub_header->dump_level".
>
>Both proposals sound good to me.
>
>Just so that I can have it ready-to-go for you in the next crash release,
>do you want to make the additional "dump_level" member an int or
>a long?

I would like to add a member "dump_level" as int, because diskdump's
dump_level is defined as int. If it is defined as long, the crash
utility gets the dump_level with something else on 64bit system.
On x86_64 RHEL4 (2.6.9-42.EL), I tried getting the dump_level (15):

crash> rd dump_level
ffffffffa0140ba4:  fffffffb0000000f                    ........
crash> rd -32 dump_level
ffffffffa0140ba4:  0000000f                              ....
crash>


And I think Bob's proposal (the excluded pages should not be accessed)
is worthy, too. I will add the following changes into makedumpfile.

makedumpfile:
- disk_dump_header->header_version is changed into 1 from 0.
- kdump_sub_header->dump_level is added as int, and makedumpfile sets
  the value into it.
- The page descriptors (struct page_desc) of all the excluded zero-pages
  point same zero-page. The crash utility can read zero-pages, even if
  it cannot accesss the excluded pages.


Could you change the crash utility as the following ?

The crash utility:
- If disk_dump_header->signature is "KDUMP   ", it checks its header_version.
  If it is 1 or more, the dump_level is taken from kdump_sub_header->dump_level,
  and the excluded pages cannot be accessed (by default, or option ?).


Thanks
Ken'ichi Ohmichi




More information about the Crash-utility mailing list