Increase kernel and user VA space.
This allows us to boot with more than 128MB of physical memory. Sponsored by: DARPA, AFRL Sponsored by: HEIF5
This commit is contained in:
parent
a4ed9e4f78
commit
229f3f0d9c
@ -43,19 +43,19 @@
|
||||
* Virtual memory related constants, all in bytes
|
||||
*/
|
||||
#ifndef MAXTSIZ
|
||||
#define MAXTSIZ (32*1024*1024) /* max text size */
|
||||
#define MAXTSIZ (1*1024*1024*1024) /* max text size */
|
||||
#endif
|
||||
#ifndef DFLDSIZ
|
||||
#define DFLDSIZ (128*1024*1024) /* initial data size limit */
|
||||
#endif
|
||||
#ifndef MAXDSIZ
|
||||
#define MAXDSIZ (128*1024*1024) /* max data size */
|
||||
#define MAXDSIZ (1*1024*1024*1024) /* max data size */
|
||||
#endif
|
||||
#ifndef DFLSSIZ
|
||||
#define DFLSSIZ (2*1024*1024) /* initial stack size limit */
|
||||
#define DFLSSIZ (128*1024*1024) /* initial stack size limit */
|
||||
#endif
|
||||
#ifndef MAXSSIZ
|
||||
#define MAXSSIZ (8*1024*1024) /* max stack size */
|
||||
#define MAXSSIZ (1*1024*1024*1024) /* max stack size */
|
||||
#endif
|
||||
#ifndef SGROWSIZ
|
||||
#define SGROWSIZ (128*1024) /* amount to grow stack */
|
||||
@ -128,12 +128,12 @@
|
||||
* We limit the size of the two spaces to 39 bits each.
|
||||
*
|
||||
* Upper region: 0xffffffffffffffff
|
||||
* 0xffffffffc0000000
|
||||
* 0xffffff8000000000
|
||||
*
|
||||
* Hole: 0xffffffffbfffffff
|
||||
* 0x0000000080000000
|
||||
* Hole: 0xffffff7fffffffff
|
||||
* 0x0000008000000000
|
||||
*
|
||||
* Lower region: 0x000000007fffffff
|
||||
* Lower region: 0x0000007fffffffff
|
||||
* 0x0000000000000000
|
||||
*
|
||||
* We use the upper region for the kernel, and the lower region for userland.
|
||||
@ -152,19 +152,20 @@
|
||||
#define VM_MIN_ADDRESS (0x0000000000000000UL)
|
||||
#define VM_MAX_ADDRESS (0xffffffffffffffffUL)
|
||||
|
||||
/* 256 MiB of kernel addresses */
|
||||
#define VM_MIN_KERNEL_ADDRESS (0xffffffffc0000000UL)
|
||||
#define VM_MAX_KERNEL_ADDRESS (0xffffffffcfffffffUL)
|
||||
/* 32 GiB of kernel addresses */
|
||||
#define VM_MIN_KERNEL_ADDRESS (0xffffff8000000000UL)
|
||||
#define VM_MAX_KERNEL_ADDRESS (0xffffff8800000000UL)
|
||||
|
||||
/* Direct Map for 512 MiB of PA: 0x0 - 0x1fffffff */
|
||||
#define DMAP_MIN_ADDRESS (0xffffffffd0000000UL)
|
||||
#define DMAP_MAX_ADDRESS (0xffffffffefffffffUL)
|
||||
/* Direct Map for 128 GiB of PA: 0x0 - 0x1fffffffff */
|
||||
#define DMAP_MIN_ADDRESS (0xffffffc000000000UL)
|
||||
#define DMAP_MAX_ADDRESS (0xffffffdfffffffffUL)
|
||||
|
||||
#define DMAP_MIN_PHYSADDR (0x0000000000000000UL)
|
||||
#define DMAP_MAX_PHYSADDR (DMAP_MAX_ADDRESS - DMAP_MIN_ADDRESS)
|
||||
|
||||
/* True if pa is in the dmap range */
|
||||
#define PHYS_IN_DMAP(pa) ((pa) <= DMAP_MAX_PHYSADDR)
|
||||
#define PHYS_IN_DMAP(pa) ((pa) >= DMAP_MIN_PHYSADDR && \
|
||||
(pa) <= DMAP_MAX_PHYSADDR)
|
||||
/* True if va is in the dmap range */
|
||||
#define VIRT_IN_DMAP(va) ((va) >= DMAP_MIN_ADDRESS && \
|
||||
(va) <= DMAP_MAX_ADDRESS)
|
||||
@ -186,13 +187,15 @@
|
||||
})
|
||||
|
||||
#define VM_MIN_USER_ADDRESS (0x0000000000000000UL)
|
||||
#define VM_MAX_USER_ADDRESS (0x0000000080000000UL)
|
||||
#define VM_MAX_USER_ADDRESS (0x0000008000000000UL)
|
||||
|
||||
#define VM_MINUSER_ADDRESS (VM_MIN_USER_ADDRESS)
|
||||
#define VM_MAXUSER_ADDRESS (VM_MAX_USER_ADDRESS)
|
||||
|
||||
#define KERNBASE (VM_MIN_KERNEL_ADDRESS)
|
||||
#define USRSTACK (VM_MAX_USER_ADDRESS)
|
||||
#define SHAREDPAGE (VM_MAXUSER_ADDRESS - PAGE_SIZE)
|
||||
#define USRSTACK SHAREDPAGE
|
||||
|
||||
#define KERNENTRY (0x200)
|
||||
|
||||
/*
|
||||
|
@ -102,7 +102,6 @@ _start:
|
||||
/* finish building ring */
|
||||
|
||||
la t0, hardstack_end
|
||||
sub t0, t0, s11
|
||||
csrw mscratch, t0
|
||||
|
||||
la t0, mentry
|
||||
|
@ -445,31 +445,33 @@ pmap_early_vtophys(vm_offset_t l1pt, vm_offset_t va)
|
||||
}
|
||||
|
||||
static void
|
||||
pmap_bootstrap_dmap(vm_offset_t l2pt)
|
||||
pmap_bootstrap_dmap(vm_offset_t l1pt, vm_paddr_t kernstart)
|
||||
{
|
||||
vm_offset_t va;
|
||||
vm_paddr_t pa;
|
||||
pd_entry_t *l2;
|
||||
u_int l2_slot;
|
||||
pd_entry_t *l1;
|
||||
u_int l1_slot;
|
||||
pt_entry_t entry;
|
||||
u_int pn;
|
||||
|
||||
pa = kernstart & ~L1_OFFSET;
|
||||
va = DMAP_MIN_ADDRESS;
|
||||
l2 = (pd_entry_t *)l2pt;
|
||||
l2_slot = pmap_l2_index(DMAP_MIN_ADDRESS);
|
||||
l1 = (pd_entry_t *)l1pt;
|
||||
l1_slot = pmap_l1_index(DMAP_MIN_ADDRESS);
|
||||
|
||||
for (pa = 0; va < DMAP_MAX_ADDRESS; pa += L2_SIZE, va += L2_SIZE, l2_slot++) {
|
||||
KASSERT(l2_slot < Ln_ENTRIES, ("Invalid L2 index"));
|
||||
for (; va < DMAP_MAX_ADDRESS;
|
||||
pa += L1_SIZE, va += L1_SIZE, l1_slot++) {
|
||||
KASSERT(l1_slot < Ln_ENTRIES, ("Invalid L1 index"));
|
||||
|
||||
/* superpages */
|
||||
pn = ((pa >> L2_SHIFT) & Ln_ADDR_MASK);
|
||||
pn = ((pa >> L1_SHIFT) & Ln_ADDR_MASK);
|
||||
entry = (PTE_VALID | (PTE_TYPE_SRWX << PTE_TYPE_S));
|
||||
entry |= (pn << PTE_PPN1_S);
|
||||
entry |= (pn << PTE_PPN2_S);
|
||||
|
||||
pmap_load_store(&l2[l2_slot], entry);
|
||||
pmap_load_store(&l1[l1_slot], entry);
|
||||
}
|
||||
|
||||
cpu_dcache_wb_range((vm_offset_t)l2, PAGE_SIZE);
|
||||
cpu_dcache_wb_range((vm_offset_t)l1, PAGE_SIZE);
|
||||
cpu_tlb_flushID();
|
||||
}
|
||||
|
||||
@ -485,7 +487,6 @@ pmap_bootstrap(vm_offset_t l1pt, vm_paddr_t kernstart, vm_size_t kernlen)
|
||||
vm_offset_t va, freemempos;
|
||||
vm_offset_t dpcpu, msgbufpv;
|
||||
vm_paddr_t pa, min_pa;
|
||||
vm_offset_t l2pt;
|
||||
int i;
|
||||
|
||||
kern_delta = KERNBASE - kernstart;
|
||||
@ -520,8 +521,7 @@ pmap_bootstrap(vm_offset_t l1pt, vm_paddr_t kernstart, vm_size_t kernlen)
|
||||
}
|
||||
|
||||
/* Create a direct map region early so we can use it for pa -> va */
|
||||
l2pt = (l1pt + PAGE_SIZE);
|
||||
pmap_bootstrap_dmap(l2pt);
|
||||
pmap_bootstrap_dmap(l1pt, min_pa);
|
||||
|
||||
va = KERNBASE;
|
||||
pa = KERNBASE - kern_delta;
|
||||
|
Loading…
x
Reference in New Issue
Block a user