• N
    nEPT: Add EPT tables support to paging_tmpl.h · 37406aaa
    Nadav Har'El 提交于
    This is the first patch in a series which adds nested EPT support to KVM's
    nested VMX. Nested EPT means emulating EPT for an L1 guest so that L1 can use
    EPT when running a nested guest L2. When L1 uses EPT, it allows the L2 guest
    to set its own cr3 and take its own page faults without either of L0 or L1
    getting involved. This often significanlty improves L2's performance over the
    previous two alternatives (shadow page tables over EPT, and shadow page
    tables over shadow page tables).
    
    This patch adds EPT support to paging_tmpl.h.
    
    paging_tmpl.h contains the code for reading and writing page tables. The code
    for 32-bit and 64-bit tables is very similar, but not identical, so
    paging_tmpl.h is #include'd twice in mmu.c, once with PTTTYPE=32 and once
    with PTTYPE=64, and this generates the two sets of similar functions.
    
    There are subtle but important differences between the format of EPT tables
    and that of ordinary x86 64-bit page tables, so for nested EPT we need a
    third set of functions to read the guest EPT table and to write the shadow
    EPT table.
    
    So this patch adds third PTTYPE, PTTYPE_EPT, which creates functions (prefixed
    with "EPT") which correctly read and write EPT tables.
    Reviewed-by: NXiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
    Signed-off-by: NNadav Har'El <nyh@il.ibm.com>
    Signed-off-by: NJun Nakajima <jun.nakajima@intel.com>
    Signed-off-by: NXinhao Xu <xinhao.xu@intel.com>
    Signed-off-by: NYang Zhang <yang.z.zhang@Intel.com>
    Signed-off-by: NGleb Natapov <gleb@redhat.com>
    Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
    37406aaa
paging_tmpl.h 25.4 KB