[Crash-utility] kmem: WARNING: cannot find mem_map page for address

Dave Anderson anderson at redhat.com
Wed Dec 19 13:59:48 UTC 2012



----- Original Message -----
> Hi Dave,
> 
> On Tue, Dec 18, 2012 at 2:12 PM, Dave Anderson <anderson at redhat.com>
> wrote:
> >> > crash> p mem_section[0x400]
> >> > $13 = (struct mem_section *) 0xffffffff81a26658
> >> > crash> p mem_section[0x400][0x0]
> >> > $14 = {
> >> >   section_mem_map = 0xffffffff81a26630,
> >> >   pageblock_flags = 0xffffffff81a26680
> >> > }
> 
> I think I did show the memory section.  But it is understandable if you missed it.
> I plodded my way through the macros to figure out that the flag value
> of
> 
> > crash> p $tp->page->flags
> > $9 = 0x200000000000000
> 
> ultimately maps to indexes of 0x400 and 0.
> (47 bit shift for first index)
> There are only two fields because of kernel build options.
> 
> >  crash> struct mem_section ffff88021e5eb000 -x
> >  struct mem_section {
> >    section_mem_map = 0xffffea0000000003,
> >    pageblock_flags = 0xffff88021e1eaa00,
> 
> Since your example has upper 4 bytes of 0xffffea00, similar to
> the (cfs_page_t *) 0xffffea001bb1d1e8 page address I am trying to
> understand, maybe the 0xffffffff81a26630 address is bogus?
> 
> >    page_cgroup = 0xffff880215880000,
> >    pad = 0x0

Right, mem_section->section_mem_map has to contain a vmemmap address for
this to make any sense.  

You might try the obvious, which is to do what is done for the advertised 
vmemmap pages.  

Get the page structure offset from the beginning of the vmemmap range:

 crash> eval 0xffffea001bb1d1e8 - ffffea0000000000
 hexadecimal: 1bb1d1e8  
     decimal: 464638440  
       octal: 3354350750
      binary: 0000000000000000000000000000000000011011101100011101000111101000
 crash>

Get the page number (pfn) by dividing that by the sizeof a page (64 on my system):

 crash> eval 1bb1d1e8 / 64
 hexadecimal: 6ec747  
     decimal: 7259975  
       octal: 33543507
      binary: 0000000000000000000000000000000000000000011011101100011101000111
 crash>

Multiply the resultant pfn times the page size to get the physical address:

  crash> eval 6ec747 * 4k
 hexadecimal: 6ec747000  (29039900KB)
     decimal: 29736857600
       octal: 335435070000
      binary: 0000000000000000000000000000011011101100011101000111000000000000
 crash>

And then "rd -p" the physical address to see if (1) it exists, and (2) you can
somehow verify that the data is correct -- if that's even possible.

Dave




More information about the Crash-utility mailing list