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