• Jeremy Fitzhardinge's avatar
    xen: Complete pagetable pinning · f4f97b3e
    Jeremy Fitzhardinge authored
    Xen requires all active pagetables to be marked read-only.  When the
    base of the pagetable is loaded into %cr3, the hypervisor validates
    the entire pagetable and only allows the load to proceed if it all
    checks out.
    
    This is pretty slow, so to mitigate this cost Xen has a notion of
    pinned pagetables.  Pinned pagetables are pagetables which are
    considered to be active even if no processor's cr3 is pointing to is.
    This means that it must remain read-only and all updates are validated
    by the hypervisor.  This makes context switches much cheaper, because
    the hypervisor doesn't need to revalidate the pagetable each time.
    
    This also adds a new paravirt hook which is called during setup once
    the zones and memory allocator have been initialized.  When the
    init_mm pagetable is first built, the struct page array does not yet
    exist, and so there's nowhere to put he init_mm pagetable's PG_pinned
    flags.  Once the zones are initialized and the struct page array
    exists, we can set the PG_pinned flags for those pages.
    
    This patch also adds the Xen support for pte pages allocated out of
    highmem (highpte) by implementing xen_kmap_atomic_pte.
    Signed-off-by: default avatarJeremy Fitzhardinge <jeremy@xensource.com>
    Signed-off-by: default avatarChris Wright <chrisw@sous-sol.org>
    Cc: Zach Amsden <zach@vmware.com>
    f4f97b3e
xen-ops.h 777 Bytes