vmap: Make kernel intermediate mappings permanent
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 28 Nov 2016 03:19:22 +0000 (22:19 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 29 Nov 2016 16:27:40 +0000 (11:27 -0500)
commit66fe82aa4744cffb203dab40353b6d10b854b162
treea28ab42d6a2c79a4e26ee6fc4a78579ab3c93b88
parentadd6d0e319ddc887301e4036fff256e8fab56c52
vmap: Make kernel intermediate mappings permanent

There are two parts to this.

1) All kernel mappings, including all potential mappings (e.g. the vmap
dynamic range) have PML4 PTEs that point to allocated PML3s (which can
be all zero).

2) No kernel intermediate mapping will ever be removed.  Once a PT
exists for a kernel mapping, that PT will exist forever, even if all of
its mappings are removed.

Now we can safely copy the boot_pgdir's kernel PML4 PTEs to processes'
pgdirs and dynamically update the mappings without modifying the pgdirs
of each process.  The outer mapping is the same for all pgdirs, and it
never changes.

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