mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
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
ff85a22cfd
commit
1a800d321e
2 changed files with 25 additions and 8 deletions
|
|
@ -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 a new issue