Good morning, Dave,
On Tue, Dec 18, 2012 at 6:52 AM, Dave Anderson <anderson(a)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