• J
    x86, 64-bit: adjust mapping of physical pagetables to work with Xen · 4f9c11dd
    Jeremy Fitzhardinge 提交于
    This makes a few of changes to the construction of the initial
    pagetables to work better with paravirt_ops/Xen.  The main areas
    are:
    
     1. Support non-PSE mapping of memory, since Xen doesn't currently
        allow 2M pages to be mapped in guests.
    
     2. Make sure that the ioremap alias of all pages are dropped before
        attaching the new page to the pagetable.  This avoids having
        writable aliases of pagetable pages.
    
     3. Preserve existing pagetable entries, rather than overwriting.  Its
        possible that a fair amount of pagetable has already been constructed,
        so reuse what's already in place rather than ignoring and overwriting it.
    
    The algorithm relies on the invariant that any page which is part of
    the kernel pagetable is itself mapped in the linear memory area.  This
    way, it can avoid using ioremap on a pagetable page.
    
    The invariant holds because it maps memory from low to high addresses,
    and also allocates memory from low to high.  Each allocated page can
    map at least 2M of address space, so the mapped area will always
    progress much faster than the allocated area.  It relies on the early
    boot code mapping enough pages to get started.
    Signed-off-by: NJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
    Cc: xen-devel <xen-devel@lists.xensource.com>
    Cc: Stephen Tweedie <sct@redhat.com>
    Cc: Eduardo Habkost <ehabkost@redhat.com>
    Cc: Mark McLoughlin <markmc@redhat.com>
    Signed-off-by: NIngo Molnar <mingo@elte.hu>
    4f9c11dd
ioremap.c 14.8 KB