Re: [PATCH] reserve end-of-conventional-memory to 1MB on 32-bit

Mark McLoughlin
2008-02-29T17:15:22Z

On Fri, 2008-02-29 at 12:49 +0100, Alexander van Heukelum wrote:
> This patch adds explicit detection of the EBDA and reservation
> of the rom and adapter address space 0xa0000-0x100000 to the
> i386 kernels. It uses reserve_bootmem instead of reserve_early,
> because reserve_early is not yet available on i386.
>
> Before this patch, the EBDA size was hardcoded as 4Kb. Also, the
> reservation of the adapter range was done by modifying the e820
> map which is now not necessary any longer, and the code is removed
> from copy_e820_map.
>
> The changes in e820_64.c are only a change in the comment above
> copy_e820_map, and some changes of the types of local variables
> in that function such that the 32 and 64 bit versions become equal.
>
> Signed-off-by: Alexander van Heukelum <heukelum@fastmail.fm>
>
> ---
>
> On Thu, Feb 28, 2008 at 09:09:56PM +0000, Ian Campbell wrote:
> > On Thu, 2008-02-28 at 14:13 +0100, Alexander van Heukelum wrote:
> > > The 32-bit code still uses reserve_bootmem, so this is not really
> > > a unification with the 64-bit version of the ebda reservation code,
> > > but at least it provides the same detection logic and reserves the
> > > same areas.
> > >
> > > This does not crash immediately on qemu. No further testing was
> > > done! Otherwise:
> >
> > I haven't tested extensively either but it does seem to solve the
> > problem for Xen.
> >
> > Thanks!
> > Ian
>
> Thank you!
>
> Ingo,
>
> I think this is ready for -x86#testing.
> It boots to a small userspace in qemu (i386).
> If I should separate the cleanups, let me know.

I haven't investigated in any detail, but with 2.6.25-rc3 and your
patch I'm seeing a Xen guest hit this BUG:

void __init smp_alloc_memory(void)
{
trampoline_base = alloc_bootmem_low_pages(PAGE_SIZE);
/*
* Has to be in very low memory so we can execute
* real-mode AP code.
*/
if (__pa(trampoline_base) >= 0x9F000)
BUG();
}

Stack looks like:

[<c137ef97>] smp_alloc_memory+0x25 <--
[<c137ef97>] smp_alloc_memory+0x25
[<c137a500>] setup_arch+0x28e
[<c13735f7>] start_kernel+0x7a
[<c1379240>] xen_start_kernel+0x300

Cheers,
Mark.