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

Bruce Korb bruce.korb at gmail.com
Tue Dec 18 15:01:17 UTC 2012


Good morning, Dave,

On Tue, Dec 18, 2012 at 6:52 AM, Dave Anderson <anderson at redhat.com> wrote:
> then it is also issued to those end-points here:
>
>         if ((fp != stdout) && (fp != pc->stdpipe)) {
>                 fprintf(fp, "%s%s%s %s", new_line ? "\n" : "",
[...]
>         }
>
> It's that "duplication" above that you're seeing.
>
> And I am simply suggesting that the if statement above should be:
>
>         if ((fp != stdout) && (fp != pc->stdpipe) && (fp != pc->tmpfile)) {

That works best.  I had dismissed that because it was a behavioral change.
Thank you.

>> Also no.  "kmem -v" and "kmem -n" both show the same memory mappings
>> (as best as _my_ memory serves, that is.  For certain, neither has a mapping
>> for 0xffffea001bb1d1e8.)
>>
>> > OK so you say you cannot get the mappings for it, but what
>> > does "vtop 0xffffea001bb1d1e8" show?
>>
>> This:
>>
>> > crash> vtop 0xffffea001bb1d1e8
>> > VIRTUAL           PHYSICAL
>> > ffffea001bb1d1e8  879b1d1e8
>> >
>> > PML4 DIRECTORY: ffffffff817e7000
>> > PAGE DIRECTORY: 87fdf7067
>> >    PUD: 87fdf7000 => 87fdf6067
>> >    PMD: 87fdf66e8 => 8000000879a001e3
>> >   PAGE: 879a00000  (2MB)
>> >
>> >       PTE         PHYSICAL   FLAGS
>> > 8000000879a001e3  879a00000  (PRESENT|RW|ACCESSED|DIRTY|PSE|GLOBAL|NX)
>>
>> But given:
>>
>> > Sorry -- that's irrelevant.  You want to access the physical
>> > memory that the odd vmemmap page address references (not the
>> > physical page behind the page structure itself).
>>
>> Exactly right.  I need to be able to see the binary bits for that page so I can
>> pull them in and write them back out to a file of just those bits.  From there,
>> we'll be formatting a text file showing the lustre trace log.
>>
>> Thank you so much!  Regards, Bruce
>
> Right... seems like it should be such a simple thing to do...   :-(
>
> I don't understand what's going on, but I'm presuming that even if the
> vmemmap-type address doesn't fit into the "advertised" vmemmap range,
> that the kernel's __page_to_pfn() macro should still work to get the
> pfn represented by the page:
>
>  #elif defined(CONFIG_SPARSEMEM)
>  /*
>   * Note: section's mem_map is encorded to reflect its start_pfn.
>   * section[i].section_mem_map == mem_map's address - start_pfn;
>   */
>  #define __page_to_pfn(pg)                                       \
>  ({      const struct page *__pg = (pg);                         \
>          int __sec = page_to_section(__pg);                      \
>          (unsigned long)(__pg - __section_mem_map_addr(__nr_to_section(__sec))); \
>  })
>
> Maybe you could play around with emulating that macro w/crash, and see what
> comes up?

Will do, after a couple of con calls.  Thank you!  Regards, Bruce




More information about the Crash-utility mailing list