Re: [PATCH 2/2] x86_64: make early_node_mem return align address

Yinghai Lu
2008-01-30T03:07:29Z

On Tuesday 29 January 2008 06:55:45 pm Andi Kleen wrote:
> On Tuesday 29 January 2008 18:41, Yinghai Lu wrote:
> > On Tuesday 29 January 2008 01:33:29 am Andi Kleen wrote:
> > > On Tuesday 29 January 2008 10:05, Yinghai Lu wrote:
> > > > [PATCH 2/2] x86_64: make early_node_mem return align address
> > > >
> > > > boot oops when system get 64g or 128g installed
> > >
> > > Probably it should just use reserve_early(). Does this patch work?
> > >
> > > The alignment change is needed at some point too, but only to
> > > relax the alignment to not force all early allocations to be page
> > > padded.
> >
> > No, my patch doesn't force all early allocations to be page padded.
> > for find_e820_mem, i just change PAGE_ALIGN to be aligned align
> > parameter....
>
> They are already all PAGE_ALIGN()ed (which is too strict, but needs
> some care to fix properly), but your patch uses it the wrong way.
> The PAGE_ALIGNment was added some time ago to avoid such over
> lapping, but it should not actually be needed for that anymore.
>
> >
> > only make early_node_mem have aligned data. because it seems it like
> > to...and assume that.
>
> Using alignment doesn't seem the correct way to avoid overlapping.
>
> If there is still overlap then some reservation needs to be extended.
>
> > I think your patch will get early panic about overlap between bss and
> > bootmem... like the 256g machine, bss is overlapped with early page
> > table...
>
> Well did you test it?
>
> bss should have been reserved by this line in head64.c
>
> reserve_early(__pa_symbol(&_text), __pa_symbol(&_end));
>
> (in git-x86). In earlier kernels it was checked for explicitely by the e820
> allocator.

no early panic. but the bss end still get corrupted.

because bootmap_start is used as <<PAGE_SHIFT, and it is overlapped with bss tail page.

YH