x86 can handle missing multiboot mmaps
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 8 Aug 2013 20:02:00 +0000 (13:02 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 8 Aug 2013 20:02:00 +0000 (13:02 -0700)
commit68dddd7d64e259b05346b7761bc4e29d61e11b29
tree94387d04b8f324c350ef568867c6f3ee0873dfd7
parent8f1bf9ceca209ade020353bfd1ff4dd4ee665979
x86 can handle missing multiboot mmaps

If you run qemu with -kernel akaros-kernel, instead of with a hard disk image
(like mnt/hdd.img), qemu won't fake all of the multiboot memory maps.  x86 was
using this info to figure out what memory was free.  We now handle the case
where we only get a maximum memory amount from multiboot.

Incidentally, the memory reported by multiboot from the BIOS usually is
insufficient if you have more than 4GB of RAM, at least in my experience.  This
is why I was parsing the mmap regions, where multiboot details memory about
4GB.  Qemu with -kernel, which doesn't tell us the mmaps, does tell us all of
physical memory via the BIOS methods (mboot_detect_memory()).

With this change, you can run very large kernel images in qemu.  Qemu takes
forever to load large images (> 100MB) when it tries to load from a disk image.
You can load a 300MB+ kernel directly via -kernel in about a minute.
kern/arch/x86/page_alloc.c
kern/include/multiboot.h
kern/src/multiboot.c
kern/src/pmap.c