vmap: Use {map,unmap}_segment() helpers
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 28 Nov 2016 03:24:47 +0000 (22:24 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 29 Nov 2016 16:27:40 +0000 (11:27 -0500)
commit8834c93144ca274824ba76223df23717938753ce
tree67f0a45c4d64203e20c03e5feeaec05949e8d206
parent66fe82aa4744cffb203dab40353b6d10b854b162
vmap: Use {map,unmap}_segment() helpers

map_vmap_segment() is basically a wrapper with a lock around the x86
helper map_segment().  This commit exposes that helper and uses it
directly, instead of having another version of a PTE walker.  The x86
helpers are a little more capable than the one-off functions I had in
mm.c.

map_segment() and unmap_segment() are a little more efficient for larger
sizes, since they just walk once and then operate on every PTE in a PT
instead of doing a fresh pgdir walk for each page.  map() will try to
use jumbo pages; pgdir_walk() assumes you want a PML1.  unmap() also
frees intermediate PTs (not for kernel mappings, of course), which will
help if we ever reuse this vmap code for userspace mappings.

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