Messages in this thread | | | Subject | Re: [PATCH] reserve end-of-conventional-memory to 1MB on 32-bit | From | Mark McLoughlin <> | Date | Fri, 29 Feb 2008 17:14:07 +0000 |
| |
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.
| |