freebsd-dev/sys/boot/i386/loader
John Baldwin f1a6fd5d07 Improve the algorithm the loader uses to choose a memory range for its
heap when using a range above 1MB.

Previously the loader would always use the last 3MB in the first memory
range above 1MB for the heap.  However, this memory range is also where the
kernel and any modules are loaded.  If this memory range is "small", then
using the high 3MB for the heap may not leave enough room for the kernel
and modules.

Now the loader will use any range below 4GB for the heap, and the logic to
choose the "high" heap region has moved into biosmem.c.  It sets two
variables that the loader can use for a high heap if it desires.  When a
high heap is enabled (BZIP2, FireWire, GPT, or ZFS), then the following
memory ranges are preferred for the heap in order from best to worst:
- The largest memory region in the SMAP with a start address greater than
  1MB.  The memory region must be at least 3MB in length.  This leaves the
  region starting at 1MB purely for use by the kernel and modules.
- The last 3MB of the memory region starting at 1MB if it is at least 3MB
  in size.  This matches the current behavior except that the current loader
  would break horribly if the first region was not at least 3MB in size.
- The memory range from the end of the loader up to the 640k window.  This
  is the range the loader uses when none of the high-heap-requesting options
  are enabled.

Tested by:	hrs
MFC after:	1 week
2009-12-07 16:29:43 +00:00
..
conf.c Add new loader console type: "spinconsole". This console selects the 2009-11-27 03:55:42 +00:00
help.i386 Add an 'smap' command that dumps out the BIOS SMAP. 2006-09-28 19:07:13 +00:00
loader.rc Add back some bits. 2005-10-30 05:41:42 +00:00
main.c Improve the algorithm the loader uses to choose a memory range for its 2009-12-07 16:29:43 +00:00
Makefile Create a seperate ZFS enabled loader. 2009-11-23 16:00:16 +00:00
version