Mike Mason wrote:
 Dave Anderson wrote:
 > Mike Mason wrote:
 >
 >> I'm seeing the following warning when I run crash against a kdump vmcore
 >>   created on an i386 smp system with 4 GB RAM.
 >>
 >>         WARNING: cannot access vmalloc'd module memory
 >>
 >> The relevant version #s are:
 >>
 >>         crash 4.0-25
 >>         kernel 2.6.16.14-6-bigsmp
 >>
 >> crash -d2 shows the following:
 >>
 >> crash: read error: kernel virtual address: f8c6f680  type: "module
struct"
 >> WARNING: cannot access vmalloc'd module memory
 >
 > Hi Mike,
 >
 > It's a read error, and given that netdump/diskdump/kdump all use the
 > same "read_netdump()" function, if the physical address associated
 > with vmalloc address f8c6f680 is not found in the vmcore file, a read
 > error like the above will occur.
 >
 > However, that does presume that the virtual-to-physical translation
 > of the module's vmalloc'd address is correct.  If you run crash on the
 > live system running that particular kernel, is module data accessible?
 I don't see the warning when running crash on a live system.  On a live
 system, the "list modules" command shows the entire linked list.  When
 viewing the vmcore, I get this:
 crash> list modules
 c02fc354
 f8c6f684
 list: read error: kernel virtual address: f8c6f684  type: "list entry"
 
Right (which is what the "mod" command does).
 >
 > Also, if you do a "vtop f8c6f680", it will give you the physical address
 > that would be passed to read_netdump() to access.  You can then
 > check that physical address against the ranges of physical memory
 > stored in the vmcore by doing a "help -n".
 "vtop f8c6f680" shows:
 VIRTUAL   PHYSICAL
 f8c6f680  101ede680
 "help -n" shows:
 vmcore_data:
                    flags: c0 (KDUMP_LOCAL|KDUMP_ELF64)
                     ndfd: 3
                      ofp: 8dba050
              header_size: 1000
     num_pt_load_segments: 4
       pt_load_segment[0]:
              file_offset: 3e8
               phys_start: 0
                 phys_end: a0000
       pt_load_segment[1]:
              file_offset: a03e8
               phys_start: 100000
                 phys_end: 1000000
       pt_load_segment[2]:
              file_offset: fa03e8
               phys_start: 5000000
                 phys_end: 38000000
       pt_load_segment[3]:
              file_offset: 33fa03e8
               phys_start: 38000000
                 phys_end: f7fed380
 Is this what I should be looking for?  If I'm interpreting this
 correctly, the maximum phys_end (f7fed380) is less than 101ede680,
 resulting in the warning.  Does this mean kdump isn't capturing all of
 memory in this case? 
That's what it looks like.  This is similar in nature to the kdump discussion
in this list a couple of weeks ago, where kdump creates PT_LOAD segments
that are not page aligned.  In this case, the phsyical memory just doesn't
seem to be included at all.
Note that if you go down a little farther in the "help -n" output, you'll
see the
ELF header contents for each PT_LOAD segment, from which the "phys_start"
and "phys_end" value above are determined.  The phys_start value is the
PT_LOAD "p_paddr" value; the phys_end value is equal to the PT_LOAD's
"p_paddr + p_memsz".
Another thing of interest would be to dump the e820 map with "mach -m"
and check the highest E820_RAM physical address.  That should
correlate with the page-shifted value of "max_mapnr".
Dave