• Jeremy Fitzhardinge's avatar
    xen: virtual mmu · 3b827c1b
    Jeremy Fitzhardinge authored
    Xen pagetable handling, including the machinery to implement direct
    pagetables.
    
    Xen presents the real CPU's pagetables directly to guests, with no
    added shadowing or other layer of abstraction.  Naturally this means
    the hypervisor must maintain close control over what the guest can put
    into the pagetable.
    
    When the guest modifies the pte/pmd/pgd, it must convert its
    domain-specific notion of a "physical" pfn into a global machine frame
    number (mfn) before inserting the entry into the pagetable.  Xen will
    check to make sure the domain is allowed to create a mapping of the
    given mfn.
    
    Xen also requires that all mappings the guest has of its own active
    pagetable are read-only.  This is relatively easy to implement in
    Linux because all pagetables share the same pte pages for kernel
    mappings, so updating the pte in one pagetable will implicitly update
    the mapping in all pagetables.
    
    Normally a pagetable becomes active when you point to it with cr3 (or
    the Xen equivalent), but when you do so, Xen must check the whole
    pagetable for correctness, which is clearly a performance problem.
    
    Xen solves this with pinning which keeps a pagetable effectively
    active even if its currently unused, which means that all the normal
    update rules are enforced.  This means that it need not revalidate the
    pagetable when loading cr3.
    
    This patch has a first-cut implementation of pinning, but it is more
    fully implemented in a later patch.
    Signed-off-by: default avatarJeremy Fitzhardinge <jeremy@xensource.com>
    Signed-off-by: default avatarChris Wright <chrisw@sous-sol.org>
    3b827c1b
enlighten.c 17.8 KB