x86: EPT and KPT are contiguous
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 1 Apr 2015 23:55:53 +0000 (19:55 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 7 Apr 2015 19:06:59 +0000 (15:06 -0400)
commitddb9fa78b5d97e4107a9404f4146140ef8bf9a5a
tree98b6388643bdb4d90034fa4d2804745f64c2e837
parent7d5c5ebd6717378e58405a002b8c3e63f532e99b
x86: EPT and KPT are contiguous

Ron had a great idea: alloc two contig pages for every KPT intermediate
page table, and have the corresponding EPT page be the adjacent physical
page.  The downside is the memory waste for non-VMM processes and the
pressure on the memory allocator.  The upside is the code is much
simpler and memwalks are faster, since we can easily find an EPTE given
a KPTE.

This commit does the two-page alloc for the intermediate pages.  The
existing EPT code won't actually work right now, esp since the pm ops
don't do EPT work.

There's some ugliness with the boot page directories.  I can't put and
align 8192 in entry64.S and have grub boot the damn thing.  So I put in
some dirty hacks to special case the boottime kernel mappings.
kern/arch/x86/pmap64.c
kern/arch/x86/vmm/vmm.c