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

Mark McLoughlin
2008-02-29T22:07:55Z

On Fri, 2008-02-29 at 19:38 +0100, Alexander van Heukelum wrote:
> On Fri, 29 Feb 2008 17:14:07 +0000, "Mark McLoughlin"
> <markmc@redhat.com> said:
>
> > 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
>
> Ouch.
>
> My first guess is that the BIOS data area is completely non-existent for
> Xen.
> Is it guaranteed that the memory is zeroed out on boot?

Yep, that seems to be the case

> In that case we can special-case it easily:
>
> change:
> /* Paranoia: should never happen, but... */
> if (lowmem >= 0x100000)
> lowmem = 0xa0000;
>
> into:
> /* Strange case, like Xen ;) */
> if (lowmem == 0 || lowmem >= 0x100000)
> lowmem = 0x9f000;
>
> Can you test that?

Yes, that fixes boot for me.

Thanks,
Mark.