vmap: Use an arena allocator for kernel vmaps
authorBarret Rhoden <brho@cs.berkeley.edu>
Sun, 27 Nov 2016 15:12:36 +0000 (10:12 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 29 Nov 2016 16:27:40 +0000 (11:27 -0500)
commit34dab584ca9a9afb2b79e232ab2d37885c2d3885
tree278f82fc0e377cb75767ec3f106fddc3f7ec08b5
parent03fa592d2a0702e612177dd4f1789136d717f219
vmap: Use an arena allocator for kernel vmaps

The kernel has a region of virtual addresses that are not mapped 1:1
with physical memory (which is the KERNBASE mapping).  We currently use
these for MMIO remapping, such as when a device wants an uncached
mapping.

Previously, we were using a homemade incremental allocator to manage the
virtual addresses and did not have a nice way to free the addresses.
Now, we have an arena allocator that also allows us to free the vmaps.
We use two arenas and the outer arena's free-func to free the vmaps in
batches, amortizing the overhead of the global TLB shootdown.

Note that there are a couple things to do still for safe unmappings at
runtime.  Specifically, we need to make sure that all PML4s in the
system always have the same contents as boot_pgdir for the vmap region.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/arch/riscv/ros/mmu.h
kern/arch/x86/ros/mmu64.h
kern/include/mm.h
kern/src/init.c
kern/src/mm.c