x86_64: start the kernel bootstrap heap above 16MiB
this will keep the memory area below 16MiB free for DMA memory allocations.
This commit is contained in:
@@ -18,7 +18,20 @@
|
||||
#include <kernel/types.h>
|
||||
#include <kernel/vm.h>
|
||||
|
||||
#define PTR32(x) ((void *)((uintptr_t)(x)))
|
||||
#define PTR32(x) ((void *)((uintptr_t)(x)))
|
||||
|
||||
/* the physical address of the start of the memblock heap.
|
||||
* this is an arbirary value; the heap can start anywhere in memory.
|
||||
* any reserved areas of memory (the kernel, bsp, bios data, etc) are
|
||||
* automatically taken into account.
|
||||
* HOWEVER, this value will dictate how much physical memory is required for
|
||||
* the kernel to boot successfully.
|
||||
* the value of 16MiB (0x1000000) means that all heap allocations will be
|
||||
* above 16MiB, leaving the area below free for DMA operations.
|
||||
* this value CAN be reduced all the way to zero to minimise the amount of
|
||||
* memory required to boot, but this may leave you with no DMA memory available.
|
||||
*/
|
||||
#define MEMBLOCK_HEAP_START 0x1000000
|
||||
|
||||
static ml_cpu_block g_bootstrap_cpu = {0};
|
||||
|
||||
@@ -33,7 +46,7 @@ static void bootstrap_cpu_init(void)
|
||||
|
||||
static void early_vm_init(uintptr_t reserve_end)
|
||||
{
|
||||
uintptr_t alloc_start = VM_KERNEL_VOFFSET;
|
||||
uintptr_t alloc_start = VM_KERNEL_VOFFSET + MEMBLOCK_HEAP_START;
|
||||
/* boot code mapped 2 GiB of memory from
|
||||
VM_KERNEL_VOFFSET */
|
||||
uintptr_t alloc_end = VM_KERNEL_VOFFSET + 0x7fffffff;
|
||||
|
||||
Reference in New Issue
Block a user