makedumpfile: question about memory hole

Atsushi Kumagai kumagai-atsushi at mxc.nes.nec.co.jp
Tue Mar 19 03:49:26 EDT 2013


On Tue, 19 Mar 2013 11:42:20 +0900 (JST)
HATAYAMA Daisuke <d.hatayama at jp.fujitsu.com> wrote:

> From: Atsushi Kumagai <kumagai-atsushi at mxc.nes.nec.co.jp>
> Subject: Re: makedumpfile: question about memory hole
> Date: Tue, 19 Mar 2013 10:41:37 +0900
> 
> > On Fri, 15 Mar 2013 09:31:46 +0900 (JST)
> > HATAYAMA Daisuke <d.hatayama at jp.fujitsu.com> wrote:
> 
> >> What I don't understand well is that the part here:
> >> 
> >>                 pfn_start = paddr_to_pfn(phys_start);
> >>                 pfn_end   = paddr_to_pfn(phys_end);
> >> 
> >>                 if (!is_in_segs(pfn_to_paddr(pfn_start)))
> >>                         pfn_start++;
> >> 
> >> phys_start and pfn_to_paddr(pfn_start) should belong to the same page
> >> frame, so I suspect the pfn_start should be included in vmcore.
> >> 
> >> Looking into kexec-tool side, I don't see additional modification made
> >> to phys_start after it's parsed from /proc/iomem or counterpart on EFI
> >> interface. Is there any assumption about memory holes behind kernel?
> > 
> > Here is a PT_LOAD segment of ia64 machine which I actually use:
> > 
> >   Type           Offset             VirtAddr           PhysAddr
> >                  FileSiz            MemSiz              Flags  Align
> > [...]
> >   LOAD           0x000000015fd0b490 0xe0000040ffda5000 0x00000040ffda5000
> >                  0x000000000005a000 0x000000000005a000  RWE    0
> > 
> > In this case, pfn_to_paddr(pfn_start) is aligned to 0x40ffda4000 
> > because the page size is 16KiB, and this address is out of PT_LOAD
> > segment.
> > 
> >          phys_start
> >          = 0x40ffda5000                        
> >             |------------- PT_LOAD ----------------
> >      ----+----------+----------+----------+--------
> >          |   pfn:N  |  pfn:N+1 | pfn:N+2  |  ...
> >      ----+----------+----------+----------+--------
> >          |
> >    pfn_to_paddr(pfn:N)
> >    = 0x40ffda4000
> > 
> > The statement you said is for care the case that phys_start isn't aligned
> > with the page size.
> > 
> > BTW, I'll add a comment to explain this intention into here.
> 
> Thanks for the pictorial explanation. It's easy to understand.
> 
> Still I think pfn:N should be included in vmcore. The current
> implementation drops [0x40ffda5000, 0x40ffda8000] that is contained in
> the PT_LOAD. Or, the range must be hole or other kinds of unnecessary
> memory from some kernel-side assumption?

Oh, I understand your question correctly now.

When Ohmichi-san wrote this code, he thought the page which include
memory hole isn't be used. This came from the fact that the basic
unit of memory management is *page*, but there is no detailed
investigation. 

So, if there is any case where pfn:N is actually used, this statement
should be removed. Maybe, does this question come from an idea of such
cases ?


Thanks
Atsushi Kumagai



More information about the kexec mailing list