MFi386: revision 200219
Improve the algorithm the loader uses to choose a memory range for its heap when using a range above 1MB. MFC after: 1 week
This commit is contained in:
parent
8deeaefd93
commit
befb051a26
@ -34,8 +34,13 @@ __FBSDID("$FreeBSD$");
|
||||
#include "libi386.h"
|
||||
#include "btxv86.h"
|
||||
|
||||
vm_offset_t memtop, memtop_copyin;
|
||||
uint32_t bios_basemem, bios_extmem;
|
||||
vm_offset_t memtop, memtop_copyin, high_heap_base;
|
||||
uint32_t bios_basemem, bios_extmem, high_heap_size;
|
||||
|
||||
/*
|
||||
* The minimum amount of memory to reserve in bios_extmem for the heap.
|
||||
*/
|
||||
#define HEAP_MIN (3 * 1024 * 1024)
|
||||
|
||||
void
|
||||
bios_getmem(void)
|
||||
@ -48,4 +53,12 @@ bios_getmem(void)
|
||||
/* Set memtop to actual top of memory */
|
||||
memtop = memtop_copyin = 0x100000 + bios_extmem;
|
||||
|
||||
/*
|
||||
* If we have extended memory, use the last 3MB of 'extended' memory
|
||||
* as a high heap candidate.
|
||||
*/
|
||||
if (bios_extmem >= HEAP_MIN) {
|
||||
high_heap_size = HEAP_MIN;
|
||||
high_heap_base = memtop - HEAP_MIN;
|
||||
}
|
||||
}
|
||||
|
@ -97,13 +97,17 @@ main(void)
|
||||
bios_getmem();
|
||||
|
||||
#if defined(LOADER_BZIP2_SUPPORT)
|
||||
heap_top = PTOV(memtop_copyin);
|
||||
memtop_copyin -= 0x300000;
|
||||
heap_bottom = PTOV(memtop_copyin);
|
||||
#else
|
||||
heap_top = (void *)bios_basemem;
|
||||
heap_bottom = (void *)end;
|
||||
if (high_heap_size > 0) {
|
||||
heap_top = PTOV(high_heap_base + high_heap_size);
|
||||
heap_bottom = PTOV(high_heap_base);
|
||||
if (high_heap_base < memtop_copyin)
|
||||
memtop_copyin = high_heap_base;
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
heap_top = (void *)PTOV(bios_basemem);
|
||||
heap_bottom = (void *)end;
|
||||
}
|
||||
setheap(heap_bottom, heap_top);
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user