mm: Allow dev.mmap() to block
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 22 Mar 2018 18:39:33 +0000 (14:39 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 6 Apr 2018 19:23:01 +0000 (15:23 -0400)
commit270779b34f0d7b03d2df4b57da7665a4b59cecf3
tree354fffaeddeb15bb72db8c5d7090893bde35c357
parentf3ebcdf98fc10a3b72fc9a6f36114f6f862ca9f7
mm: Allow dev.mmap() to block

This is a bit hokey.  I'd like the dev.mmap function to be able to block.
Previously, that was called while holding the vmr spinlock.  This shrinks
the time that the spinlock is held by setting up a lot of the VMR in
advance of inserting it in the list.  Thus I split the allocation from
insertion and attached the file first.

The one complication is that the PM pruner code might look at the VMR while
vm_base and vm_end are being set.  To avoid issues, I added the racy ready
bool.

All of this is screaming for a rewrite.  At the very least, we could
separate out the address allocation to be an arena.  Though any major
changes should involve reading Austin's RadixVM paper.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/include/mm.h
kern/src/mm.c
kern/src/pagemap.c